接入virtualapk插件框架

       最近都在搞插件框架,为项目搭建用,之前集成了下阿里的atlas,现在送上一篇滴滴的virtualapk,就个人而言,滴滴的集成过程比阿里简单些,有兴趣的可以看看我atlas的:https://blog.csdn.net/lovelixue/article/details/81141213

       废话不多说,上过程

1.环境配置,很重要,官方有规定gradle使用哪个之类的,我用的不同,我就基于我的来写

1.1新建一个工程,根目录的build.gradle里面

classpath 'com.android.tools.build:gradle:3.0.0'
classpath 'com.didi.virtualapk:gradle:0.9.8.4'

根目录 就配置这两个

1.2在app(宿主)目录下的build.gradle文件下添加

apply plugin: 'com.didi.virtualapk.host'

在dependencies里面添加

implementation 'com.didi.virtualapk:core:0.9.6'

1.3重点来了,通过file,new module的形式新建一个module,然后我命名为plugindemo,然后在nodule.gradle里面添加

implementation 'com.didi.virtualapk:core:0.9.6'

接着在末端添加

apply plugin: 'com.didi.virtualapk.plugin'
virtualApk {
    // 插件资源表中的packageId,需要确保不同插件有不同的packageId.
    packageId = 0x6f             // The package id of Resources.
    // 宿主工程application模块的路径,插件的构建需要依赖这个路径
    targetHost='../app' // The path of application module in host project.
    //默认为true,如果插件有引用宿主的类,那么这个选项可以使得插件和宿主保持混淆一致
    applyHostMapping = true      // [Optional] Default value is true.
}

截图

基本 环境就到此为止了,接下来代码部分

2.代码添加并验证

在app的mainactivity里面添加两个按钮,一个是跳转到module去的,一个是加载插件的

public void loadPlugin() {
    PluginManager pluginManager = PluginManager.getInstance(this);
    //此处是当查看插件apk是否存在,如果存在就去加载(比如修改线上的bug,把插件apk下载到sdcard的根目录下取名为plugin-release.apk)
    File apk = new File(Environment.getExternalStorageDirectory(), "plugin-release.apk");
    if (apk.exists()) {
        try {
            pluginManager.loadPlugin(apk);
            Toast.makeText(this, "插件加载成功", Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(this, "插件加载异常!", Toast.LENGTH_SHORT).show();
        }
    }
}

截图

这个时候跳转是不行的,接下来就需要加载插件了 ,首先需要生成插件apk

官方文档是通过命令

gradle clean assemblePlugin来构建插件

如果不想这样,也可以通过直接gradle的来,具体如下

这样 就生成插件apk了,同时官方文档介绍了下这个,就是只能生成release版本的,插件包位于build目录下

到这里 就可以结束验证了,点击加载插件,然后再点击跳转,你会发现可以跳转了,如果如果有帮助可以帮我点个赞或者githup上面star一下,谢谢,如果有问题,可以下面评论回复,一起学习探讨。下面贴上注意点

1.集成环境一定要配置好

2.生成的插件包和加载的时候名字一定要一样

3.注意SD卡的权限

贴上相关参考文档和我的githup代码

https://github.com/didi/VirtualAPK

https://github.com/didi/VirtualAPK/wiki/VirtualAPK-%E6%9E%84%E5%BB%BA%E5%99%A8-API-%E6%A6%82%E8%A7%88

githup:https://github.com/sdgSnow/VirtualAPK

希望对大家有帮助。

遗留了一个问题,宿主app和module的数据传递,请求指教

加几个遇到的坑

 

这个问题是因为gradle版本问题,我使用的3.1.2报错了,改成3.0.0可以

猜你喜欢

转载自blog.csdn.net/lovelixue/article/details/81197352