目前测试项目已经成功集成,列举下目前遇到的问题以及解决方案
先贴下我的环境:
dependencies {
...
implementation 'com.tencent.bugly:crashreport_upgrade:1.5.0'
implementation 'com.tencent.tinker:tinker-android-lib:latest.release'
implementation 'androidx.multidex:multidex:2.0.0' // 多dex配置
//Bugly SDK(2.1.5及以上版本)已经将Java Crash和Native Crash捕获功能分开
//如果想使用NDK库,需要配置:
//implementation'com.tencent.bugly:nativecrashreport:latest.release'
}
问题一:Gradle版本问题
A problem occurred configuring project ':app'.
> Failed to notify project evaluation listener.
> No such property: variantConfiguration for class: com.android.build.gradle.internal.variant.ApplicationVariantData
> can't find tinkerProcessDebugManifest, you must init tinker plugin first!
解决方案:针对Gradle版本,可以选择修改project下的build.gradle文件,引入版本号1.1.9.3,如下:
classpath "com.tencent.bugly:tinker-support:1.1.9.3"
问题二:public.txt : ERROR: failed reading stable ID file.
AGPBI: {"kind":"error","text":"Android resource linking failed","sources":[{}],"original":"ERROR:: AAPT: ...\build\intermediates\tinker_intermediates\public.txt: error: failed reading stable ID file.\n\n ","tool":"AAPT"}
ERROR:: AAPT: ...\build\intermediates\tinker_intermediates\public.txt: error: failed reading stable ID file.
解决办案:根据Bugly官方Demo,需要查看项目中集成的 tinker-android-lib 版本号,如果和官方Demo相同(目前是‘1.9.14.10’)则需要在build.gradle中添加如下代码:
def createFile(path) {
File file = new File(path)
if (!file.exists()) {
file.createNewFile()
}
}
android.applicationVariants.all { variant ->
/**
* task type, you want to bak
*/
def taskName = variant.name
def path = "${buildDir}/intermediates/tinker_intermediates/public.txt"
tasks.all {
if ("process${taskName.capitalize()}Resources".equalsIgnoreCase(it.name)) {
it.doFirst {
createFile(path)
}
}
}
}
建议使用最新库,可规避该报错:
//latest.release指代最新版本号 implementation 'com.tencent.tinker:tinker-android-lib:latest.release'
问题三:打包失败报错 No direct method (ILjava/lang/String;Ljava/lang/String;Z)V in class
FATAL EXCEPTION: main Process:xxx, PID: 20447
java.lang.NoSuchMethodError: No direct method (ILjava/lang/String;Ljava/lang/String;Z)V in class Lcom/tencent/tinker/loader/app/TinkerApplication; or its super classes (declaration of 'com.tencent.tinker.loader.app.TinkerApplication' appears in /data/app/xxx.xxx.xxx-2/base.apk)
at com.tencent.bugly.beta.tinker.TinkerPatchReflectApplication.(BUGLY:44)
at java.lang.Class.newInstance(Native Method) at android.app.Instrumentation.newApplication(Instrumentation.java:997)
at android.app.Instrumentation.newApplication(Instrumentation.java:982)
at android.app.LoadedApk.makeApplication(LoadedApk.java:614)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4968)
at android.app.ActivityThread.access$1800(ActivityThread.java:170)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1555)
at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:179)
at android.app.ActivityThread.main(ActivityThread.java:5769) at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
解决方案:检查集成的库版本号'com.tencent.tinker:tinker-android-lib',初始化SDK中配置项“enableProxyApplication = true” 仅适配到 1.9.14.7,如果集成版本大于‘ 1.9.14.7’,请采用反射Application方法,并将 enableProxyApplication 修改为 false。
以下是官方文档示例:
问题四:补丁包发布无效果
解决方案:
首先确保 Bugly.init(getApplication(), "你的APPID", true); 第三个参数(是否打印日志)为true,然后再Logcat中查看当前运行基准包tinkerId,与补丁包中的版本tinkerId是否一致