VirtualAPK 官网 https://github.com/didi/VirtualAPK
框架接入,四大组件原理分析,资源原理分析,在 wiki 中的第三方技术文章里都有很详细的介绍
VirtualAPK 群号:656602897
我在下载源码 读了两天之后,开始接入
接入中有很多坑,现在一 一描述,希望能给后人一些帮助
首先,这个框架在 2018 年的 9 月算是业内最好的开源框架了,相比于 360 的 DroidPlugin 已经一年多没更新
滴滴仍在维护,已经兼容 android P 是当时最优的选择,接下来就说一下接入的坑
这三个都是由 gradle 版本以及 框架版本 配置不当导致的
project build.gradle:
classpath 'com.android.tools.build:gradle:3.0.0'
classpath 'com.didi.virtualapk:gradle:0.9.8.6'
module build.gradle:
apply plugin: 'com.didi.virtualapk.host'
compile "com.didi.virtualapk:core:0.9.8"
gradle-wrapper.properties:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
下面这个超级超级重要!!!
gradle.properties :
android.useDexArchive=false
project build.gradle:
classpath 'com.android.tools.build:gradle:3.0.0'
classpath 'com.didi.virtualapk:gradle:0.9.8.6'
module build.gradle:
apply plugin: 'com.didi.virtualapk.plugin'
virtualApk {
packageId = 0x6f // The package id of Resources.
// targetHost='../host/app' // The path of application module in host project.
targetHost = '../HostDemo/app'
applyHostMapping = true // [Optional] Default value is true.
}
gradle-wrapper.properties:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
下面这个超级超级重要!!!
gradle.properties :
android.useDexArchive=false
按照标配配置完之后,剩下的问题都是打包的小问题了。
另:网上说的 什么插件只能是 2.14.1 gradle 是 2.1.3,那都是历史了,是 框架为 0.9.0 的时候的事
现在都 2018 年了,都 0.9.8.6 了,没那些限制了。
现象:1.运行了 Activity 中与资源无关的代码 (Toast),但是没加载资源文件(XML布局依然是宿主的)
2.还可能报强转型错误。说你插件包中强转型有问题。
解决办法:用 gradle 构建命令生成apk
我是用git构建的
进入F:\ARWorkSpace\VirualAPKPluginDemo,点击右键Git Bash Here
输入
./gradlew clean assemblePlugin(这个本人测试通过)
自己从 studio上面的 build 按钮弄出来的包是不能用的。用就会出现这种状态。
原因: gradle 命令构建会在各插件资源中会打上 0x3f 这个偏移量,自己 build 不会加这个偏移量,故找不到插件资源
virtualApk {
// 插件资源表中的packageId,需要确保不同插件有不同的packageId.
packageId = 0x3f
// 宿主工程application模块的路径,插件的构建需要依赖这个路径
targetHost = '../VirtualAPKHostDemo/app'
//默认为true,如果插件有引用宿主的类,那么这个选项可以使得插件和宿主保持混淆一致
applyHostMapping = true
}
此为gradle 2.14.1 包有问题,去网上下了一个新的 ,替换了旧的就可以了
下载地址:【http://services.gradle.org/distributions/gradle-2.14.1-all.zip】
替换目录:【Users\user\.gradle\wrapper\dists\gradle-2.14.1-all\ah86jmo43de9lfa8xg9ux3c4h】
原因:
targetHost = '../VirtualAPKHostDemo/app'
此处设置了,各插件都引用宿主工程的路径
我第二个插件的路径与宿主工程路径不一致,虽然构建成功,但是会闪退
解决办法:将插件二工程,移到主工程文件夹下
原因:1.宿主资源与插件资源名称一样 2.两个插件 资源 ID 的偏移量可能设置成了一样的
解决办法:在宿主中 compile 一份即可
不然会报 Package Manager Permission 的错误
插件 databinding 为 null 的,降一个版本 gradle:0.9.8.4,core:0.9.6 之后,就可以用了
这就是我接入踩的所有的坑了 坑二 感谢 大大的微笑 https://blog.csdn.net/chwshuang/article/details/52261940
这篇博客替我脱坑,没这篇博客,我可能已经从入门到放弃了
我的demo:https://github.com/CD3108/VirtualAPK.git
QQ:[email protected] 标明来意