RePlugin插件化的問題和解決辦法

這篇文章基于 Replugin2.2版本的捞挥,后續(xù)可能會隨著框架改動和bug修復有些問題可能就不存在了。如果你跟我一樣也是對插件化開發(fā)躍躍欲試涨薪,又在里面栽跟頭了,我想本片文章可能會對大家提供點小小的幫助鲫忍。最終問題的解決還是離不開對框架原理的熟悉。否則遇到了問題也不知道從何下手钥屈。孤陋寡聞的我可能踩了一些很低級的錯誤悟民,還望各位大大們在發(fā)現(xiàn)本文講得不對的地方指正。

目錄

  • 插件使用宿主的對象
  • v7包
  • 插件橫屏
  • 熱更新插件
  • 坑位之顯示Intent無效
  • 插件和宿主同工程的問題
  • 幽靈魔術(shù)

插件使用宿主的對象

1.我想在插件中使用宿主的new出來的對象篷就,但是如果在插件中和宿主中同時依賴一份資源是無法使用的射亏,會報類轉(zhuǎn)化異常。比如宿主和插件都要用okhttp3竭业,但是我不想插件中也要初始化一個智润。

答:
只在宿主中通過dependencies的方式依賴一下,然后將工程切換成Project模式未辆。如下圖

找到這個依賴文件窟绷,在jar文件上右鍵打開目錄。

將這個jar文件拷貝到你的插件目錄下鼎姐。然后通過provided的方式進行編譯依賴钾麸。

 provided files('libs/xxx.jar')

注意更振,provided僅僅是編譯依賴炕桨,不會打包進apk包里。這樣當Replugin框架在dex加載的時候拿到的就是宿主的class肯腕。就不會造成類轉(zhuǎn)化異常了献宫。

小技巧提示:
如果你的插件需要公共host里面的一些類和基礎服務。(注意不含資源实撒,資源指圖片和xml)
可以在host里剝離出一個模塊姊途,讓host去依賴它,然后將該模塊打包成jar的方式知态,提供給插件使用捷兰。猶如sdk的開發(fā)模式,但是一定要注意務必使用provided關(guān)鍵字负敏。莫打包進去了贡茅。

模塊打包成jar的方式如下:

在依賴模塊中的gradle里添加配置:

android {
  lintOptions {
        abortOnError false
    }

 }
//注意makeJar放在外層 
task makeJar(type: Jar, dependsOn: ['build']) {
    destinationDir = file('build/outputs/jar/')
    baseName = "AppSDK"
    version = "1.0.0"
    from('build/intermediates/classes/debug')
    exclude('**/BuildConfig.class')
    exclude('**/BuildConfig\$*.class')
    exclude('**/R.class')
    exclude('**/R\$*.class')
    include('**/*.class')
}

打開gradle命令列表(在as的右側(cè),看到?jīng)]其做?)
找到該模塊的的other選項

找到 makeJar

ok顶考,這樣就編譯好了,接下來復制到插件的libs里 provided files一下即可妖泄。

這里比較麻煩的事是驹沿,每當你修改過這個依賴模塊的代碼都需要重寫打包一份jar。項目上線后如果宿主沒有升級蹈胡,那么最好不要改動依賴模塊中的代碼渊季。


v7包

1.插件布局加載后莫名其妙的多了一些外邊距朋蔫,無法全屏 獨立運行是正常的

答:
插件不能共享資源宿主的v7包,注意如果你違反這條去嘗試開發(fā)插件却汉。會導致你的插件apk布局莫名其妙的多出一些邊距斑举。

注意:
即便插件中你沒有依賴v7包,也是可以使用AppCompatActivity的病涨。但是包里不會包含v7包的資源富玷。
是因為SdkVersion版本過高所以可以直接使用。

解決辦法:
在插件中單獨依賴一份v7包既穆,而不是共享宿主的赎懦。


2.插件中加載的布局是上一個宿主的布局

答:
你使用了基礎的Activity,沒有使用v7包里的AppCompatActivity并且關(guān)閉了 useAppCompat = false

解決辦法:
如果你的拋資源找不到錯誤幻工,先嘗試使用RePlugin.getPluginContext() 取獲取資源励两。
加載布局文件配合 LayoutInflater.from()。塞入View囊颅〉被冢或者直接替換成AppCompatActivity就沒有這個問題了。(推薦用AppCompatActivity問題會少很多)


插件橫屏

插件目前manifest配置了橫屏是無效的踢代。這也許是坑位導致的盲憎,可以動態(tài)在onCreate的時候改變一下

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
          ·····
}


熱更新插件

wiki文檔里已經(jīng)講過了,對于沒有啟動(加載過)的插件是可以安裝后就運行的胳挎。但是若插件被啟動過或正在運行時則不行饼疙。針對特殊的應用場景不得不重啟app,而且還是主動重啟慕爬。
那么發(fā)現(xiàn)如果開啟了 persistentEnable = true 常駐應用內(nèi)存窑眯。(就是一個服務)會導致即便重啟了app,插件安裝后還是沒有被更新医窿。這里迫使我關(guān)掉了persistentEnable選項磅甩,隨后重啟后就成功更新了。注意我這里說的重啟是非root下姥卢,應用自己殺死自己卷要,而非用戶主動kill掉。


