工作生活

VirtualAPK 插件框架

2019-07-01  本文已影响0人  Lucky胡

错误
1、gradlew clean assemblePlugin 出错

transformClassesAndResourcesWithProguardForRelease FAILED

2、AndroidX的坑
由于插件在编译时会检测引用的包是否在主程序里有,如果插件和主程序,一个用AndroidX一个用Android,就会报错:
The dependencies that will be used in the current plugin must be included in the host app first. Please add it in the host app as well.

3、

Task :publiclib:javaPreCompileRelease FAILED

FAILURE: Build failed with an exception.

4、java.lang.NoSuchFieldException: modifiers
这是用java12导致的,需要用java8.
把jdk版本从12降低到8即可。

5、Unable to find method 'org.gradle.api.tasks.compile.CompileOptions.setBootClasspath(Ljava/lang/String;)V'
将build:gradle由3.0.0升级到'com.android.tools.build:gradle:3.1.0'

6/ResourceType: No known package when getting value for resource number
小屏幕可以,pad会报错。

7、Incompatible structural change detected: Structural change of com.google.protobuf.GeneratedMessageV3 is hazardous

Caused by: java.lang.IncompatibleClassChangeError: com.hiscene.droneplugin.proto.SyncCSyncSData

proto的错误

8、 android.content.res.Resources$NotFoundException: Resource ID #0x6f040000 type #0x12 is not valid
插件的packageId不能设置为一样的,不同插件需要自己设置不同的packageId。
virtualApk {
packageId = 0x6f // the package id of Resources.
targetHost = '../HiLeia/mobile_presentation' // the path of application module in host project.
applyHostMapping = true //optional, default value: true.
}

9、java.lang.UnsatisfiedLinkError: dlopen failed: library "libavcodec-57.so" not found
插件里的so加载不成功。插件单独运行时so可以加载,作为插件运行时不能加载。
解决方法如下:
https://github.com/didi/VirtualAPK/wiki/常见问题解答

10、retrofit卡主
converter-protobuf的版本需要用2.4.0,这里面有protobuf,需要用2.4.0,否则protobuf版本就变成3.5.0了。

11、构建插件时,遇到插件里的依赖在宿主里明明已经依赖了,但是提示没有
The dependencies [com.android.support:multidex:1.0.2] that will be used in the current plugin must be included in the host app first. Please add it in the host app as well.
问题解决:插件和宿主使用的Multidex不同,一个是android,一个是androidX,导致的不同。

12、SearchView无法使用
在插件运行时,SearchView会导致插件view无法加载。

13、rxjava在插件里卡主,release时出现,debug不出现
混淆的问题
需要将插件也混淆
加上反混淆

-dontwarn javax.annotation.**
-dontwarn javax.inject.**
# OkHttp3
-dontwarn okhttp3.logging.**
-keep class okhttp3.internal.**{*;}
-dontwarn okio.**
# Retrofit
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions
# RxJava RxAndroid
-dontwarn sun.misc.**
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
    long producerIndex;
    long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
    rx.internal.util.atomic.LinkedQueueNode producerNode;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
    rx.internal.util.atomic.LinkedQueueNode consumerNode;
}

# Gson
-keep class com.google.gson.stream.** { *; }
-keepattributes EnclosingMethod

14、解决插件里第三方库的Android依赖和宿主里的AndroidX依赖冲突
即使在宿主里加上第三方库的Android依赖,也无法解决。
因为宿主自动将Android依赖替换为AndroidX依赖。
解决方法:
1、在

dependencies {
    configurations.all {
        resolutionStrategy.force "androidx.appcompat:appcompat:1.0.2"
    }
上一篇 下一篇

猜你喜欢

热点阅读