本文主要記錄學(xué)習(xí)Small插件化過程中遇到的問題奢啥,歡迎大家一起討論學(xué)習(xí)和指正啤握!
Small插件化實(shí)踐
1.動(dòng)態(tài)替換資源文件流程
動(dòng)態(tài)替換資源文件的流程嗓化,比如app.* 要是想訪問lib.* 里面的資源文件并且動(dòng)態(tài)從服務(wù)器更新登淘,需要先在項(xiàng)目中依賴它浪读,然后在lib.* 更新完文件后重新編譯把so上傳到服務(wù)器煌集,然后再在app.* 中從服務(wù)下載lib.* 的so實(shí)現(xiàn)資源文件的動(dòng)態(tài)替換
2.打開插件activity
兩種方法:
(1)
Small.openUri("main",MainActivity.this);
(2)
這種方法可以帶值過去
Intent intent = Small.getIntentOfUri("main",MainActivity.this);
intent.putExtra("msg","main");
startActivity(intent);
3.獲取宿主或插件資源
如動(dòng)畫定義在宿主或插件中妓肢,再用
Small.getContext().getResources().getIdentifier(AnimName, "anim", "宿主包名");
context.getResources().getIdentifier(AnimName, "anim", "插件包名");
取到resId,接著就可以正常使用了;
或者通過直接依賴lib.*插件苫纤,直接調(diào)用插件資源R.drawable.xxx或@drawable/xxx碉钠。
4.aar依賴插件
可以把a(bǔ)pp.*,lib.*等插件新建一個(gè)工程卷拘,然后通過遠(yuǎn)程aar依賴的方式喊废,這樣不會(huì)影響so文件的加載,但是如果把a(bǔ)ar放在libs下通過compile(name: 'lib-style', ext: 'aar')這樣的方式去加載栗弟,插件生成的so文件加載就沒有效果污筷,它只會(huì)去加載libs下對(duì)應(yīng)的aar。
(又做了進(jìn)一步測(cè)試乍赫,這種方法存在Bug瓣蛀,只有當(dāng)so文件中的資源ID和aar文件中資源ID相同才可以進(jìn)行替換陆蟆,而目前small在編譯lib插件生成so的同時(shí)沒有生成aar,所以資源ID相同的幾率很小惋增,這方面還需要進(jìn)一步研究測(cè)試...)