写点什么

专访罗迪:高二 Android 大牛的成长之路

  • 2016-05-18
  • 本文字数:3100 字

    阅读完需:约 10 分钟

近期一名新星在国内 Android 开发社区冉冉升起,他就是目前正在读高二的罗迪(Lody),前段时间他开源的 Legend、TurboDex 等项目受到业界的肯定。InfoQ 也对他进行了采访,了解他的技术成长历程以及对技术的理解。

技术学习与成长

InfoQ:请你先介绍一下自己。你是从什么时候开始学习编程,什么时候接触 Android 开发?

罗迪:大家好,我是罗迪,英文名是 Lody。我热爱编程,专注移动开发领域。目前我在国内某高中读高二,作为一个高中生,我平日里跟代码接触的时间不是很多,但是我对技术有较高的追求。我不会去考虑一个技术的应用价值,只要我对它有兴趣,就会去研究它、攻克它。

我学习编程是一个意外,最初我喜欢为一些设备定制 ROM 包,发到一些渠道上面,但是时间一长,感到没有意思,我发现定制 ROM 就像是搬砖的工作,没有太大的挑战性和激情,便很向往做一个 Android 工程师。于是初二那段时间,我买了第一本编程书籍:《C++ 从入门到精通》。当时连 C++ 是什么都不知道,只知道它可以做很厉害的事情,很逗。但是学得时间一长,对编程的理解逐渐深入,看法也就慢慢改变了。我在初三时期把 Java 基础给拿下来,然后就开始朝着 Android 奋斗。

我学习 Android 没有像一般的人那样去看《Android 从入门到精通》这样的书籍,我直接 clone 了 Android 的源码下来慢慢啃。 Android 源码博大精深,绝非我一个 little boy 能够看懂,幸亏有邓凡平老师的大作《深入理解 Android》,为我理解源码起到了很好的导向作用。看源码看到激情澎湃的时候,我会有很多奇思妙想,之后我所写的项目,大多是建立在对源码理解的基础上的。

InfoQ:你是如何如何快速学习提高技术水平的?

罗迪:有句话说的好: Read the f**k source code。在一项语言基础扎实的情况下,去学习具体平台的开发,绝佳的方式就是阅读优秀的源码。无论代码做得是什么,优秀的代码都会在不经意间让你有所感悟。现在,网上各种文章介绍着各种各样的设计模式。尽管你可能看懂了它的组织形式,却不一定能够融会贯通。阅读源码的过程,你能够真切的体会到一个设计模式的妙处。Google 开源了 Android 这个珍贵的宝藏,阅读它的源码成为了我提高技术水平的方式。Android 虽然为开发者提供了详细的文档,但是如果仅仅止步于 SDK 层,很多的问题你都会有"知道怎么处理,但是不知道原因"的感觉。

InfoQ:能否介绍一下你的几个有代表性的开源项目。

罗迪:我最早开源的项目是“Direct-load-apk”,它是国内较早实现无约束运行 APK 的一个开源插件化框架。可以说,动态化加载技术一直在伴随着我成长,Direct-load-apk 则是我努力后的结晶。作为我高一时期我所写的第一个开源项目,它的背后充满了许许多多的故事以及插曲。当然,最让我高兴的是,它让我结交了许许多多的朋友。开源过后,许多朋友吸收了它的思想,为公司做出了适应需求的插件化框架。后来,我又实现了更完美的插件化方案 (可以运行 QQ& 微信),但是由于一些原因,我无法将其开源。张勇(叔叔)开源的 DroidPlugin 也很棒,许多的思想跟我志同道合。我敬佩思想的创造人,因为有了思想,轮子可以再造,但是如果没有思想,轮子是不可能造出来的。

与此同时,我也在探索虚拟机的 Hook 技术,在我探索 Android 平台的 Hook 技术前,Dalvik 下的 Java Hook 就已经趋于完美。但是很遗憾的是,Google 在 Android 4.4 以后就使用了 ART 虚拟机替代了 Dalvik 虚拟机。ART 虚拟机的运行机制相对于 Dalvik 虚拟机而已复杂了很多,其中还掺杂了许多平台相关的因素,这为研究 ART 下的 Java Hook 造成了极大的困扰。不过由于兴趣的缘故,我没有放弃这块难啃的骨头,我经常会在车上和地铁上看有关的文章以及源码,在家里尝试着验证已有的想法,之后我开发了一个新的 Art Hook 方案,我将它命名为 Legend。项目地址: https://github.com/asLody/legend

