插件开发规范 V1.0.1
由于VirtualAPK本身的特性,插件需要遵循以下规范:
1.宿主配置
Project build.gradle
classpath 'com.didi.virtualapk:gradle:0.9.0'
`</pre>
Module build.gradle
<pre>`apply plugin: 'com.didi.virtualapk.host'
compile 'com.didi.virtualapk:core:0.9.0'
`</pre>
2.插件配置
插件 Project build.gradle 文件中,需要加入如下引用:
classpath 'com.didi.virtualapk:gradle:0.9.0'
注:版本号应与宿主版本号相同
插件 Module build.gradle 文件中,需要加入如下引用:
apply plugin: 'com.didi.virtualapk.plugin'
virtualApk {
packageId = 0x6f // 插件资源id,避免资源id冲突
targetHost='../host/app'// 宿主工程的路径
applyHostMapping = true // 插件编译时是否启用应用宿主的apply mapping 默认为true
}
3.构建环境
官方构建环境建议:
框架强依赖构建环境。如果更换构建环境,可能会出现问题
Gradle 2.14.1
com.android.tools.build 2.1.3
即:插件 Project build.gradle 文件中
classpath 'com.android.tools.build:gradle:2.1.3'
插件gradle-wrapper.properties文件中:
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
4.打包
插件打包时,应当用命令
./gradlew clen assemblePlugin
或者 gradle clean assemblePlugin
进行打包
输出位置为:app\build\outputs\plugin\release
由于插件 Module build.gradle 文件中设置了如下参数,
targetHost=’../host/app’// 宿主工程的路径
故,打包时的文件结构应为:
即:HOST 应与插件在同一目录下编译
插件调用宿主
将宿主中需要被插件调用的 模块、类,下沉到公共组件库。
即:以aar包的形式。分别被插件,组件依赖即可。
aar 引入模板:
compile(group:'test', name: 'app-release', version:'0.2', ext: 'aar')
插件中包含 so 包需特别注意
如果插件中包含如百度地图等 so 包,由于部分第三方库存在的包名校验机制,需要注册一份新的 secretKey 写到宿主中,这个不难理解,因为运行时包名是宿主的包名,不能通过校验。
资源链接
我的踩坑记录 https://blog.csdn.net/a31081314/article/details/82661009
我的demo 地址 https://github.com/CD3108/VirtualAPK
源码地址 https://github.com/didi/VirtualAPK
详细框架接入 https://www.jianshu.com/p/013510c19391
资源加载过程 https://www.notion.so/VirtualAPK-1fce1a910c424937acde9528d2acd537