關於360插件化Replugin Activity動態修改父類的字節碼操做

近期在接入360插件化方案Replugin時,發現出現崩潰狀況。java

大概崩潰內容以下:android

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

我本身在插件代碼裏書寫的Activity,我是所有繼承了PluginActivity。不過因爲在插件中還使用了其餘第三方的SDK,後來去查看插件APK的DEX發現第三方SDK的Activity的父類仍是Activity. 後來想起來以前因爲在插件app的build.gradle有句配置由於編譯不經過給刪除了app

// 這個plugin須要放在android配置以後,由於須要讀取android中的配置項
apply plugin: 'replugin-plugin-gradle'

這個gradle插件是作什麼用的呢?gradle

通過資料查找大概明白了狀況。ui

這個gradle做用於插件apk,主要是在插件app編譯期間利用Transform api在class文件轉換爲dex文件以前對Java 字節碼文件進行操做,利用Java字節碼庫Javassist進行代碼注入,從而達到不修改插件apk工程源碼前提下載編譯器對插件apk進行動態修改的目的。.net

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

 

replugin 2.3.1 對 build:gradle:2.3.3 才能讓字節碼修改Activity父類正常orm

查找的資料:blog

https://blog.csdn.net/hellogmm/article/details/79056660

相關文章
相關標籤/搜索