[插件化] Droid Plugin 學(xué)習(xí)總結(jié)

原文地址:
http://www.reibang.com/p/d16cd0e3333f
http://blog.csdn.net/qq_24889075/article/details/68489830

Droid Plugin的優(yōu)缺點(diǎn)網(wǎng)上一堆瘩燥,本文是在學(xué)習(xí)過程的產(chǎn)物,沒有原理 只有使用。

根據(jù)Droid Plugin 里readme進(jìn)行使用

本文流程:

  • 創(chuàng)建項(xiàng)目
  • 導(dǎo)入依賴庫
  • 配置依賴庫
  • 開發(fā)Host Module
  • 開發(fā)Plugin Module
  • 其他的說明

新建AS項(xiàng)目

并無特殊注意事項(xiàng)

導(dǎo)入依賴庫

在我導(dǎo)入庫的時(shí)候出現(xiàn)了一個(gè)錯(cuò)誤 Cannot get property 'compileSdkVersion' on extra properties extension as it does not exist 如圖。

Cannot get property 'compileSdkVersion' on extra properties extension as it does not exist

經(jīng)過一番搜索這篇文章給了答案割以。我在build.gradle(Project的)中添加如下代碼后洒擦,錯(cuò)誤消失谎倔。
ext { compileSdkVersion = 23//具體哪個(gè)版本根據(jù)自己情況設(shè)置 buildToolsVersion = "23.0.1" }

配置依賴庫

具體配置方式在Droid Plugin readme中有寫亮曹。

主要就是

  1. 配置Application
  2. 將插件中Libraries\DroidPlugin\AndroidManifest.xml中所有的provider對(duì)應(yīng)的authorities修改成自己的
    默認(rèn)為:com.morgoo.droidplugin_stub_P00 避免與其他使用者的出現(xiàn)沖突茅糜,可以將其該為
    包名.droidplugin_stub_P00
  3. PluginManager.STUB_AUTHORITY_NAME 為你的值
    PluginManager.STUB_AUTHORITY_NAME="包名.droidplugin_stub"

authorities我改了9個(gè)七芭,為什么了我還數(shù)了呢,因?yàn)楫?dāng)時(shí)只改了8個(gè) 然后和360助手沖突蔑赘。
另外狸驳,最好只修改前面的com.morgoo.droidplugin部分,后面的P00,P01…..不要改缩赛。
反正是我以包名.stub_P00形式命名的耙箍,但刪掉stub也能跑 , 就按照官方的規(guī)范來吧。

開發(fā)Host Module

兩個(gè)按鈕:加載插件酥馍、跳轉(zhuǎn)Activity

public void installPlugin(View view) { File file = new File(Environment.getExternalStorageDirectory(), "/plugin.apk"); String path = file.getAbsolutePath(); try { PluginManager.getInstance().installPackage(path, PackageManagerCompat.INSTALL_REPLACE_EXISTING); } catch (RemoteException e) { e.printStackTrace(); } }

public void start(View view) { //第一種方式 intent = new Intent(PluginConsts.PLUGIN_MALL_MAIN);//PLUGIN_MALL_MAIN為一個(gè)常量辩昆,是Plugin Module里的啟動(dòng)界面 startActivity(intent); //第二種方式 下面這種是推薦使用的方式 因?yàn)楣俜紻emo用的這種方式 PackageManager pm = getPackageManager(); Intent intent = pm.getLaunchIntentForPackage("包名"); if (intent == null) { Toast.makeText(view.getContext(), "跳轉(zhuǎn)失敗", Toast.LENGTH_SHORT).show(); return; } intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); }

開發(fā)Plugin Module

新建個(gè)Hello world應(yīng)用就好

本項(xiàng)目注意事項(xiàng)

Plugin Module里的啟動(dòng)界面要在AndroidManifest中稍微配置一下,如:

"com.example.plugin.main"這個(gè)就是上面說的com.example.plugin.main

<activity android:name=".PluginMainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> <action android:name="com.example.plugin.main"/>//如果不添加一個(gè)識(shí)別此Activity的action 就不能用上面的跳轉(zhuǎn)方式進(jìn)行跳轉(zhuǎn) <category android:name="android.intent.category.DEFAULT"/>//如果不設(shè)置這個(gè)將會(huì)一直卡在加載界面 </intent-filter> </activity>

插件最好放在SD卡的某個(gè)目錄中物喷,不要放在data/data下卤材,因?yàn)榉旁谀抢锛虞d失敗了(沒跳轉(zhuǎn))。具體原因沒找峦失,懶得找 放在sd卡中隱藏起來用戶也看不見。 ?(?*)


卡死界面(加載界面)

如果看這個(gè)界面不爽的可以隱藏掉术吗,暫時(shí)沒找到官方給的方法(其實(shí)是我沒找),但簡單看了下這個(gè)界面尉辑,想自己弄的朋友可以改改theme。

卡死界面

卡死界面是在庫中的com.morgoo.droidplugin.stub的ActivityStub子類(Activity)中的Standard00较屿,在AndroidManifest中904行左右注冊(cè)隧魄。

Standard00

我們看見的 '進(jìn)度條'和'努力加載中...' 其實(shí)就是一張圖片,在其theme中可以看見隘蝎。如圖

theme

drawable

這個(gè)圖片其實(shí)就是一個(gè) .9圖购啄。如圖:

.9圖

其他

依賴庫錯(cuò)誤原因:

出錯(cuò)的原因在DroidPlugin的build.gradle中。

