Android插件化之VirtualAPK框架初試

因?yàn)樾枨笠霾寮詫?xiě)篇文章寫(xiě)個(gè)小demo來(lái)記錄一下严就,這篇文章只是寫(xiě)個(gè)demo总寻,而不做總結(jié)和講解。

一.前言

1.什么是插件化梢为,網(wǎng)上很大大佬有很好的解釋渐行,這里我不重復(fù),簡(jiǎn)單來(lái)說(shuō)就是要一個(gè)apk加載另一個(gè)apk的內(nèi)容铸董。

主apk我們成為宿主祟印,被加載內(nèi)容的apk我們稱為插件

2.為什么使用VirtualAPK

關(guān)于插件化有很多方案和框架可以使用,至于我為什么選擇VirtualAPK粟害,主要有兩點(diǎn)原因:
(1)這個(gè)框架目前還在維護(hù)
(2)接入方便旁理,文檔清晰

3.框架地址

https://github.com/didi/VirtualAPK

二.寫(xiě)Demo接入VirtualAPK

要接入VirtualAPK,我們要跟著文檔走我磁,打開(kāi)連接地址孽文,然后點(diǎn)開(kāi)wiki,上面會(huì)有接入的流程夺艰。
注意:不管用什么框架芋哭,最好的文檔都是官方的文檔,就算在接入過(guò)程有問(wèn)題也應(yīng)該先去找Issues有沒(méi)有相應(yīng)的貼郁副,實(shí)在沒(méi)有才用搜索引擎去搜索問(wèn)題减牺。

讀過(guò)這個(gè)框架之后我們知道要做兩個(gè)項(xiàng)目,一個(gè)是宿主項(xiàng)目存谎,一個(gè)是插件項(xiàng)目拔疚。那我用AS開(kāi)發(fā)的話可以寫(xiě)一個(gè)工程然后兩個(gè)module,這邊比較方便管理


我這里宿主就是:app模塊既荚,插件就是:plugintest模塊

在 README.md中有寫(xiě)導(dǎo)入過(guò)程



跟著做稚失,我們?cè)?app模塊中配置
(1)最外層gradle加入virtualapk

buildscript {
    
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        classpath 'com.didi.virtualapk:gradle:0.9.8.6'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

(2)在app模塊的gradle中加入插件和依賴


到這里宿主apk就已經(jīng)配好了,簡(jiǎn)直方便啊恰聘。然后再來(lái)配置插件的gradle


(3)在plugintest模塊的gradle中加入插件和依賴


這樣就配置好了句各,這插件簡(jiǎn)直是方便,比起我當(dāng)時(shí)用微信的Timer晴叨,配置方便太多凿宾。
可能有些朋友不是很熟gradle,我多啰嗦兩句
virtualApk{}是插件com.didi.virtualapk.plugin的配置兼蕊,就像我們默認(rèn)生成的android{}是com.android.application插件的配置初厚。
(1)packgeId是有一個(gè)范圍的,好像是2到多少的我忘了
(2)targetHost是宿主工程的路徑孙技,因?yàn)椴寮@取宿主工程的內(nèi)容产禾,所以要給個(gè)路徑給插件排作,反正就指導(dǎo)宿主的app文件夾下。

2.初始化插件

配置完成之后下愈,我們需要在宿主工程纽绍,也就是我的:app模塊做插件的初始化


跟著文檔做就行蕾久,先在application初始化



然后加載插件势似,要在哪里加載插件,這就要看你需要在哪里使用插件的內(nèi)容僧著,加載插件就是加載你存儲(chǔ)中的apk



這里我插件apk要放在../Android/包名/test 文件夾下履因, apk要改名成pluginTest.apk
3.導(dǎo)出插件apk

配置好并初始化好之后我們就可以先導(dǎo)出插件apk,再把插件apk放到上面的文件夾中盹愚,再運(yùn)行宿主app就行栅迄。
這里需要注意一點(diǎn),這是我踩的坑皆怕,你不能給你的布局使用activity_main.xml這個(gè)名稱毅舆,不然導(dǎo)出插件會(huì)不正確,我是在Issues看到的愈腾,所以說(shuō)出現(xiàn)問(wèn)題先去找Issues

