1. 程式人生 > >關於360外掛化Replugin Activity動態修改父類的位元組碼操作

關於360外掛化Replugin Activity動態修改父類的位元組碼操作

開發十年,就只剩下這套架構體系了! >>>   

近期在接入360外掛化方案Replugin時,發現出現崩潰情況。

大概崩潰內容如下:

aused by: java.lang.ClassNotFoundException: Didn't find class "x.x.x.xActivity" on path:

我自己在外掛程式碼裡書寫的Activity,我是全部繼承了PluginActivity。不過由於在外掛中還使用了其他第三方的SDK,後來去檢視外掛APK的DEX發現第三方SDK的Activity的父類還是Activity. 後來想起來之前由於在外掛app的build.gradle有句配置因為編譯不通過給刪除了

// 這個plugin需要放在android配置之後,因為需要讀取android中的配置項
apply plugin: 'replugin-plugin-gradle'

這個gradle外掛是做什麼用的呢?

經過資料查詢大概明白了情況。

這個gradle作用於外掛apk,主要是在外掛app編譯期間利用Transform api在class檔案轉換為dex檔案之前對Java 位元組碼檔案進行操作,利用Java位元組碼庫Javassist進行程式碼注入,從而達到不修改外掛apk工程原始碼前提下載編譯器對外掛apk進行動態修改的目的。

修改內容包括:
a. 將外掛中所有的XXXActivity類中的頂級XXXActivity父類修改為外掛庫replugin-plugin-library中的XXXPluginActivity類,反編譯看看就能發現最終外掛apk的各個Activity繼承了XXXPluginActivity父類。

 

查詢的資料:

https://blog.csdn.net/hellogmm/art