Android App插件化(推荐)

携程开源插件化框架(推荐)

https://github.com/CtripMobile/DynamicAPK

使用方法:

$ git clone https://github.com/CtripMobile/DynamicAPK.git
$ cd DynamicAPK/
$ gradle assembleRelease bundleRelease repackAll
Release APK in /build-outputs/***-release-final.apk


若gradle build时提示: Unable to find optional library: org.apache.http.legacy
http://blog.csdn.net/liuhongwei123888/article/details/50100697


代码解读:

Framework:管理各个Bundle的启动,更新,卸载;提供框架启动Runtime

BundleCore Bundle机制外部核心类
Bundle:插件
BundleImpl:插件实现

SysHacks:
Hack:反射机制反射后包装的形式:类,方法,字段
HackedClass
HackedConstructor
HackedField
HackedMethod
HackDeclaration

Archive:存档
BundleAchive: Bundle 目录结构:version_1,version_2
BundleArchiveRevision: Bundle 存储文件:bundle.zip,bundle.dex;采用PathClassLoader 加载 dex文件,并opt释放优化后的dex

HotPatchManager 补丁管理器
HotPatchItem:补丁

AndroidHack:Android中的Resource Hack

BundlePathLoader:用PathLoader加载Bundle

DelegateResources: 挂载载系统资源中,处理框架资源加载

InstrumentationHook:

==============================================================================

插件化相关:

1、代码(打包及加载)
Jar/Dex, DexClassLoad、PathClassLoader
反射
2、资源(打包及加载)
R.string.xxx R.drawable.xxx R.layout.xxx
1、用反射AssetsManager.addAssetPath添加插件apk路径
2、生成一个和插件apk对应的Resource,到这里Resource即可获取到对应的资源
3、用反射把context里的mResources替换成插件的Resource,然后调用super.attachBaseContext(context)把context挂到Activity,即可直接使用布局

参考:http://www.2cto.com/kf/201512/455534.html

Android插件化基础(4),动态启动插件中的activity
http://www.cdsile.com/news/wangzhankaifa/05356/47382.html


如何实现携程动态加载插件中对aapt的改造
http://blog.csdn.net/lzyzsd/article/details/49768283


携程Android App插件化和动态加载实践
http://www.infoq.com/cn/articles/ctrip-android-dynamic-loading

Android程序编译时更改包名

http://niyanshi.iteye.com/blog/1921777?utm_source=tuicool&utm_medium=referral



你可能感兴趣的:(Android App插件化(推荐))