【问题标题】:Proguard seems to have not effect / not to run when exporting Android app in Eclipse在 Eclipse 中导出 Android 应用程序时,Proguard 似乎没有效果/不运行
【发布时间】:2014-08-28 15:43:34
【问题描述】:

我即将发布一个 Android 应用,并希望使用 Proguard 来混淆代码。我按照Googles Proguard Guide 中的描述做了所有事情,但 Proguard 似乎没有运行:

这就是我所做的:

  1. 指南说,“项目根目录下会自动生成一个proguard.cfg 文件” 我的项目根目录中没有这样的文件,而是一个proguard-project.txt文件。我认为这是指南正在讨论的 confic 文件。
  2. 我没有更改proguard-project.txt文件。因此,Proguard 应该适用于所有类名等。
  3. 我编辑了project.properties 并取消了proguard.config=... 行的注释:

    proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

根据指南,这应该是配置 Proguard 所需的全部内容。运行 Proguard 所不需要的只是在 Release mode 中构建应用程序。

我不知道如何在 Release mode 中运行应用程序,但正如指南所说,这是在使用“文件/导出/导出 Android 应用程序”菜单构建应用程序时自动完成的。

所以,我导出了应用程序来创建 APK。 guid 说 Proguard 每次运行时都会在项目目录中创建几个文件和文件夹,例如dump.txtmapping.txt 等。但没有创建这些文件。此外,控制台或日志中没有输出。因此我假设 Proguard 没有运行。

是否有一种(简单的)方法来测试文件是否被混淆/Proguard 是否运行?为了让 Proguard 正常工作,我还需要做什么?

【问题讨论】:

  • 听起来你在做所有正确的事情。导出时,您是否使用自己的密钥? Eclipse 错误日志是否显示任何内容? .apk 文件是否实际导出?

标签: java android eclipse proguard


【解决方案1】:

我认为 proguard-project.txt 的默认版本什么都不做。可能是这样的:

# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html
#
# Add any project specific keep options here:
#
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

首先尝试在这个文件中添加一些东西来检查项目编译时间是否改变。例如:

-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 5
-allowaccessmodification
-dontpreverify
-renamesourcefileattribute SourceFile
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable,Signature
# Obfuscation
-repackageclasses ''
-flattenpackagehierarchy ''

您还可以检查运行 apktool decode YOUR_APK 是否已重命名您的类和方法

希望对你有帮助!

【讨论】:

  • 非常感谢!我认为通过指定proguard-project.txt 的路径来“激活”Proguard 就足以启用基本的混淆,但事实并非如此。如果没有在proguard-project.txt 中指定更多细节,Proguard 什么都不做。感谢您的提示:-)
【解决方案2】:

这个很简单,首先你在项目的根目录下创建一个文件名proguard.cfg 并定义规则,这是常用的规则:http://pastebin.com/N8GxdvAW 将此行添加到 project.properties

proguard.config=proguard.cfg

然后选择 Android Tool > Export sign application package,创建 key store 并查看结果。如果您使用任何特殊的库,如果 Eclipse 无法创建签名 apk,您需要定义自己的规则,请参阅 proguard 手册可能会有所帮助。

如果它可以创建签名的 apk,您可以在 proguard 文件夹中看到任何混淆类/常量的 mapping.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    相关资源
    最近更新 更多