坑位之顯示Intent無效

比如廣播隔显,這種如果你試圖在配置文件中靜態(tài)注冊的方式去聲明一個廣播却妨。并沒有給出。簡單來說就是intent-filter沒有設置括眠。

正確的做法是使用隱式Intent彪标。

代碼如下:

 <receiver android:name=".xxx$AlarmReceiver" >
            <intent-filter>
                <action android:name="xxx" />
            </intent-filter>
            </receiver>
  Intent intent = new Intent();
  intent.setAction("xxx");

這樣就可以了。因為坑位上目前沒有使用顯示調(diào)用的方式掷豺。

插件和宿主同工程的問題

如果你還沒有建項目捞烟,兄弟薄声,聽我一句勸。別建在同一個工程下题画。如果你已經(jīng)建立了默辨,趕快剝離。有毒 有毒苍息。準備折騰死就放在一起吧缩幸。后面的毛病越來越多。雖然我之前也是放在了一個工程下強行編譯過去了竞思。但是實際后面的體驗告訴我出了很多問題表谊。
1.編譯會滿,資源占用更多盖喷。
2.開發(fā)混亂爆办,不利于管理。
3.莫名其妙的打包錯誤课梳。比如下方這樣的:(注意:這個錯誤是突然莫名其妙出現(xiàn)的距辆,我發(fā)誓在出錯誤之前沒有碰過依賴和gradle里的配置。)

* What went wrong:
Execution failed for task ':app:rpGenerateReleaseBuiltinJson'.
> java.util.zip.ZipException: zip file is empty

詳細日志省略暮刃,見Issues:
https://github.com/Qihoo360/RePlugin/issues/380

幽靈魔術(shù)

什么叫幽靈魔術(shù)問題跨算?就和變魔術(shù)一樣,我好像沒有改什么邏輯性的代碼沾歪,突然bug又好了漂彤。
多半是你動了rePlugin中的gradle里的配置項雾消,可能留下了上一次的緩存在里面灾搏,你要做的就是每當改動了gradle里的配置最好搭配Clean Project一下。如下圖:

然后有其他問題可以去參考https://github.com/Qihoo360/RePlugin/issues立润。如果找不到的情況下可以加官方的群狂窑。里面還是比較活躍的。

這里再次說明一個問題桑腮,跑demo玩測一測和距離正式項目使用還是有很大的區(qū)別的泉哈。很多問題在demo里看不出來的,只有真正用的時候才會踩到破讨。盡管說replugin的文章說只hook了一個點來確保穩(wěn)定性丛晦。但是由于開發(fā)人員對框架本身的不夠熟悉,和存在的一些bug提陶。導致接入成本不能說極低了烫沙。如果要考慮團隊使用,最好由提前做有一個人來做預研接入再推廣給大家使用隙笆。熟悉這種模式后锌蓄,可能會是如虎添翼升筏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瘸爽,隨后出現(xiàn)的幾起案子您访,更是在濱河造成了極大的恐慌,老刑警劉巖剪决,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灵汪,死亡現(xiàn)場離奇詭異,居然都是意外死亡柑潦,警方通過查閱死者的電腦和手機识虚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妒茬,“玉大人担锤,你說我怎么就攤上這事≌ё辏” “怎么了肛循?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長银择。 經(jīng)常有香客問我多糠,道長,這世上最難降的妖魔是什么浩考? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任夹孔,我火速辦了婚禮,結(jié)果婚禮上析孽,老公的妹妹穿的比我還像新娘搭伤。我一直安慰自己,他們只是感情好袜瞬,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布怜俐。 她就那樣靜靜地躺著,像睡著了一般邓尤。 火紅的嫁衣襯著肌膚如雪拍鲤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天汞扎,我揣著相機與錄音季稳,去河邊找鬼。 笑死澈魄,一個胖子當著我的面吹牛景鼠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播一忱,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼莲蜘,長吁一口氣:“原來是場噩夢啊……” “哼谭确!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起票渠,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤逐哈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后问顷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昂秃,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年杜窄,在試婚紗的時候發(fā)現(xiàn)自己被綠了肠骆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡塞耕,死狀恐怖蚀腿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扫外,我是刑警寧澤莉钙,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站筛谚,受9級特大地震影響磁玉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜驾讲,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一蚊伞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吮铭,春花似錦时迫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扎谎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間烧董,已是汗流浹背毁靶。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逊移,地道東北人预吆。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像胳泉,于是被迫代替她去往敵國和親拐叉。 傳聞我的和親對象是個殘疾皇子岩遗,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 前言 replugin-plugin-gradle 是 RePlugin 插件框架中提供給replugin插件用的...
    osan閱讀 7,009評論 8 33
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評論 6 342
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,517評論 25 707
  • 最近幾年移動開發(fā)業(yè)界興起了「 插件化技術(shù) 」的旋風,各個大廠都推出了自己的插件化框架凤瘦,各種開源框架都評價自身功能優(yōu)...
    斜杠時光閱讀 3,943評論 1 36
  • 凌晨五點起床宿礁,六點從武漢出發(fā),新修的武漢西變了樣蔬芥,路也記不清梆靖。多繞了十多分鐘才出市區(qū)。以為夠早笔诵,高速上卻已經(jīng)開始蝸...
    裁人閱讀 150評論 0 0