那么要怎么導(dǎo)出插件apk呢憋活,前提是你先要build一下宿主apk,然后再用命令行來(lái)打包插件apk虱黄,每次悦即,和打jar包一樣,用命令打就行橱乱。

打開(kāi)項(xiàng)目的wiki


因?yàn)槲沂莣indows操作系統(tǒng)哈辜梳,所以輸入命令 gradlew clean assembleRelease --stacktrace

如果有配置上的錯(cuò)誤的話,會(huì)打印出來(lái)泳叠,但是肯定不會(huì)打印很詳細(xì)作瞄,所以有問(wèn)題的話還是要靠一點(diǎn)經(jīng)驗(yàn)。
能正常打包的話



會(huì)在build內(nèi)生成一個(gè)文件夾plugin危纫,說(shuō)道這里就又要再多啰嗦一句粉洼,這個(gè)命令打出來(lái)的包是正式包,所以在配置gradle時(shí)記得寫(xiě)簽名

最后把這個(gè)apk改名放到這個(gè)文件夾里就可以了

這樣我們就完成了一個(gè)簡(jiǎn)單的VirtualAPK框架的demo叶摄,不得不說(shuō)這個(gè)框架使用起來(lái)非常方便属韧,當(dāng)然別看現(xiàn)在做的這么順利,其實(shí)到實(shí)際開(kāi)發(fā)的時(shí)候肯定會(huì)遇到坑的蛤吓。所以有一個(gè)良好的閱讀文檔的習(xí)慣是非常重要的宵喂。

三.最后貼我宿主項(xiàng)目的代碼吧

也就做了一個(gè)跳轉(zhuǎn)的操作,跳轉(zhuǎn)的activity是插件的activity

public class OneActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_one);
        initPlugin();
        initView();
    }

    /**
     *  加載插件
     */
    private void initPlugin(){
        PluginManager pluginManager = PluginManager.getInstance(this);
        File file = new File(getExternalFilesDir("test"),"pluginTest.apk");
        if (file.exists()){
            try {
                pluginManager.loadPlugin(file);
            }catch (Exception e){

            }
        }
    }

    private void initView(){
        Button btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClassName("com.example.plugin.plugintest","com.example.plugin.plugintest.TwoActivity");
                startActivity(intent);
            }
        });
    }

}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末会傲,一起剝皮案震驚了整個(gè)濱河市锅棕,隨后出現(xiàn)的幾起案子拙泽,更是在濱河造成了極大的恐慌,老刑警劉巖裸燎,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件顾瞻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡德绿,警方通過(guò)查閱死者的電腦和手機(jī)荷荤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)移稳,“玉大人蕴纳,你說(shuō)我怎么就攤上這事「隽唬” “怎么了古毛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)都许。 經(jīng)常有香客問(wèn)我稻薇,道長(zhǎng),這世上最難降的妖魔是什么胶征? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任塞椎,我火速辦了婚禮,結(jié)果婚禮上弧烤,老公的妹妹穿的比我還像新娘忱屑。我一直安慰自己,他們只是感情好暇昂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布莺戒。 她就那樣靜靜地躺著,像睡著了一般急波。 火紅的嫁衣襯著肌膚如雪从铲。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天澄暮,我揣著相機(jī)與錄音名段,去河邊找鬼。 笑死泣懊,一個(gè)胖子當(dāng)著我的面吹牛伸辟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播馍刮,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼信夫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起静稻,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤警没,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后振湾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體杀迹,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年押搪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了树酪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嵌言,死狀恐怖嗅回,靈堂內(nèi)的尸體忽然破棺而出及穗,到底是詐尸還是另有隱情摧茴,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布埂陆,位于F島的核電站苛白,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏焚虱。R本人自食惡果不足惜购裙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鹃栽。 院中可真熱鬧躏率,春花似錦、人聲如沸民鼓。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)丰嘉。三九已至夯到,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饮亏,已是汗流浹背耍贾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留路幸,地道東北人荐开。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像简肴,于是被迫代替她去往敵國(guó)和親晃听。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

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