如何用Gradle或其他工具修补Android依赖库中的TelemetryUtils类?
修复依赖库单个类的可行方案
步骤1:创建对应包结构并放入修复类
在你的Android项目src/main/java目录下,创建与目标类完全一致的包路径:com/mapbox/services/android/telemetry/utils,将修复好的TelemetryUtils.java文件放入该目录。
核心逻辑是:Android编译时,项目自身源码会优先于依赖库代码被加载,相同全限定名的类,项目内的版本会覆盖依赖库中的原类。
步骤2:配置Gradle确保编译优先级(部分场景需补充)
若出现依赖库类仍被优先加载的情况,在app模块的build.gradle(或build.gradle.kts)中添加配置,明确项目源码的编译优先级:
Groovy语法版本
android { sourceSets { main { java { srcDirs = ['src/main/java'] } } } }
Kotlin DSL版本
android { sourceSets { main { java.srcDirs("src/main/java") } } }
步骤3:验证修复效果
编译运行应用后,可通过日志确认自定义类已生效,添加如下代码打印类加载路径:
Log.d("TelemetryUtils", TelemetryUtils.class.getProtectionDomain().getCodeSource().getLocation().toString());
若输出路径指向你的APK自身,说明覆盖成功。
注意事项
- 必须保证修复类的全限定名(包名+类名)与原类完全一致,否则无法实现覆盖。
- 若项目开启混淆,需在
proguard-rules.pro中添加规则避免自定义类被混淆:
-keep class com.mapbox.services.android.telemetry.utils.TelemetryUtils { *; }
- 后续升级依赖库时,需重新核对该类的代码变动,避免修复失效或出现兼容性问题。
内容的提问来源于stack exchange,提问作者Francisco Vieira
相关产品推荐
相关产品推荐

