混淆AAR库配套sources.jar无法被Android Studio识别问题排查
闭源AAR的sources.jar已下载但Android Studio无法识别的排查方案
1. 验证sources.jar的内容完整性
找到本地Maven仓库中生成的xxx-sources.jar,解压后检查以下几点:
- 确认包含的类(如
SDK.java、SDKListener.java)的全限定包路径与AAR中混淆后的类完全一致 - 确认SDK类的内部静态类也被正确包含(比如
SDK$InnerClass.java),如果当前include("**/SDK.java")未覆盖内部类,可修改为include("**/SDK*.java") - 可在sourceJar任务中添加打印,验证源码路径是否正确:
task sourceJar(type: Jar) { from android.sourceSets.main.java.srcDirs println "Source dirs: ${android.sourceSets.main.java.srcDirs}" // 打印源码目录,确认指向正确路径 archiveClassifier.set("sources") include("**/SDK.java", "**/SDKListener.java", "**/SDK*.java") }
2. 修正Maven发布的Artifact配置
- 避免重复设置classifier,
classifier "sources"和archiveClassifier.set("sources")保留其中一个即可(Gradle 7.x+推荐用archiveClassifier):task sourceJar(type: Jar) { from android.sourceSets.main.java.srcDirs archiveClassifier.set("sources") // 仅保留这一行 include("**/SDK.java", "**/SDKListener.java", "**/SDK*.java") } - 检查本地仓库的
pom.xml,确认存在sources artifact的条目:<artifact> <groupId>com.my.library</groupId> <artifactId>xxx</artifactId> <version>x.x.x</version> <classifier>sources</classifier> <type>jar</type> </artifact>
3. 确保ProGuard/R8配置与源码匹配
- 确认混淆后的类与sources.jar中的类全限定名、方法签名完全一致:
- 检查
-keep规则是否正确保留了公共类的完整结构,比如-keep, includedescriptorclasses class com.my.library.SDK { *; }要确保类名、方法名、参数都未被混淆 - 保留
-renamesourcefileattribute SourceFile和-keepattributes SourceFile, LineNumberTable,确保混淆后的类携带正确的源文件标识
- 检查
4. 修复AGP与Gradle版本兼容性问题
AGP 4.1.0官方兼容的Gradle版本是6.5-6.7,当前使用的Gradle 7.1.1版本过高,可能导致发布流程异常:
- 修改
gradle/wrapper/gradle-wrapper.properties中的distributionUrl,降级到6.7.1:distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip - 同步项目后重新发布AAR和sources.jar
5. 清除Android Studio缓存
- 执行
File -> Invalidate Caches... -> Invalidate and Restart,强制Studio重新加载sources.jar - 也可以手动删除项目根目录的
.gradle、build文件夹,以及本地Maven仓库中该库的缓存,重新同步依赖
内容的提问来源于stack exchange,提问作者Sheikh
相关产品推荐
相关产品推荐

