相关疑难解决方法(0)

一次性对多个库运行 proguard 混淆

我有 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)

感谢所有的帮助!

java obfuscation android proguard android-proguard

5
推荐指数
0
解决办法
448
查看次数

用于库的Android Studio consumerProguardFiles不起作用

我想在我的库上使用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

2
推荐指数
2
解决办法
2339
查看次数