2013-09-26 48 views
0

如何使用proguard混淆android应用程序。当导出apk的应用程序时出现以下问题。在eclipse中如何使用proguard混淆android项目?

问题

[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>; 
} 

回答

0

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

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

+0

此问题由于ACRA.First android:name =“”在res/values/string.xml中声明而创建。我已更改为硬编码字符串并解决此问题。 – mukesh