Skip to content

Instantly share code, notes, and snippets.

@simpleton
Last active August 29, 2015 14:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save simpleton/ec87a40746689aa05e58 to your computer and use it in GitHub Desktop.
Save simpleton/ec87a40746689aa05e58 to your computer and use it in GitHub Desktop.
Android plugin
Android插件化
===================
[TOC]
Proguard
-------------------
proguard是原生支持keepmapping的,可以直接导入一个mapping文件,保证混淆的一致性,但是我当时做犯了一个错误,就是试图保证所有的mapping文件都一致,但是proguard混淆函数的算法是顺序的,后续导致会有不可避免的冲突发生。现在我想到有2种方法可以避免这个发生:
1. 更改proguard函数生成算法,用更长的签名来做作用域,给每个命名空间留出足够的空间来填充增加的函数;
2. 抽象出sdk类函数,保证这一部分函数的对下一致。不保证插件函数可以keep。
Client
-------
客户端相对后台来讲技术已经比较成熟,就是DexClassloader的一套东西。(PS: 最近听说FB他们做了一套新的类加载机制,抛弃了DexClassLoader,使得启动速度加快,[而且他们也做了极小化的主dex][1])。
另外也有很多库可以参考:
> [加密相关][2]
> [一般参考1][3]
> [一般参考2][4]
> [大众点评实现][5]
> [我写的小demo][6]
这些大部分代码质量都是demo级的,还需要改改才可以用,不过思路就是dexclassloader,不过大家hack的点不太一样,加密相关的是一个比较有意思的点,以前完全没有关注到。
工具链
------
其实插件框架是相关的工具链和发布脚本比较难做,测试工作量比较大。
插件和框架都会有版本演进,就会造成很多客户端版本。相关的编译时检测,插件自动发布CDN和不兼容回滚都是需要注意的点。感觉需要专人来维护了,工作量不小,是个坑。
其他
------
1. 问了FB的人他们为啥不做插件,他们告知是GP不让这么搞。感觉也是个小风险。
2. 看FB又准备用react native,可以关注下。感觉这么做插件会比较容易。
[1]: http://facebook.github.io/buck/article/exopackage.html
[2]: https://github.com/lukeFalsina/Grab-n-Run
[3]: https://github.com/singwhatiwanna/dynamic-load-apk
[4]: https://github.com/houkx/android-pluginmgr
[5]: https://github.com/mmin18/AndroidDynamicLoader
[6]: https://github.com/simpleton/AndroidDynamicLoader
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment