Bugly热修复成功集成爬坑总结

目前测试项目已经成功集成,列举下目前遇到的问题以及解决方案

先贴下我的环境:

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是否一致

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值