【问题标题】:Obfuscation across multiple gradle modules with proguard possible?可以使用 proguard 跨多个 gradle 模块进行混淆吗?
【发布时间】:2014-11-12 22:46:19
【问题描述】:

我有一个包含主模块和一个库模块的 Gradle 项目,每个模块都设置了 proguard。

我的问题是,在库模块中被混淆为“A”或类似的类仍然从具有原始名称的主模块中引用,比如说“MyUtil”,它不再存在了。

如果可能的话,我不想从混淆中排除这个类,那么有什么方法可以跨模块进行混淆吗?

【问题讨论】:

    标签: reference gradle android-studio proguard obfuscation


    【解决方案1】:

    听起来您需要在您的库中创建一个被排除在混淆之外的 API 类。 API 类只是一个外观并调用您的内部库方法。

    【讨论】:

    • 谢谢。这是我没有想到的一种方法,在某些时候确实应该起作用。问题是,我还通过传递对象来与库进行通信,而您的解决方法并没有真正起作用
    • 然后也排除对象,或者因为我倾向于在一次传递/构建中混淆主模块和库
    • @scottyab,您是否设法使用 gradle 完成了一次通过?如果是这样,你能分享一些技巧吗?我的每个模块都按顺序损坏,因此编译完全中断。
    • @biddster 您是否将它们放在同一个工作区/项目和每个库中作为一个模块?也许提出一个新问题?
    【解决方案2】:

    使用后问题解决

    consumerProguardFiles

    在库项目中。

    现在它可以跨模块工作而无需执行任何操作

    【讨论】:

    • 嘿,我也遇到了同样的问题,你能详细说明你是如何解决这个问题的吗?我尝试使用 consumerProguardFiles 但依赖模块创建了一个没有混淆的 aar。我需要将两个模块一起混淆,以便它们可以通信。
    • @Fashizel 嘿。如果你想混淆你的库,你需要使用 proguardFiles getDefaultProguardFile('proguard-android.txt'),但是如果你想将 proguard 规则附加到你的库,这将被使用你的库的应用程序识别,你需要consumerProguardFiles
    • 是的,但我最终将一个 aar(应用程序)混淆了,而图书馆 aar 则没有。我想要 2 个 aar 的混淆
    • 好的,那么 consumerProguardFiles 应该可以在当前未混淆的库中为您工作。尝试在您的 proguard 文件中添加详细信息,以检查一切是否正常,并检查您是否在正确的构建类型中使用了 consumerProguardFile
    • 嘿,所以我尝试跟踪 proguard 生成的所有文件,发现它混淆了库,甚至写了减少了多少类。并且输出位于exploded-aar 文件夹中,即使该库没有被混淆。谢谢你的帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2012-10-10
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多