写点什么

专访罗迪:高二 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:0024692
用户头像

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

关注

评论 1 条评论

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

万字详文,剖析企业数字化的降“本”增效

阿里技术

数字化 降本增效

OptaPlanner快速入门-helloworld

成长兔🐇

帮助中心案例分析|师爷,给我解释解释什么叫降本增效?

Baklib

降本增效 帮助中心

一加是OPPO的子品牌?我来说说我的看法

Geek_8a195c

借助iMazing工具重新安装或升级 iOS系统

淋雨

ios iphone

企业IT运维开发一体化解决方案

力软低代码开发平台

React 新提案 useEvent 已死?不,它将涅盘重生。

清秋

React useEvent RFC 提案

当下企业数字化转型,PaaS是基础解

ToB行业头条

华为应用市场审核指南解读课程上线,面向开发者讲解应用审核2022年更新要点

最新动态

开发者有话说|刚毕业的“00后”,歪打误撞进入了SAP行业

暮春零贰

个人成长 9月月更

面试整理的45W字Java真题和答案详解(含核心考点及6家大厂真题)

Geek_0c76c3

Java 数据库 开源 程序员 开发

如何使用游戏引擎进行实时渲染和内容创建

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

什么是实时渲染,3D实时渲染的优缺点

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

好的,BFS,学会了

掘金安东尼

前端 9月月更

Baklib+伙伴云+企微会话存档,打造伙伴云帮助中心运营体系

Baklib

Java岗史上最全八股文面试真题汇总,堪称2022年面试天花板

Geek_0c76c3

Java 数据库 开源 程序员 开发

Spring Security 介绍中的 servlet 和 reactive

HoneyMoose

产品经理必看的高效产品文档撰写指南

Baklib

产品 产品经理 文档

盘点团队在线协作文档工具

Baklib

在线协作文档

联通研究院霍龙社博士深度解析“AI项目到底适不适合开源”

OpenI启智社区

人工智能 OpenI启智社区 AI开源 CubeAI智立方

【web 开发基础】php 开发基础快速入门 (3)-PHP程序符号标记和程序注释的使用及空白符详解

迷彩

php开源 9月月更 web开发基础

OptaPlanner快速入门-概述

成长兔🐇

从新零售、物流到广告,搞定指标中台就这么简单!

Kyligence

数据分析 指标管理 指标中台

云渲染比自己的电脑好用太多,这4个因素要考虑

Finovy Cloud

人工智能 云计算 渲染 云渲染

为什么3D实时渲染很重要

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

全方位助力数据科学组织协同&个人研究:ModelWhale 产品功能介绍与版本选择指引

ModelWhale

云计算 科技 数据科学 编程建模 组织协同

Trending热榜关闭前,我把Github今年最火Java面试题汇总扒下来了

Geek_0c76c3

Java 数据库 开源 程序员 开发

为了进大厂!吃透了各大厂最新 3000+Java 面试题啃完面试肯定妥了

Geek_0c76c3

Java 开源 程序员 架构 开发

ESP32-C3 学习测试 蓝牙 篇(三、认识蓝牙 GATT 协议)

矜辰所致

蓝牙 ESP32-C3 9月月更 GATT

专访美象科技|中国数字孪生50强为何需要3DCAT实时渲染云的赋能?

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

Apache APISIX 集成 Elasticsearch 实现实时日志监控

API7.ai 技术团队

elasticsearch API网关 APISIX 网关

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