Proguard Parse异常错误。如何解决它

时间:2013-06-11 09:44:30

标签: android eclipse proguard

我第一次尝试使用Proguard 4.9导出我的应用程序。但是在导出时我在控制台中遇到了奇怪的错误。这是 -

[2013-06-11 14:59:42 - Project1] Proguard returned with error code 1. See console
[2013-06-11 14:59:42 - Project1] proguard.ParseException: Expecting type and name instead of just '***' before '(' in line 193 of file 'D:\Project Works\Android\Project1\bin\proguard.txt',
[2013-06-11 14:59:42 - Project1]   included from argument number 4
[2013-06-11 14:59:42 - Project1]    at proguard.ConfigurationParser.parseMemberSpecificationArguments(ConfigurationParser.java:889)
[2013-06-11 14:59:42 - Project1]    at proguard.ConfigurationParser.parseClassSpecificationArguments(ConfigurationParser.java:729)
[2013-06-11 14:59:42 - Project1]    at proguard.ConfigurationParser.parseKeepClassSpecificationArguments(ConfigurationParser.java:516)
[2013-06-11 14:59:42 - Project1]    at proguard.ConfigurationParser.parse(ConfigurationParser.java:165)
[2013-06-11 14:59:42 - Project1]    at proguard.ProGuard.main(ProGuard.java:476)

这是第192行和第192行的bin \ proguard.txt文件。 193,错误来临

# onClick res/layout/tmenu.xml #generated:77
-keepclassmembers class * { *** (...); }

在project.properties中我正在使用

target=android-7
proguard.config=proguard.cfg

我是Android SDK,eclipse的插件更新到最新版本。知道怎么解决它吗?

修改 这是我项目中的proguard.cfg

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

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

3 个答案:

答案 0 :(得分:20)

在我的情况下,由于布局文件中的onClick属性为空,我收到此错误。所以我删除了onClick="",错误消失了

答案 1 :(得分:10)

在我的情况下,错误是由布局文件中的按钮上的空onClick属性引起的。所以我删除了onClick="",错误消失了。

要找到导致此错误的正确布局文件,请转到相应的文件,并找到导致此问题的布局文件。 该文件正好位于错误消息中指示的行上方或一行上,如

In line 193 of file 'D:\Project Works\Android\Project1\bin\proguard.txt' or  in line 114 of file 'C:..app\build\intermediates\proguard-rules\debug\aapt_rules.txt' .

浏览布局文件,在任意视图中找到onClick=""。去掉它。 希望这会奏效。

答案 2 :(得分:4)

错误发生在

-keepclassmembers class * { *** (...); }

替换为

-keepclassmembers class mypackage.** { *; }

如果您为setters / getters设置此配置,则需要修改为

-keep class mybeans.** {
    void set*(***);
    void set*(int, ***);

    boolean is*(); 
    boolean is*(int);

    *** get*();
    *** get*(int);
}

其中:'***'通配符匹配任何类型(原始或非原始,数组或非数组)。带有'int'参数的方法匹配列表属性。