android { compileSdkVersion rootProject.ext.compileSdkVersion//這里是錯(cuò)誤的根源 buildToolsVersion rootProject.ext.buildToolsVersion//這里是錯(cuò)誤的根源 sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] jniLibs.srcDirs = ['libs'] } instrumentTest.setRoot('tests') debug.setRoot('build-types/debug') release.setRoot('build-types/release') } lintOptions { abortOnError false } }

rootProject.ext.compileSdkVersion的意思是 調(diào)用Project接口下的getRootProject()方法得到project對(duì)象嘱么,在調(diào)用project對(duì)象中的ext方法(就是我們剛剛寫的ext{.....}那個(gè))中的compileSdkVersion值狮含。 在本文中這個(gè)了解下就可以。

結(jié)構(gòu)目錄:

在插件安裝成功后會(huì)在應(yīng)用文件夾下創(chuàng)建一個(gè)Plugin文件夾曼振。Plugin文件夾下是你的插件文件夾几迄,以包名形式存在。里面存了一些東西冰评,重點(diǎn)是里面有一個(gè)叫shared_prefs(如果你沒有用SharedPreferences是不會(huì)出現(xiàn))映胁,這就實(shí)現(xiàn)了Host與Plugin的SharedPreferences分離。
要想數(shù)據(jù)共享可以看這里
實(shí)現(xiàn):
try { Context otherAppsContext = createPackageContext("HostPackageName", Context.CONTEXT_IGNORE_SECURITY); SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences("test", Context.MODE_WORLD_READABLE); if (sharedPreferences != null) { String str = sharedPreferences.getString("key",null); Toast.makeText(getApplicationContext(), "result: " + str, Toast.LENGTH_SHORT).show(); } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); }

從Plugin跳轉(zhuǎn)到Host也用這個(gè):

PackageManager pm = getPackageManager(); Intent intent = pm.getLaunchIntentForPackage("包名"); if (intent == null) { Toast.makeText(view.getContext(), "跳轉(zhuǎn)失敗", Toast.LENGTH_SHORT).show(); return; } intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);

權(quán)限:

在AndroidManifest中申請(qǐng)了一堆權(quán)限甲雅,可根據(jù)項(xiàng)目需要?jiǎng)h除或添加

如果提示你申請(qǐng)的權(quán)限過多解孙,那么有可能真的是申請(qǐng)過多坑填,去庫里刪些不用了就好。但如果你刪完了弛姜,并且host Plugin 還有庫里的權(quán)限都一樣穷遂,還是包申請(qǐng)權(quán)限過多!那么請(qǐng)你重新檢查權(quán)限寫的是不是一樣娱据,我再庫里少寫了一個(gè)權(quán)限 就一直包權(quán)限過多蚪黑。。中剩。忌穿。 千萬馬虎不得啊~

加固:

公司用的是梆梆加固,梆梆加固對(duì)于DroidPlugin貌似并不認(rèn)可结啼,使用了DroidPlugin就會(huì)在安全監(jiān)測時(shí)出現(xiàn)"engine:cyren name:Helir.D.gen!Eldorado|Trojan"!,本以為是我項(xiàng)目的原因掠剑,于是我重新創(chuàng)建了個(gè)項(xiàng)目,添加依賴郊愧,上傳梆梆朴译,同樣出現(xiàn)這個(gè)報(bào)毒的提示。

在Issue上提問了 詳情請(qǐng)看 https://github.com/DroidPluginTeam/DroidPlugin/issues/337

這個(gè)問題反映給老大之后属铁,老大選擇放棄DroidPlugin,使用公司自己寫的.... 蛋疼啊~

看來對(duì)于DroidPlugin要告一段落了~

后記 雖然360加固沒問題眠寿,但是老大出于后期維護(hù)考慮,打算用梆梆加固焦蘑,于是選擇放棄盯拱。 個(gè)人進(jìn)行測試:先用360加固,再用梆梆加固例嘱,完美運(yùn)行狡逢!由于項(xiàng)目著急上線 老大采用此方案應(yīng)急~


學(xué)習(xí)中看的資料 :
http://www.reibang.com/p/f1217cce93ef
http://blog.csdn.net/fuchaosz/article/details/51058058
http://blog.csdn.net/yzzst/article/details/48093567

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拼卵,隨后出現(xiàn)的幾起案子奢浑,更是在濱河造成了極大的恐慌,老刑警劉巖腋腮,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雀彼,死亡現(xiàn)場離奇詭異,居然都是意外死亡低葫,警方通過查閱死者的電腦和手機(jī)详羡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嘿悬,“玉大人实柠,你說我怎么就攤上這事∩普牵” “怎么了窒盐?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵草则,是天一觀的道長。 經(jīng)常有香客問我蟹漓,道長炕横,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任葡粒,我火速辦了婚禮份殿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嗽交。我一直安慰自己卿嘲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布夫壁。 她就那樣靜靜地躺著拾枣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盒让。 梳的紋絲不亂的頭發(fā)上梅肤,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音邑茄,去河邊找鬼姨蝴。 笑死,一個(gè)胖子當(dāng)著我的面吹牛撩扒,可吹牛的內(nèi)容都是我干的似扔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼搓谆,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了豪墅?” 一聲冷哼從身側(cè)響起泉手,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎偶器,沒想到半個(gè)月后斩萌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屏轰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年颊郎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霎苗。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡姆吭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出唁盏,到底是詐尸還是另有隱情内狸,我是刑警寧澤检眯,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站昆淡,受9級(jí)特大地震影響锰瘸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昂灵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一避凝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧眨补,春花似錦管削、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至实蓬,卻和暖如春茸俭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背安皱。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工调鬓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人酌伊。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓腾窝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親居砖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虹脯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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