在adt& sdk 20上使用proguard导出Android项目

时间:2012-06-07 15:01:46

标签: android obfuscation adt proguard

我已经更新到新的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和“extends”,所以我想知道:可以以某种方式引用项目中的文件而不是(并将“父”文件的内容放入文件中)?如果是这样,我该怎么做?

5 个答案:

答案 0 :(得分:3)

如果以前工作正常并且您还没有学过Proguard,只需更改此行:

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

到这一行:

 proguard.config=proguard.cfg

然后你将恢复旧的Proguard设置,我建议更新,除非你使用一些第三方罐子,它应该可以工作吗?这些是缺少的,你应该使用-keep标志来阻止Proguard在混淆时删除它们。

答案 1 :(得分:2)

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

所以我做的是:

  
      
  1. 转到eclipse的首选项
  2.   
  3. 搜索变量
  4.   
  5. 转到java->构建路径 - >类路径变量
  6.   
  7. 并添加了“sdk.dir”变量和目录的值   android sdk。
  8.   

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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

它发现$ {sdk.dir}很好,但是在项目目录中寻找proguard-project.txt。