We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
本项目为掌阅iReader团队推出的ZeusPlugin插件框架产品项目,ZeusPlugin为插件框架的所有代码,app为测试插件与补丁的项目demo,testplugin为插件demo, testhotfix为补丁demo。绝大部分核心代码都在PluginManger.java中。PluginManager也是入口类,核心方法是inite初始化、loadLastVersionPlugin加载插件、reloadInstalledPluginResources加载插件与补丁的资源、loadHotfixPluginClassLoader加载补丁的类。插件与补丁更新的最小单位是java类(不局限四大组件)。
ZeusPlugin
app
testplugin
testhotfix
demo
PluginManger.java
PluginManager
inite
loadLastVersionPlugin
reloadInstalledPluginResources
loadHotfixPluginClassLoader
java
提高某些功能的升级率,使功能可以不通过安装新apk版本进行更新,可以实现wifi/移动环境下用户无感知的更新功能。如果电商类的网页,可以通过url告知客户端使用哪个插件并可以指定最低版本,然后客户端发现存在符合的插件就加载使用。如:http//www.baidu.com/a.php?p=zeusplugin_test&pversion=2,表示该页面使用zeusplugin_test插件,插件的最低版本号为2。宿主发现存在符合的插件则加载并将该url传给插件,不存在则进入下载流程,下载完成后即可加载。插件的下发可以通过push或者轮训的方式预下载增量更新包,或者进入loading页面同步下载,下载完成后即可加载使用。这时插件就可以是Fragment、View、Activity等等。
http//www.baidu.com/a.php?p=zeusplugin_test&pversion=2
zeusplugin_test
2
push
Fragment
View
Activity
解决某个版本发布后的bug,或者是更新某个功能。由于代码会进行混淆,一个补丁通常只能对应一个版本。
ClassLoader
ContextImpl
mPackageInfo
mClassLoader
parent
Resources
mResources
PluginResources
AssetManager
addAssetPath
Activity/Application
getResources
以上就是我们的核心,修改生成类和资源的成员变量。
Application
ZeusBaseApplication
MyApplication
ZeusBaseActivity
MainActivity
PluginConfig.EXP_PLUG_PREFIX
PluginConfig.PLUGINWEB_APK_SUFF
PluginConfig.PLUGINWEB_MAINIFEST_FILE(即plugin.meta)
PluginConfig
aapt.exe
build-tools
build.gradle
aaptOptions.additionalParameters '--PLUG-resoure-proguard', '--PLUG-resoure-id', '0x7d'
'--PLUG-resoure-proguard'
'--PLUG-resoure-id'
'0x7d'
packageID
0x7d
buil.gradle
buildJar
build/libs
sdk-jars
AndroidManifest.xml
如果要生效,这个不能写错!!
以下是补丁相关的。补丁与插件类似,只不过补丁把实时加载的功能去掉了。如果项目只运行在android 4.4及以上(art虚拟机,部分低于4.4的手机也可以去掉),则以下忽略,以上就已经支持补丁了,可以直接运行app模块,不需要以下的额外操作。
zeusplugin:patch-gradle-plugin:1.0.0
//-----补丁相关-------
PluginConfig.EXP_PLUG_HOT_FIX_PREFIX
com.android.internal.util.Predicate
PluginManager.getPlugin(pluginName).install();
也可以参考请看下面这篇文章: ZeusPlugin第一个插件