-
Notifications
You must be signed in to change notification settings - Fork 1.5k
常见问题解答
请尽快更新至 最新版本 ,老版本将不再维护。
在 dev 分支持续开发尝鲜版,包含新特性并修复部分遗留bug,请关注并试用。
官方交流QQ群:656602897。提问前请先查阅右侧导航中的相关文章,大多数常见问题都可直接找到解决方案。
如果你们的产品采用了VirtualAPK,请告知我们。
PluginDemo renyugang$ gradle clean assemblePlugin
Incremental java compilation is an incubating feature.
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring project ':app'.
> The directory of host application doesn't exist!
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
错误分析:宿主工程的application模块的路径不存在,一般是指路径配错了
解决方式:
virtualApk {
packageId = 0x6f
targetHost = '../../VirtualAPK/app' // 检测这个路径是否正确,相对路径或者绝对路径都行
applyHostMapping = true
}
PluginDemo renyugang$ gradle clean assemblePlugin
Caused by: java.lang.ArrayIndexOutOfBoundsException: 2
at com.didi.virtualapk.VAPlugin$_pickSplitEntries_closure8.doCall(VAPlug
in.groovy:188)
at com.didi.virtualapk.VAPlugin.pickSplitEntries(VAPlugin.groovy:186)
at com.didi.virtualapk.VAPlugin$_apply_closure1$_closure16.doCall(VAPlug
in.groovy:66)
at com.didi.virtualapk.VAPlugin$_apply_closure1.doCall(VAPlugin.groovy:5
2)
at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(Cl
osureBackedMethodInvocationDispatch.java:40)
at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(Cl
osureBackedMethodInvocationDispatch.java:25)
BUILD FAILED
错误分析:请检查dependencies中aar的依赖方式
解决方式: 按如下建议修改
dependencies {
√ compile 'com.didi.virtualapk:core:0.9.0'
√ compile project (":CoreLibrary")
// group和version字段必须有
√ compile(group:'test', name:'CoreLibrary-release', version:'0.1', ext:'aar')
× releaseCompile 'com.didi.virtualapk:core:0.9.0'
× compile(name:'CoreLibrary-release', ext:'aar')
}
ResourceMerger### don't have any retained resources
:app:processShanghaiReleaseResources FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:processShanghaiReleaseResources'.
> Cannot invoke method getAt() on null object
解决方式:请确保插件中至少有一个自己的资源
解决方式:依次检查:
- 先检查 packageId 的取值范围(在下面)是否正确
- 再检查插件依赖的所有com.android.support包在宿主都有显式依赖,并且版本和宿主保持一致
- 读取失败的资源id是否和宿主的资源重名,重名资源会在构建插件包时被自动剔除
* What went wrong:
A problem occurred configuring project ':app'.
> Failed to notify project evaluation listener.
> com/android/builder/dependency/ManifestDependency
解决方式:修改Gradle和build tools的版本,与demo保持一致。JDK使用8.0。
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
解决方式:构建插件请使用gradle assemblePlugin
,而不能直接通过AndroidStudio run出来一个插件apk。
从Android 6.0开始,系统采用了新的权限机制,为了保证插件的加载,请保证APP具有SD卡的访问权限。如果你的app没有在android 6.0上做足够的测试,请不要设置targetSdk为23。
从Android 6.0开始,系统采用了新的权限机制,但是暂时不支持在插件中动态申请权限。
- 采用正常的android资源命名方式,PPTTNNNN:PackageId + TypeId + EntryId。
- 运行时获取资源需要通过packageId来映射apk中的资源文件,不同apk的packageId值不能相同,所以插件的packageId范围是介于系统应用(0x01,0x02,...具体占用多少值视系统而定)和宿主(0x7F)之间。
- 多个插件的packageId和packageName一样,在宿主中需要确保是唯一的。
为了减小包的大小对于那些没有引用的资源进行压缩了,在gradle中配置shrinkResources true即可,位置和minifyEnabled true一起。
因为configChanges的选项组合太多,坑位比较多,这个暂时不准备支持 因为在日常使用的时候就横竖常用。
install Release ,gradle中的一种小驼峰命名的缩写方式。如果发现冲突,可以通过assembleRelease来实现构建宿主工程。
这是0.9.1版本的bug,更高版本已经修复,请更新版本。
不支持。构建插件的依赖自动剔除功能仅支持内容稳定不变,路径稳定的资源,而本地的jar或其它资源的路径和内容都是可变更的,因此无法直接自动剔除,如果需要剔除,请将资源打包导出部署到maven或其它依赖管理服务器。如果资源不可公开发布,可在内网部署私有maven服务。
java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/com.xxx.plugin/app_valibs/libxxx.so" is 32-bit instead of 64-bit
at java.lang.Runtime.loadLibrary0(Runtime.java:1016)
at java.lang.System.loadLibrary(System.java:1669)
at ...
插件安装使用so的abi必须与宿主保持一致,而宿主的abi类型在app安装时根据apk配置确定,并不再改变。请按以下步骤检查项目配置:
- 宿主apk中未使用so,则按设备默认abi类型安装。如果插件中使用so并报此错误,则需要在宿主中放一个占位的同abi类型so。
- 插件中使用的liba.so中直接引用了libb.so导出的符号,需要在加载a.so前显式加载b.so,否则可能会报找不到b.so的错误。详见Android中的System.loadLibrary对于依赖so的加载分析,如:
System.loadLibrary("b");
System.loadLibrary("a");