VirtualAPK(滴滴)插件化框架的使用

宿主项目的VirtualAPK配置

在集成使用滴滴插件化框架VirtualAPK时,按照官方接入文档,分别需要在宿主工程和插件工程中进行gradle相关配置,其中特别需要引入VirtualAPK的Gradle插件。
VirtualAPK Gradle插件配置如下:

Host Project
在宿主工程根目录下 build.gradle 中添加插件路径:

    dependencies {
        classpath 'com.didi.virtualapk:gradle:0.9.8.6.2-dev'
        //一定要是3.0 的gradle
        classpath 'com.android.tools.build:gradle:3.0.0'

    }

在宿主app module的 build.gradle 中应用host插件:

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

在宿主的Applcation 的attachBaseContext中执行如下方法


    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        PluginManager.getInstance(base).init();
    }

插件项目的VirtualAPK配置

在插件工程根目录下 build.gradle 中添加插件路径:

    dependencies {
        classpath 'com.didi.virtualapk:gradle:0.9.8.6.2-dev'
        //一定要是3.0 的gradle
        classpath 'com.android.tools.build:gradle:3.0.0'

    }

在插件app module的 build.gradle 中应用plugin插件:

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

在插件app module的 build.gradle 中配置:

virtualApk {
 packageId = 0x6f             // 插件资源id,避免资源id冲突
    targetHost='../app'     // 宿主工程的路径(绝对或者相对路径)
    applyHostMapping = true      // 插件编译时是否启用应用宿主的apply mapping
}

插件的生成

这边有个,在生成前必须在在宿主以及插件项目的gradle.properties文件中加上
android.useDexArchive=false
1.先编译宿主项目,编译成功后会在宿主的app/build/ 下生成VAHost文件夹
在这里插入图片描述

2.宿主编译完后完成后编译插件项目。
3.编译成功后 在Terminal 中执行gradlew clean assemblePlugin。
4.执行结束后插件所在目录在buidle/outputs/plugin/中。
在这里插入图片描述

插件使用

在宿主中使用插件方法如下


    private void loadPlugin(Context base) {
        PluginManager pluginManager = PluginManager.getInstance(base);
        File apk = new File(Environment.getExternalStorageDirectory() + "/Download/", "plus.apk");
        if (apk.exists()) {
            try {
                //加载插件
                pluginManager.loadPlugin(apk);
                //加载成功后像正常一样使用
                Intent intent = new Intent();
                intent.setClassName(this, "com.didi.virtualapk.demo.aidl.BookManagerActivity");
                startActivity(intent);
                
               
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

尾声

初次接入VirtualAPK框架时,新手经常遇到Gradle构建错误,不理解每个配置项的含义作用。通过对VirtualAPK的Gradle构建插件的简单梳理,对VirtualAPK框架的集成使用和属性配置有进一步认识,知其然知其所以然。


版权声明:本文为qq_18477271原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。