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

 

 本文由用戶 游其是你 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!