再后来,有一天我偶然看到很多朋友在讨论 Dex 加载速度过慢的问题,对于这个问题,很多朋友都想到了异步的方案来避免 ANR,但是这样的办法会降低用户体验,于是我想到了在我的一个项目中使用的“跳过 Dex 优化”的方案,将它抽离出来并开放了源代码: https://github.com/asLody/TurboDex

Android 插件化与双开技术

InfoQ:听包建强老师说,你对 Android 插件化的理解很深刻,能向我们介绍一下吗?

罗迪:插件化发展到目前,总结一下,有两种实现方式,一是基于 SDK 层组件 Delegate(委托 & 代理)的方式,这种方式不用关心系统底层源码,框架实现成本较低,但插件开发成本较高;二是 Framework hook,这种方式是对运行时环境做很多的 hook 和 patch,使得插件的约束很小,随着这种方式的成熟,渐渐就发展成了双开,从而诞生了一系列双开 APP。当然,对于 Weex、React Native 这些,他们的发展可能更局限在界面层,对于内容丰富的 app,例如天猫、淘宝,就很适合,但是绝对做不到双开那种程度。

InfoQ:什么是 App 双开技术,它的难点在哪里?

罗迪:App 沙盒 / 双开技术是现在仍处于发育时期的未成熟技术,它的目标是使一个未安装的 APK 直接运行在一个容器当中,与外部环境部分隔离(或完全隔离),处于沙盒之中的 App 无法觉察到自己的环境与普通运行时的环境有所不同,并能够与沙盒之中的其它 App 进行交互。概念上来讲,它类似 Docker。

现阶段,已有许多安全公司研发出了较早时期的 App 双开技术:LBE 平行空间、卓盟双开助手、金山开小号,但是它们的原理无一例外的是插件化。

App 沙盒的难点主要有:

  1. 欺骗 App,让其认为自己运行在正常的环境中。
  2. 完整得驱动四大组件。
  3. 让组件的进程分布与实际完全一致。
  4. 随时与处在沙盒外部的容器和宿主 (Host) 进行同步的远程通信。
  5. 兼容不同系统 API 版本的设备。
  6. SD 卡隔离 (Native IO Redirect)。

每一个难点,都需要花费很多的精力去研究,时不时还会陷入到一个坑里面去。要去从头设计并完成一套这样的 App 双开引擎,绝非几天就能完成的。在桌面平台,早已有了沙盒环境的概念,随着移动端开始崛起,我相信移动端的沙盒机制在未来几年内必然会诞生的,插件化技术将会得到空前的发展。

InfoQ:有人认为插件化会被 React Native 或类似技术代替,对此你有什么看法?

罗迪:对于这个观点,我不是很赞同。React Native 的稳定,决不意味着插件化的落幕,怎么说呢?

React Native 这类的技术,为实现 UI 层的跨平台而生,它能够在多端渲染出一样的界面,降低开发成本,但是它却仍然依赖已有的系统组件。它的跨平台特征都是建立在一个内置的 JavaScript 引擎上面的,你能够利用它已有的组件,但无法对组件进行更新和升级。就好比搭积木,无论你要搭成什么东西,积木就这么几块,形状固定,颜色固定,你不可能再把单个的积木细分成更小的东西。

但是插件化就不一样了,在插件化之下,你能根据需要动态的加载、升级和卸载组件,甚至是整个 React Native 框架。不仅如此,React Native 还能和插件化优雅的结合,如果让 React Native 为 UI 提供渲染支持,而下层所支持的 UI 组件通过插件化来提供,那么 React Native 的缺陷就得到了克服。

插件化技术的成熟程度虽然在最近几年呈上升趋势,但是总体而言仍然处于初、中级阶段。App 沙盒技术的出现就是插件化发展的创新和第一阶段的产物。在未来,我相信很多插件化技术会被更多的应用,如果插件化稳定到了一定的程度,甚至可以颠覆 App 开发的方式。

