首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >保护程序忽略库的配置文件。

保护程序忽略库的配置文件。
EN

Stack Overflow用户
提问于 2014-11-17 22:33:33
回答 4查看 21.5K关注 0票数 33

我现在正面临一个很奇怪的问题.

我有一个Gradle应用程序,有两个模块,一个主模块和一个库模块。

  • 在这两个模块中,我都声明了一个pro卫士规则,path文件路径是正确的
  • 在两个.gradle文件中,我都有minifyEnabled true

这是第一个问题:即使minifyEnabled在库中为false,它也会被混淆。它根本没有任何影响,似乎依赖于主模块的设置。我从一段时间以来就开始使用护卫了,我从来没有经历过这样的行为。

而且,这个图书馆的守卫规则似乎完全被忽视了。我在那里声明什么并不重要,它没有被使用,结果总是相同的(总是反编译来查看结果)。它与默认设置混淆。

我使用了一个无效的proguard文件名来查看文件是否被触摸,而且确实存在错误名称的错误,并且它还抱怨proguard文件中的语法错误……

我不知道它是否与Android的更新有关,因为它还建议我使用"minifyEnabled“而不是"runProguard”。

我怎样才能管理程序守卫使用程序规则。亲图书馆?

编辑:

我做了一个示例项目来澄清我的问题

我的库的前保护配置

我的图书馆的等级:

最后是我总是得到的结果。不重要的是,我将什么排除/包含在proguard配置中

正如您所看到的,proguard规则在主模块上运行得很好。它做它该做的。但它总是把我的图书馆弄得一团糟.

它还完全删除了图书馆的活动,这是不应该发生的

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-11-21 01:26:06

通常不应在库项目中启用ProGuard。ProGuard在应用程序项目中共同处理应用程序和库,这是最有效的方法。

在库项目中,可以在ProGuard中指定任何特定于库的build.gradle配置,例如:

代码语言:javascript
代码运行次数:0
运行
复制
defaultConfig {
    consumerProguardFiles 'proguard-rules.txt'
}

然后将该文件打包到库aar中作为proguard.txt,并自动应用于应用程序项目中。

如果确实在库项目中启用了ProGuard (可能是因为要分发库),那么还必须添加处理库的适当配置。Android Gradle构建似乎不会自动完成这一任务。您可以:

  1. android-sdk/tools/proguard/examples/library.pro复制到库项目中的proguard-project.txt
  2. 从文件中删除示例输入/输出行-injars-outjars-libraryjars-printmapping。Gradle构建过程自动提供这些选项。
  3. 引用库项目的build.gradle中的配置。

为库项目和应用程序项目独立启用/禁用ProGuard对我来说很好。

票数 92
EN

Stack Overflow用户

发布于 2016-02-06 00:29:52

令人惊讶的是,埃里克的答案实际上也在为我工作!

当然,Eric知道他在说什么,但我一直在努力寻找一种干净的方法来自动在gradle中完成这个任务,但在我今天刚刚找到这篇文章之前已经一年多没有运气了。

我组合了其他几个SO线程,并提出了工作的w/这个解决方案,这也可以简化。步骤1-4是可选的,但到目前为止似乎还没有受到伤害。

  1. http://sourceforge.net/projects/proguard/files/proguard/5.2/下载ProStere5.2
  2. 解压缩到./android-sdk/tools/proguard5.2
  3. 将./android-sdk/tools/proguard重命名为./android-sdk/tools/proguard4.7
  4. ln -s .../android-sdk/tools/proguard5.2 .../android-sdk/tools/proguard
  5. android-sdk/tools/proguard/examples/library.pro复制到库项目文件夹并重命名为proguard-library.pro
  6. 编辑proguard-library.pro并注释掉-injars-outjars-libraryjars-printmapping行。
  7. 编辑库的build.gradle文件,包括: defaultConfig { minifyEnabled minifyEnabled shrinkResources true proguardFiles‘pro卫士-library. true’consumerProguardFiles‘pro卫士-库-library.true’} 您可以对此进行调整,使其具有不同的发布和调试生成行为。
  8. proguard-library-consumer.pro在此文件中包含任何您希望应用于库的#使用者的规则,当它保护自己时。-dontwarn junit.** -dontwarn org.junit.*使崩溃调用堆栈可调试。-keepnames类** { *;} -keepattributes SourceFile,LineNumberTable
票数 9
EN

Stack Overflow用户

发布于 2016-12-06 07:14:20

唯一对我有用的是在我的库中定义这两个选项:

代码语言:javascript
代码运行次数:0
运行
复制
release {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
consumerProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26983248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档