這個(gè)插件的工程結(jié)構(gòu)是什么樣的?
答:請(qǐng)先導(dǎo)入到Android Studio工程。你會(huì)發(fā)現(xiàn)有兩個(gè)工程,一個(gè)是TestPlugin,它引用了DroidPlugin的庫(kù)工程,通過(guò)代碼簡(jiǎn)單展示了如何使用DroidPlugin;APITest是一個(gè)測(cè)試工程,編譯后可以當(dāng)作插件運(yùn)行在插件系統(tǒng),用來(lái)測(cè)試android的各種api。
2.為什么我集成后,奇數(shù)次可以打開(kāi),偶數(shù)次就打不開(kāi)了?
答:請(qǐng)按照文檔中修改PluginManager.STUB_AUTHORITY_NAME="com.example.droidplugin_stub"的值。
為什么我運(yùn)行demon的時(shí)候安裝不上?
答:如果你安裝了360手機(jī)助手,則是ContentProvider沖突了,請(qǐng)參照文檔第四步修改authorities和PluginManager.STUB_AUTHORITY_NAME。
如何實(shí)現(xiàn)插件和宿主、插件直接的通訊?
答:DroidPlugin系統(tǒng)本身并不提供通訊機(jī)制。如有需要請(qǐng)使用Android系統(tǒng)提供的標(biāo)準(zhǔn)apk之間的通訊方式,如廣播、AIDL等方式。但是目前我正在實(shí)現(xiàn)更優(yōu)雅的通訊方式。
插件和宿主、插件之間如何共享代碼?
答:不行。插件和宿主之間、插件之間都使用了不同的ClassLoader,所以不能互相訪問(wèn)彼此的代碼,即使通過(guò)反射也不行。因?yàn)樵谝恍┣闆r下,插件和宿主可能會(huì)使用相同的開(kāi)源庫(kù),比如support V4,但是使用的版本不一致,如果使用同樣的ClassLoader來(lái)加載,則可能會(huì)因?yàn)殚_(kāi)源庫(kù)的版本不一致導(dǎo)致沖突。
插件和宿主、插件之間如何共享資源?
答:不行。插件和宿主之間、插件之間都使用了不同的AssetManager加載資源,故它們的資源互相隔離,這樣才可以實(shí)現(xiàn)插件免重新打包。只有這樣嚴(yán)格的隔離,才能防止插件和宿主、插件之間的資源id不會(huì)沖突。其它插件則通過(guò)修改aapt,指定生成的資源id段來(lái)解決此事,私以為不夠優(yōu)雅。
7.DroidPlugin支持插件帶一個(gè)so庫(kù)嗎?64位支持如何?
答:支持。64位支持情況請(qǐng)參見(jiàn)我的提交:https://github.com/Qihoo360/DroidPlugin/commit/534a970440ff149f369f5a11611b191523a0ebe7
8.DroidPlugin增加宿主app中所有的權(quán)限
9.host的app中的project.properties文件中增加manifestmerger.enabled=true
10.@Andy Zhang 張總,插件App里面有一個(gè)NFC服務(wù),需要在manifest里面配置aid,但是這個(gè)aid系統(tǒng)讀不到,一直刷不了卡
Andy Zhang? 14:53:18
嗯,對(duì),需要在宿主中配置。
勇敢的少年啊。? 14:53:43
只需要配置aid就行了嗎?
Andy Zhang? 14:55:18
activity都要配置。
Andy Zhang? 14:55:24
這種系統(tǒng)讀的必須要轉(zhuǎn)發(fā)。。
Andy Zhang? 14:55:27
否則不行的
勇敢的少年啊。? 14:57:49
怎么轉(zhuǎn)發(fā)
勇敢的少年啊。? 14:58:45
哦~ 意思就是插件的Activity都要配置在宿主里嗎?
11、您好,DroidPlugin的開(kāi)發(fā)者,想基于DroidPlugin做一些應(yīng)用,現(xiàn)在碰到這個(gè)問(wèn)題:無(wú)法在插件中注冊(cè)一些具有特殊Intent Filter的Service以供Android系統(tǒng)、已經(jīng)安裝的其他APP調(diào)用。? ? 請(qǐng)問(wèn)是否有解決方案了
Andy Zhang? 16:50:05
這個(gè)暫時(shí)不行
Andy Zhang? 16:50:18
只宿主做轉(zhuǎn)發(fā)
12. 先入為主? 16:16:18
宿主完全不能調(diào)用插件的代碼嗎?@Andy Zhang
Andy Zhang? 16:58:58
不能
Andy Zhang? 16:59:15
不可以,除非用contentprovider
Andy Zhang? 10:27:03
1、插件與宿主沒(méi)法共用jar,因?yàn)槿绻灿?,可能?huì)導(dǎo)致插件無(wú)法獨(dú)立運(yùn)行、插件的其它c(diǎn)lass如果跟宿主名稱重復(fù)會(huì)出現(xiàn)沖突、無(wú)法解耦合。
奮斗? 10:27:32
@Andy Zhang? ApkPlug這個(gè)差簡(jiǎn)化,他們 做的就是插件和host運(yùn)行在同一個(gè)進(jìn)程里面的
Andy Zhang? 10:28:20
2、通訊目前只能用android標(biāo)準(zhǔn)協(xié)議,目前正在做更好的費(fèi)那個(gè)事。
奮斗? 10:28:33
@Andy Zhang? 插件的classLoader跟host的classLoader不一樣
Andy Zhang? 10:28:42
3、不運(yùn)行在同一個(gè)進(jìn)程是為了保證穩(wěn)定性和動(dòng)態(tài)升級(jí)。
Andy Zhang? 10:28:45
嗯,對(duì)的。
(∩_∩)Joe? 10:28:57
如果不是要求plugin越小越好,我也不贊成共用
Andy Zhang? 10:29:21
平行空間 也是基于DroidPlugin做的,有大部分代碼是基于DroidPlugin
Andy Zhang? 10:29:37
所以DroidPlugin經(jīng)過(guò)剪裁和修改時(shí)可以支持任何APP的啟動(dòng)的。