我正在尝试为闭源 AAR 发布 sources.jar,但 android studio 没有选择它来突出显示 API。
据我所知,这应该是可能的,但我找不到我做错了什么。
库的build.gradle:
apply plugin: 'com.android.library'
apply from: 'my-maven-publish.gradle'
android {
...
buildTypes {
def buildChecksumString = "\"" + rootProject.ext.buildSha + "\""
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'self-proguard-rules.pro'
buildConfigField "String", "BUILD_CHECKSUM", buildChecksumString
resValue "string", "mylib_version", version
}
}
...
}
包含的“my-maven-publish.gradle”:
apply plugin: 'maven-publish'
apply plugin: 'signing'
...
task sourceJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier "sources"
archiveClassifier.set("sources")
include("**/SDK.java",
"**/SDKListener.java") // and some other public classes
}
afterEvaluate {
publishing {
publications {
release(MavenPublication) {
from components.release
...
artifact(sourceJar)
pom {
...
}
}
}
...
}
proguard 配置文件保留了这些公共类,看起来像:
-keepparameternames
-renamesourcefileattribute SourceFile
-keepattributes Exceptions, InnerClasses, Signature, Deprecated, SourceFile, LineNumberTable, Annotation, *Annotation*, EnclosingMethod, PermittedSubclasses
# Preserve all native method names and the names of their classes.
-keepclasseswithmembernames, includedescriptorclasses class * {
native <methods>;
}
...
-keep, includedescriptorclasses class com.my.library.SDK { *; }
-keep interface com.my.library.SDKListener { *; }
# etc. for some other public classes
...
SDK.java 仅包含公共静态方法和少量内部静态类。 SDK类实际上就像一个代理,它的所有方法都调用SDKInternal类的方法(包含私有的东西)。
我看到 Android Studio 下载了 xxx-sources.jar 就这样。 API 没有用文档突出显示,我得到的只是 Cmd + click 上的反编译类。
你能告诉我错误是什么吗? 🙏
附言
我正在使用 Java,gradle 文件在 Groovy 中。
摇篮是 7.1.1
AGP 是 4.1.0
代码使用 R8 混淆。