【问题标题】:Exporting an Android project while using proguard on adt&sdk 20在 adt&sdk 20 上使用 proguard 时导出 Android 项目
【发布时间】:2012-06-07 15:01:46
【问题描述】:

我已更新到新的adt&sdk 20,但在 Eclipse 上使用 Proguard 的新方式时遇到了问题。我根本不是 Proguard 的专业人士,但我一直在使用它,而且它很容易工作。我只是编辑了“project.properties”文件并在其中添加了“proguard.config=proguard.cfg”,它就可以工作了。

遗憾的是,进行了一些更改,我无法找到有关如何使用它们的任何信息。讲 Proguard 的官网(在 Android 网站上)还是讲旧的方式。

他们在“project.properties”上写了取消注释下一行:

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

这不起作用,它在尝试导出时给我这些错误:

Proguard returned with error code 1. See console
java.io.IOException: The output jar is empty. Did you specify the proper '-keep' options?
at proguard.shrink.Shrinker.execute(Shrinker.java:159)
at proguard.ProGuard.shrink(ProGuard.java:275)
at proguard.ProGuard.execute(ProGuard.java:101)
at proguard.ProGuard.main(ProGuard.java:492)

谁能帮我解决这个问题?我以前从未更改过 proguard.cfg 文件,而且一切都是自动的。我不得不做这样的事情是非常罕见的。

他们还添加了一个文件“proguard-project.txt”,它可能会替换 sdk 文件夹文件中的 proguard.cfg 和“扩展”,所以我想知道:是否可以以某种方式引用项目中的文件而不是(并将“父”文件的内容放入文件中)?如果是这样,我该怎么做?

【问题讨论】:

    标签: android obfuscation adt proguard


    【解决方案1】:

    如果之前运行良好,而您还没有学习 Proguard,只需更改此行:

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

    到这一行:

     proguard.config=proguard.cfg
    

    那么您将恢复旧的 Proguard 设置,不过我建议您进行更新,除非您使用一些 3rd 方 jar,否则它应该可以正常工作?这些就是它所说的缺失,你应该使用 -keep 标志来阻止 Proguard 在混淆时删除它们。

    【讨论】:

    • 不,他们使用 proguard 的新方法即使使用全新的 android 项目 (hello world) 也不起作用。奇怪,现在在 windows 上它工作得很好,而在 linux 上却没有。我需要再次检查一下。
    • 我已经在全新的 linux 安装上对其进行了测试,它运行良好,但在原始 linux 操作系统上我仍然遇到这些错误。你能告诉我有什么问题吗?
    • 我也试过你的解决方案,它说一些奇怪的东西:“invlid proguard configuration file path .../proguard.cfg does not exist or is not a regular file”
    【解决方案2】:

    好的,解决方案是由于某种原因,我在 eclipse 上为 sdk.dir 变量设置了错误的位置。

    所以我所做的是:

    1. 转到 eclipse 的首选项
    2. 已搜索变量
    3. 然后去java->build path->classpath variables
    4. 并添加了带有目录值的“sdk.dir”变量 安卓开发工具包。

    【讨论】:

      【解决方案3】:

      在您的项目根文件夹中创建一个文件 proguard.cfg 并将您的 adt 更新为 21 并使用 proguard v4.8 或 4.9,不要忘记在导出 APK 之前运行 Android Lint

      【讨论】:

      • 那是很久以前的事了,我什至不记得问题了,我已经回答了。但是,也许您的回答会对其他人有所帮助,所以谢谢。
      【解决方案4】:

      默认配置文件路径已更改为

      ${sdk.dir}/tools/proguard/proguard-android-optimize.txt

      【讨论】:

      • 不是问题的答案(已经得到答案),但很高兴知道,所以谢谢。
      • 那么我该如何告诉 Proguard 更名的事情呢?
      • 在我项目的 project.properties 中找到它。
      【解决方案5】:

      使用 SDK 22,我的解决方案是将 proguard-project.txt 从 ${sdk.dir}/tools/proguard/ 复制到我的项目工作区中。

      如果您查看 project.properties,您会发现它引用了 ${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

      它找到 ${sdk.dir} 就好了,但是在项目目录中寻找 proguard-project.txt。

      【讨论】:

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