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框架的集成使用和属性配置有进一步认识,知其然知其所以然。