Last active
August 29, 2015 14:20
-
-
Save simpleton/ec87a40746689aa05e58 to your computer and use it in GitHub Desktop.
Android plugin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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