Android插件化方案-RePlugin內置插件踩坑

1.新建兩個module,plugins 和 host,然后在project的build.gradle添加對應的依賴,可在同一個項目也可分兩個項目,此處圖省事丟到同一個project

classpath 'com.qihoo360.replugin:replugin-host-gradle:2.2.4'
classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.2.4'

2.在app plugins的build.gradle添加

compile 'com.qihoo360.replugin:replugin-plugin-lib:2.2.4'
compile 'com.android.support:appcompat-v7:25.3.1'

然后設置

// 這個plugin需要放在android配置之后,因為需要讀取android中的配置項
apply plugin: 'replugin-plugin-gradle'
repluginPluginConfig {
    //插件名
    pluginName = "test"
    //宿主app的包名
    hostApplicationId = "com.lei.simpletest.host"
    //宿主app的啟動activity
    hostAppLauncherActivity = "com.lei.simpletest.host.MainActivity"
}

3.app host的build.gradle添加

compile 'com.qihoo360.replugin:replugin-host-lib:2.2.4'
compile 'com.android.support:appcompat-v7:25.3.1'

然后

// ATTENTION!!! Must be PLACED AFTER "android{}" to read the applicationId
apply plugin: 'replugin-host-gradle'

/**
 * 配置項均為可選配置,默認無需添加
 * 更多可選配置項參見replugin-host-gradle的RepluginConfig類
 * 可更改配置項參見 自動生成RePluginHostConfig.java
 */
repluginHostConfig {
    /**
     * 是否使用 AppCompat 庫
     * 不需要個性化配置時,無需添加
     */
    useAppCompat = true
    /**
     * 背景不透明的坑的數量
     */
    countNotTranslucentStandard = 6
    countNotTranslucentSingleTop = 2
    countNotTranslucentSingleTask = 3
    countNotTranslucentSingleInstance = 2
}

4.把plugins的app跑一個debug.apk或者簽名包,改名為pluginName填寫的插件名.jar,然后放到host app的main/assets/plugins中我的是test.jar
5.調用插件的主界面

RePlugin.startActivity(MainActivity.this,RePlugin.createIntent("test",
                        "com.lei.RePlugin.MainActivity"));

6.坑
bug1

Error:No resource found that matches the given name (at 'theme' with value '@style/Theme.AppCompat').

應該是主題的原因,據說 useAppCompat = true可以關閉,果斷干掉,然而并沒有卵用
bug2

 FATAL EXCEPTION: main
                                                                       Process: com.lei.simpletest.host, PID: 6962
                                                                       java.lang.NoClassDefFoundError: android.support.v4.content.LocalBroadcastManager
                                                                           at com.qihoo360.loader2.PmBase.registerReceiverAction(PmBase.java:632)
                                                                           at com.qihoo360.loader2.PmBase.callAppCreate(PmBase.java:622)
                                                                           at com.qihoo360.loader2.PMF.callAppCreate(PMF.java:84)
                                                                           at com.qihoo360.replugin.RePlugin$App.onCreate(RePlugin.java:1002)
                                                                           at com.qihoo360.replugin.RePluginApplication.onCreate(RePluginApplication.java:74)
                                                                           at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
                                                                           at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4384)
                                                                           at android.app.ActivityThread.access$1500(ActivityThread.java:138)
                                                                           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                           at android.os.Looper.loop(Looper.java:149)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:5061)
                                                                           at java.lang.reflect.Method.invokeNative(Native Method)
                                                                           at java.lang.reflect.Method.invoke(Method.java:515)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)
                                                                           at dalvik.system.NativeStart.main(Native Method)

看信息是缺360的插件缺v4包,v7包默認引用這個,然后把注釋的useAppCompat = true放開,直接依賴v7包 解決

compile 'com.android.support:appcompat-v7:25.3.1'

bug3 特別莫名其妙

E/AndroidRuntime: FATAL EXCEPTION: main
                                                                       Process: com.lei.simpletest.host, PID: 1236
                                                                       java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lei.simpletest.host/com.lei.simpletest.host.loader.a.ActivityN1NRNTS3}: android.content.res.Resources$NotFoundException: File res/layout/activity_main.xml from drawable resource ID #0x7f030000
                                                                           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2235)
                                                                           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2285)
                                                                           at android.app.ActivityThread.access$800(ActivityThread.java:138)
                                                                           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1236)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                           at android.os.Looper.loop(Looper.java:149)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:5061)
                                                                           at java.lang.reflect.Method.invokeNative(Native Method)
                                                                           at java.lang.reflect.Method.invoke(Method.java:515)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)
                                                                           at dalvik.system.NativeStart.main(Native Method)
                                                                        Caused by: android.content.res.Resources$NotFoundException: File res/layout/activity_main.xml from drawable resource ID #0x7f030000
                                                                           at android.content.res.Resources.loadDrawable(Resources.java:2097)
                                                                           at android.content.res.Resources.getDrawable(Resources.java:700)
                                                                           at com.android.internal.widget.ActionBarView.setIcon(ActionBarView.java:699)
                                                                           at com.android.internal.policy.impl.PhoneWindow.setDefaultIcon(PhoneWindow.java:1446)
                                                                           at android.app.Activity.initActionBar(Activity.java:1915)
                                                                           at android.app.Activity.setContentView(Activity.java:1930)
                                                                           at com.lei.RePlugin.MainActivity.onCreate(MainActivity.java:11)
                                                                           at android.app.Activity.performCreate(Activity.java:5231)
                                                                           at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
                                                                           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
                                                                           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2285) 
                                                                           at android.app.ActivityThread.access$800(ActivityThread.java:138) 
                                                                           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1236) 
                                                                           at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                           at android.os.Looper.loop(Looper.java:149) 
                                                                           at android.app.ActivityThread.main(ActivityThread.java:5061) 
                                                                           at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                           at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) 
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610) 
                                                                           at dalvik.system.NativeStart.main(Native Method) 
                                                                        Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: invalid drawable tag RelativeLayout

plugins的build.gradle添加v7包依賴解決,對著官方代碼瞅出來的,我也不知道為啥
反正能使了

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容

  • 一、折騰:來源于滿語的音譯,有三種基本解釋;對事物進行翻來覆去、反復的做和折磨的一種動作形態。所謂折騰,就是沒事找...
    crazybiker閱讀 1,172評論 0 1
  • 寫日記堅持了很久,每天寫寫做什么了,開心的事,不開心的事。挺好
    愛情遠的要命閱讀 122評論 0 0
  • (?°з°)-
    CYC666閱讀 329評論 8 0