Android插件化之VirtualAPK框架初试

因为需求要做插件化,所以写篇文章写个小demo来记录一下,这篇文章只是写个demo,而不做总结和讲解。

一.前言

1.什么是插件化,网上很大大佬有很好的解释,这里我不重复,简单来说就是要一个apk加载另一个apk的内容。

主apk我们成为宿主,被加载内容的apk我们称为插件

2.为什么使用VirtualAPK

关于插件化有很多方案和框架可以使用,至于我为什么选择VirtualAPK,主要有两点原因:
(1)这个框架目前还在维护
(2)接入方便,文档清晰

3.框架地址

https://github.com/didi/VirtualAPK

二.写Demo接入VirtualAPK

要接入VirtualAPK,我们要跟着文档走,打开连接地址,然后点开wiki,上面会有接入的流程。
注意:不管用什么框架,最好的文档都是官方的文档,就算在接入过程有问题也应该先去找Issues有没有相应的贴,实在没有才用搜索引擎去搜索问题。

读过这个框架之后我们知道要做两个项目,一个是宿主项目,一个是插件项目。那我用AS开发的话可以写一个工程然后两个module,这边比较方便管理


我这里宿主就是:app模块,插件就是:plugintest模块

在 README.md中有写导入过程



跟着做,我们在: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就已经配好了,简直方便啊。然后再来配置插件的gradle


(3)在plugintest模块的gradle中加入插件和依赖


这样就配置好了,这插件简直是方便,比起我当时用微信的Timer,配置方便太多。
可能有些朋友不是很熟gradle,我多啰嗦两句
virtualApk{}是插件com.didi.virtualapk.plugin的配置,就像我们默认生成的android{}是com.android.application插件的配置。
(1)packgeId是有一个范围的,好像是2到多少的我忘了
(2)targetHost是宿主工程的路径,因为插件要获取宿主工程的内容,所以要给个路径给插件,反正就指导宿主的app文件夹下。

2.初始化插件

配置完成之后,我们需要在宿主工程,也就是我的:app模块做插件的初始化


跟着文档做就行,先在application初始化



然后加载插件,要在哪里加载插件,这就要看你需要在哪里使用插件的内容,加载插件就是加载你存储中的apk



这里我插件apk要放在../Android/包名/test 文件夹下, apk要改名成pluginTest.apk
3.导出插件apk

配置好并初始化好之后我们就可以先导出插件apk,再把插件apk放到上面的文件夹中,再运行宿主app就行。
这里需要注意一点,这是我踩的坑,你不能给你的布局使用activity_main.xml这个名称,不然导出插件会不正确,我是在Issues看到的,所以说出现问题先去找Issues

那么要怎么导出插件apk呢,前提是你先要build一下宿主apk,然后再用命令行来打包插件apk,每次,和打jar包一样,用命令打就行。

打开项目的wiki


因为我是windows操作系统哈,所以输入命令 gradlew clean assembleRelease --stacktrace

如果有配置上的错误的话,会打印出来,但是肯定不会打印很详细,所以有问题的话还是要靠一点经验。
能正常打包的话



会在build内生成一个文件夹plugin,说道这里就又要再多啰嗦一句,这个命令打出来的包是正式包,所以在配置gradle时记得写签名

最后把这个apk改名放到这个文件夹里就可以了

这样我们就完成了一个简单的VirtualAPK框架的demo,不得不说这个框架使用起来非常方便,当然别看现在做的这么顺利,其实到实际开发的时候肯定会遇到坑的。所以有一个良好的阅读文档的习惯是非常重要的。

三.最后贴我宿主项目的代码吧

也就做了一个跳转的操作,跳转的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);
            }
        });
    }

}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容