ZeusPlugin第一個插件
ZeusPlugin 是一個簡單易懂的Android插件補丁框架。下面通過對它新建一個插件 zeusplugin_hello.apk ,熟悉插件的開發流程。
ZeusPlugin插件
前置工作
clone項目
git clone https://github.com/iReaderAndroid/ZeusPlugin
替換aapt
用ZeusPlugin項目中的aapt( 該aapt.exe基于6.0源碼編譯,包含windows、mac和linux(64位)版本。測試替換23.0.2、23.0.3都沒有問題。該aapt.exe還集成了資源混淆功能。 ),替換sdk下的aapt(根據自己的系統自行選擇對應版本)。
我的windows系統,把 D:\pro\ZeusPlugin\aapt\aapt(windows版).exe 替換 D:\android\sdk\build-tools\23.0.2\aapt.exe 后,運行成功。
ps:可以先備份一下sdk下的aapt.exe為aapt.exe.bak。
正式開始
1. 相關配置, PluginConfig.java 文件增加以下內容:
public static final String PLUGIN_HELLO = "zeusplugin_hello"; //插件hello,新增!
static {
mDefaultList.put(PLUGIN_TEST, 1);
mDefaultList.put(PLUGIN_HELLO, 1); //插件hello,新增!
mDefaultList.put(HOTFIX_TEST, 1);
}
2. 新建hello項目(此處正常開發app一樣開發調試即可)。
我們簡單的,新建一個Activity為 com.test.android.hello.MainActivity ,獨立運行成功。
3. hello項目新建assets目錄,新建插件配置文件 zeusplugin.meta 。
{
"name": "zeusplugin_hello",
"minVersion": "1",
"version": "1",
"mainClass": "com.test.android.hello.MainActivity"
}
4. 打包hello項目apk為 zeusplugin_hello.apk 。
android studio普通開發操作, build --> build APK 。
5. 復制步驟4的 zeusplugin_hello.apk 到宿主項目app的assets目錄下。
6. 宿主項目app中 AndroidManifest.xml 增加hello項目相關的Activity。
<!--校驗用的activity,為了騙過android的activity存在校驗-->
<activity android:name="com.zeus.ZeusActivityForStandard"/>
<activity android:name="com.test.android.hello.MainActivity"/>
7. 插件調用
ImageButton ib_previous = (ImageButton) findViewById(R.id.ib_previous);
ib_previous.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
PluginManager.loadLastVersionPlugin(PluginConfig.PLUGIN_HELLO);//插件加載,一定記得是新增的插件PluginConfig.PLUGIN_HELLO
try {
Class cl = PluginManager.mNowClassLoader.loadClass(PluginManager.getPlugin(PluginConfig.PLUGIN_HELLO).getPluginMeta().mainClass);
Intent intent11 = new Intent(PriceActivity.this, cl);//這種方式為通過在宿主AndroidManifest.xml中預埋activity實現
//startActivity(intent);
//這種方式為通過欺騙android系統的activity存在性校驗的方式實現
PluginManager.startActivity(PriceActivity.this,intent11);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
});
最后,如果你的項目用到資源文件,記得還要修改hello項目的 build.gradle 文件,添加如 aaptOptions.additionalParameters '--PLUG-resoure-proguard', '--PLUG-resoure-id', '0x7d' 等配置更改資源ID( 插件或補丁的資源packageID不能與其他插件或者是宿主相同 )。
TODO
- 插件項目是否一定要繼承 ZeusBaseActivity.java 或者調用相關函數?
- 宿主、插件混淆處理?
參考資料
來自:http://www.jianshu.com/p/cd0f48019709