Proguard 解析异常错误。如何解决
Posted
技术标签:
【中文标题】Proguard 解析异常错误。如何解决【英文标题】:Proguard Parse Exception Error. How to solve it 【发布时间】:2013-06-07 03:00:03 【问题描述】:我第一次尝试使用 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 行和第 193 行的 bin\proguard.txt 文件,错误来了
# 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 *;
【问题讨论】:
【参考方案1】:在我的情况下,我收到此错误是因为布局文件中的 onClick 属性为空。于是我删除了onClick=""
,错误就消失了
【讨论】:
WTF... 你是怎么找到的?谢谢! 正是这个。这个例外是如此可以理解。 提示:检查生成的日志文件,它会给你一个行号,告诉你哪个xml文件有这个问题。 我爱你,先生。【参考方案2】:在我的情况下,错误是由于布局文件中按钮上的空 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=""
。去掉它。
希望这会奏效。
【讨论】:
即使我也遇到过这个问题。【参考方案3】:错误发生在
-keepclassmembers class * *** (...);
替换为
-keepclassmembers class mypackage.** *;
如果你为setter/getter设置了这个配置,你需要修改为
-keep class mybeans.**
void set*(***);
void set*(int, ***);
boolean is*();
boolean is*(int);
*** get*();
*** get*(int);
Where : '***
' 通配符匹配任何类型(原始或非原始、数组或非数组)。带有“int”参数的方法匹配列表属性。
【讨论】:
在bin文件夹下,如何修改? 我说的是实际的文件更改。不在 bin 中的文件中。 你做错了......你不需要更换 Proguard。 Android SDK 有自己的 ProGuard,因此无需下载和使用另一个……所以恢复你所做的。然后你会找到一个文件android.pro
,里面有更多Android项目设置的细节。
你会得到proguard-project.txt
文件到你的项目中,你必须把你所有的设置写到那个文件中。
需要 15 个声望,还需要 2 个声望。一旦我得到它,我肯定会赞成它以上是关于Proguard 解析异常错误。如何解决的主要内容,如果未能解决你的问题,请参考以下文章
JNI在应用程序中检测到错误:JNI FindClass调用挂起异常java.lang.NoSuchMethodError:没有非静态方法“Lchirpconnect / SDK