我现在正面临一个很奇怪的问题.
我有一个Gradle应用程序,有两个模块,一个主模块和一个库模块。
这是第一个问题:即使minifyEnabled在库中为false,它也会被混淆。它根本没有任何影响,似乎依赖于主模块的设置。我从一段时间以来就开始使用护卫了,我从来没有经历过这样的行为。
而且,这个图书馆的守卫规则似乎完全被忽视了。我在那里声明什么并不重要,它没有被使用,结果总是相同的(总是反编译来查看结果)。它与默认设置混淆。
我使用了一个无效的proguard文件名来查看文件是否被触摸,而且确实存在错误名称的错误,并且它还抱怨proguard文件中的语法错误……
我不知道它是否与Android的更新有关,因为它还建议我使用"minifyEnabled“而不是"runProguard”。
我怎样才能管理程序守卫使用程序规则。亲图书馆?
编辑:
我做了一个示例项目来澄清我的问题
我的库的前保护配置
我的图书馆的等级:
最后是我总是得到的结果。不重要的是,我将什么排除/包含在proguard配置中
正如您所看到的,proguard规则在主模块上运行得很好。它做它该做的。但它总是把我的图书馆弄得一团糟.
它还完全删除了图书馆的活动,这是不应该发生的
发布于 2014-11-21 01:26:06
通常不应在库项目中启用ProGuard。ProGuard在应用程序项目中共同处理应用程序和库,这是最有效的方法。
在库项目中,可以在ProGuard中指定任何特定于库的build.gradle配置,例如:
defaultConfig {
consumerProguardFiles 'proguard-rules.txt'
}
然后将该文件打包到库aar中作为proguard.txt
,并自动应用于应用程序项目中。
如果确实在库项目中启用了ProGuard (可能是因为要分发库),那么还必须添加处理库的适当配置。Android Gradle构建似乎不会自动完成这一任务。您可以:
android-sdk/tools/proguard/examples/library.pro
复制到库项目中的proguard-project.txt
。-injars
、-outjars
、-libraryjars
、-printmapping
。Gradle构建过程自动提供这些选项。为库项目和应用程序项目独立启用/禁用ProGuard对我来说很好。
发布于 2016-02-06 00:29:52
令人惊讶的是,埃里克的答案实际上也在为我工作!
当然,Eric知道他在说什么,但我一直在努力寻找一种干净的方法来自动在gradle中完成这个任务,但在我今天刚刚找到这篇文章之前已经一年多没有运气了。
我组合了其他几个SO线程,并提出了工作的w/这个解决方案,这也可以简化。步骤1-4是可选的,但到目前为止似乎还没有受到伤害。
/android-sdk/tools/proguard5.2
/android-sdk/tools/proguard
重命名为./android-sdk/tools/proguard4.7
ln -s .../android-sdk/tools/proguard5.2 .../android-sdk/tools/proguard
android-sdk/tools/proguard/examples/library.pro
复制到库项目文件夹并重命名为proguard-library.pro
proguard-library.pro
并注释掉-injars
、-outjars
、-libraryjars
和-printmapping
行。build.gradle
文件,包括:
defaultConfig { minifyEnabled minifyEnabled shrinkResources true proguardFiles‘pro卫士-library. true’consumerProguardFiles‘pro卫士-库-library.true’}
您可以对此进行调整,使其具有不同的发布和调试生成行为。proguard-library-consumer.pro
在此文件中包含任何您希望应用于库的#使用者的规则,当它保护自己时。-dontwarn junit.** -dontwarn org.junit.*使崩溃调用堆栈可调试。-keepnames类** { *;} -keepattributes SourceFile,LineNumberTable发布于 2016-12-06 07:14:20
唯一对我有用的是在我的库中定义这两个选项:
release {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
consumerProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
https://stackoverflow.com/questions/26983248
复制相似问题