【问题标题】:Is proguard.cfg needed for library projects?图书馆项目需要 proguard.cfg 吗?
【发布时间】:2012-06-14 11:46:02
【问题描述】:

假设我需要对应用程序项目和它所依赖的库项目应用相同的规则,我是否需要将 proguard.cfg 的内容从应用程序复制到库项目?

换句话说,应用程序的 proguard.cfg 是否“接管”了它所依赖的所有库项目,还是我必须为每个库项目明确指定规则?

【问题讨论】:

    标签: android proguard android-library


    【解决方案1】:

    库项目本身不运行 ProGuard,因此它们不使用任何配置。

    应用程序项目混淆了整个代码库,包括任何引用的库,因此它们需要对应用程序代码和库代码进行适当的配置。

    【讨论】:

    • 哇!没有比 Proguard 的开发者更权威的了。接受 + 1。
    • 如果你想交付一个 SDK 供第三方使用,并且你想使用 proguard 进行混淆怎么办?从答案中我了解到,proguard 并非旨在混淆库项目。但这在技术上是不可能的吗?除了外部接口之外,您不能混淆库吗?
    • @Eric Lafortune 仍然是这种情况,因为似乎我可以配置我的 Android 库模块以运行 proguard,并且我在库模块的构建文件夹中获得了 usages.txt 和 mappings.txt。但是我将库的 proguard 配置也复制到主应用程序模块似乎仍然很重要,所以它是否运行 proguard 两次?
    • 请根据 Proguard 的最新更改更新您的答案。我觉得有办法!
    • 当您通过 Command-Click 浏览它们的实现时,许多 Google 的 API(我知道的 Google 地图、我相信的分析,也许还有许多其他)都被混淆了。 (例如:“类 SupportMapFragment { private final SupportMapFragment.zzb zzaJA = new SupportMapFragment.zzb(this); ... }”)。第三方如何以类似的方式混淆他们的独立库,从而更难进行逆向工程?我怀疑它需要一个自定义脚本来直接打开 aar,保护 Java 类,然后重新打包 aar。谁能分享这个脚本?
    【解决方案2】:

    答案似乎是“否”:Proguard 将混淆代码from the libraries too

    但那是在 2010 年,我们非常清楚规范在不断变化,尤其是在 Android 开发工具方面。所以如果有更权威的答案出现,我会接受的。

    【讨论】:

      【解决方案3】:
      1. 在库项目的build.gradle中,在buildTypes中添加行:consumerProguardFiles 'proguard-rules.pro'为:

        buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            consumerProguardFiles 'proguard-rules.pro'
        }
        

        }

      2. 在根项目的build.gradle 中,启用minifyEnabled。 libraray proguard 将起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-09
        • 2016-12-08
        • 1970-01-01
        相关资源
        最近更新 更多