我有 android 库 A 和 B。可以说库 A 是“核心”库,库 B 是该核心库的“插件”。
库 B 通过 private-api 依赖于库 A,我希望对库 A 的公开发布进行混淆。
我正在尝试将这些库构建到单独的 AAR 中,同时还尝试混淆库 A 的私有 api,但仍然能够使用库 B 中的它们(私有 api)。
如果禁用混淆,我可以将它们构建到单独的 AAR 中。然后只需在我的测试应用程序中分别导入库 A 和库 B 即可,一切正常。
我的主要问题是我无法一次性混淆这两个库。显然,如果我使用 A 的混淆版本作为 B 中的依赖项,它不会有私有 api(需要以某种方式传输和使用混淆混淆的映射)。如果我使用 A 的非混淆版本作为 B 内部的依赖项,但在最终应用程序中使用 A 和 B 的混淆版本作为依赖项,它也不会工作。
我的最终目标是能够分别分发两个库的混淆版本。这允许用户选择他们希望与应用程序内的核心库一起使用的插件。
我在以下位置发现了类似的问题:Run Proguard on multi-module project as "onepiece"
但它涉及构建一个可以通过以下方式实现的应用程序
consumerProguardFiles
Run Code Online (Sandbox Code Playgroud)
感谢所有的帮助!
我想在我的库上使用proguard,但文件(规则)应该在库中设置.这意味着我不想在我的app模块中明确设置规则w(属于库).
我发现有类似consumerProguardFiles的属性.我的设置:
库gradle:
buildTypes {
debug {
debuggable true
minifyEnabled false
}
release {
minifyEnabled true
consumerProguardFiles 'proguard-rules.pro'
}
}
Run Code Online (Sandbox Code Playgroud)
app gradle:
buildTypes {
debug {
applicationIdSuffix ".debug"
debuggable true
minifyEnabled false
signingConfig signingConfigs.debug
}
release {
debuggable false
minifyEnabled true
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Run Code Online (Sandbox Code Playgroud)
为什么上面的配置不起作用?我收到错误,无法找到库中的包/符号.
编辑:
重要的是我的proguard-rules.pro用于库和proguard-rules.pro用于主应用程序模块都是空的.
示例错误:
Error:(3, 60) error: package (my library package here) does not exist
(...)
Error:(16, 9) error: cannot find symbol class NavigationStructureModel
(...)
Run Code Online (Sandbox Code Playgroud)
超过一个handrued错误.我可以看到我的库中的所有课程都丢失了.
android proguard android-library android-studio android-proguard