由 InfoQ 主办的 GMTC 全球移动技术大会将于 6 月 24 日在北京召开。本次大会我们邀请了《App 研发录作者》包建强、插件化框架 Small 作者林光亮、DroidPlugin 作者张勇,前来分享关于插件化的话题,我们还将邀请 Lody 全程参与我们的大会,与各位参会者交流。目前 8 折优惠期间,多人团购更多优惠,欲购从速!

2016-05-18 19:0024989
用户头像

发布了 164 篇内容, 共 106.9 次阅读, 收获喜欢 392 次。

关注

评论 1 条评论

发布
用户头像
很厉害
2023-05-07 21:51 · 浙江
回复
没有更多了
发现更多内容

使用ABAP(ADBC)和Java(JDBC)连接SAP HANA数据库

汪子熙

JavaScript SAP abap WebClient UI SAP UI5

区块链与物联网的强强联合将带来巨变

CECBC

Redis - 复制

旺仔大菜包

redis

Golang Testing 概览 - 补充篇

hedzr

testing Go 语言 assertion

C/C++学习:C++并发与多线程

奔着腾讯去

c++ 并发 多线程并发 POSIX线程 C++11线程

SAP ABAP和Hybris的源代码生成工具

汪子熙

Java SAP abap Hybris commerce

IP地址定位在网站上的几个代表性应用

郑州埃文科技

Hybris UI的Route(路由)实现

汪子熙

Java SAP WebClient UI Hybris

乾坤大挪移:SAP CRM WebClient UI 和 SAP Fiori UI 混搭并存

汪子熙

CRM SAP abap WebClient UI bsp

Internationalization(i18n) support in SAP CRM,UI5 and Hybris

汪子熙

JavaScript CRM SAP abap SAP UI5

Linux网络编程-UDP和TCP协议详解

Linux服务器开发

TCP 网络编程 udp 网络协议栈 Linux服务器开发

宏碁亮相2021西洽会,以绿色智能“洽谈未来”

科技热闻

从天而降的AI“青云梯”,开发者们准备好了吗?

脑极体

微博评论高性能高可用计算架构设计

Lane

Pulumi AWS 在进行预览更新的时候持续提示 Key 错误

HoneyMoose

JavaScript and Ruby in ABAP

汪子熙

JavaScript SAP abap WebClient UI

Jerry和您聊聊Chrome开发者工具

汪子熙

chrome 大前端 SAP Chrome开发者工具

通过ABAP代码判断当前系统类型,BYD还是S4 OP还是S4 Cloud

汪子熙

SAP abap S/4HANA SAP Business ByDesign

Golang Profiling: 关于 pprof

hedzr

Go 语言 profiling

使用ABAP批量下载Markdown源文件里的图片到本地

汪子熙

markdown SAP abap download

如何查看SAP CRM WebUI,C4C和Hybris里的页面技术信息

汪子熙

CRM abap WebClient UI SAP UI5

还在用SELECT COUNT统计数据库表的行数?Out了

汪子熙

SAP abap hana

戏说代理模式

编程三昧

随笔 设计模式 开发 代理模式

你知道 Redis 可以实现延迟队列吗?

xcbeyond

队列 延迟队列 6月日更

SAP Cloud for Customer(C4C)和微软Outlook的集成

汪子熙

微软 SAP abap SAP UI5 outlook

ABAP下载的病毒扫描Virus Scan

汪子熙

下载 SAP abap 病毒扫描

help.hybris.com和help.sap.com网站的搜索实现

汪子熙

Java SAP abap Hybris

Hybris ECP里Customer对应的数据库表

汪子熙

JavaScript CRM SAP WebClient UI SAP UI5

Golang Testing 概览 - 深入篇

hedzr

testing Go 语言

膜拜!首次公布Java10W字面经,Github访问量破百万

Java 程序员 架构 面试

直呼内行!阿里大佬离职带出内网专属“高并发系统设计”学习笔记

Java 程序员 架构 面试

专访罗迪:高二Android大牛的成长之路_移动_徐川_InfoQ精选文章