android中的proguard.cfg与proguard.rules.pro区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android中的proguard.cfg与proguard.rules.pro区别相关的知识,希望对你有一定的参考价值。

请大师讲解一下,作用,都是用来混淆的吗?详细罗列一下,谢谢!

两个文件都用于混淆,防止反编译,用法一样。proguard.cfg 是用eclipse创建项目时生成的,而proguard.rules.pro 是android studio 创建项目时自动生成的。
Eclipse proguard.cfg混淆详解http://blog.csdn.net/u010156024/article/details/44243569
AS proguard.rules.pro混淆详解

http://www.jianshu.com/p/f3455ecaa56e
参考技术A AndroidStudio混淆打包apk://混淆,新版本ninifyEnabled再runpr

Android:使用 Ant Release 构建 apk 时出现问题

【中文标题】Android:使用 Ant Release 构建 apk 时出现问题【英文标题】:Android: Problems building apk with Ant Release 【发布时间】:2011-11-04 06:02:35 【问题描述】:

我在 Eclipse 中构建我的应用程序没有问题,但是一旦我尝试通过 ant 进行构建,它就无法构建。我用过“android更新项目-p”。生成 build build.xml 和 proguard.cfg 文件。我尝试了“ant compile”,它也构建得很好。该应用程序包含一个 android 库,如果需要,它还具有外部库。当我尝试执行“ant release”时,这里的任何人都会打印出错误,

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.util.ExceptionWithContext
    at com.android.dx.util.ExceptionWithContext.withContext(ExceptionWithContext.java:46)
    at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:340)
    at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:131)
    at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:85)
    at com.android.dx.command.dexer.Main.processClass(Main.java:369)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:346)
    at com.android.dx.command.dexer.Main.access$400(Main.java:59)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:294)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:134)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:108)
    at com.android.dx.command.dexer.Main.processOne(Main.java:313)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:233)
    at com.android.dx.command.dexer.Main.run(Main.java:185)
    at com.android.dx.command.dexer.Main.main(Main.java:166)
    at com.android.dx.command.Main.main(Main.java:90)
Caused by: java.lang.NullPointerException
    at com.android.dx.cf.code.ConcreteMethod.<init>(ConcreteMethod.java:84)
    at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:243)
    ... 23 more

我现在很困惑,所以希望有人能解释一下。

【问题讨论】:

在构建过程中发生这种情况的一些上下文会有所帮助。具体来说,在错误之前运行了哪些 ant 任务(如果有)。另外,你试过ant debug吗? ant 构建日志会有所帮助。 还有安装什么版本的android工具,以及项目的种类和大小的一些信息 您的 build.xml 文件是什么样的? (在你运行“android update project -p”之后。)如果你有外部依赖和库,这个文件并不总是自动正确生成。您还确定您在正确的上下文中运行此命令吗?您项目的***目录? 【参考方案1】:

仔细阅读此页面:

http://developer.android.com/tools/projects/projects-cmdline.html

您可以尝试以下解决方案之一:

1) 单行命令

android update project -p --subprojects

2) 更新主项目和库项目的build.xml文件:

android update lib-project --path myPath/Lib    
android update project --name android_app --path . --library myPath/Lib  

在 1) 或 2) 之后

ant clean
ant release

【讨论】:

【参考方案2】:

我认为我在this page 上的回答也适用于这个错误。 当您在死代码中初始化匿名类时会发生这种情况。

为什么它只会在发布而不是在调试中发生的一个解释是,在优化时会删除死代码。

【讨论】:

以上是关于android中的proguard.cfg与proguard.rules.pro区别的主要内容,如果未能解决你的问题,请参考以下文章

android里proguard.cfg文件有啥用?

Xamarin proguard.ParseException:文件“Properties/proguard.cfg”的第 1 行中的未知选项“”

proguard.cfg 文件丢失

Proguard.cfg 丢失

proguard.ParseException:proguard.cfg 中的未知选项“-encryptstrings”

Android:proguard 不会混淆源代码