【问题标题】:How obfuscates android project using proguard in eclipse?如何在 Eclipse 中使用 proguard 混淆 android 项目?
【发布时间】:2013-09-26 08:04:08
【问题描述】:

如何使用 proguard 混淆 android 应用程序。当为 apk 导出应用程序时,我遇到以下问题。

问题

[2013-09-26 13:16:53 - Fishing_log] Proguard returned with error code 1. See console
[2013-09-26 13:16:53 - Fishing_log] proguard.ParseException: Value of system property 'init' is undefined in 'string/app_name { <init>' in line 2 of file 'C:\Users\owner\workspace8\Fishing_log\bin\proguard.txt',
[2013-09-26 13:16:53 - Fishing_log]   included from argument number 6
[2013-09-26 13:16:53 - Fishing_log]     at proguard.ConfigurationParser.replaceSystemProperties(ConfigurationParser.java:1153)
[2013-09-26 13:16:53 - Fishing_log]     at proguard.ConfigurationParser.file(ConfigurationParser.java:1113)
[2013-09-26 13:16:53 - Fishing_log]     at proguard.ConfigurationParser.parseIncludeArgument(ConfigurationParser.java:242)
[2013-09-26 13:16:53 - Fishing_log]     at proguard.ConfigurationParser.parse(ConfigurationParser.java:150)
[2013-09-26 13:16:53 - Fishing_log]     at proguard.ProGuard.main(ProGuard.java:476)

我如何解决这个问题?

我在 project.propertiesproguard-project.txt

中添加了以下代码

project.properties

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

proguard-project.txt

 -injars lib
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-dontnote
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-dontwarn sun.misc.Unsafe, java.lang.management.ManagementFactory, org.codehaus.jackson.JsonParser, org.json.JSONObject, org.codehaus.jackson.JsonGenerator, org.codehaus.jackson.JsonFactory, com.google.common.collect.MinMaxPriorityQueue
-keep public class * extends android.app.Application
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
   native <methods>;
}
 -keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}
 -keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
 -keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
#Keep the R
-keepclassmembers class **.R$* {
    public static <fields>;
}

【问题讨论】:

    标签: android proguard


    【解决方案1】:

    构建过程让工具aapt 写出一个配置文件proguard.txt,然后将其传递给ProGuard。但是,当前版本的 aapt 有一个错误——如果我没记错的话,它不处理类名引用字符串定义的 XML 文件(在res/values/strings.xml 中)。暂时,你应该避免这样的字符串定义。

    请注意,文件proguard-project.txt 本质上应该是空的,因为大部分配置已经在共享配置文件${sdk.dir}/tools/proguard/proguard-android.txt 中指定。构建过程还会自动为您指定所有-injars-outjars-libraryjars

    【讨论】:

    • 这个问题是由于 ACRA 造成的。首先 android:name="" 在 res/values/string.xml 中声明。我已更改为硬编码字符串并解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 2013-07-24
    • 2011-12-26
    • 2014-05-31
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多