使用 ProGuard 导出 Android 应用程序会出现 ParseException 错误
Posted
技术标签:
【中文标题】使用 ProGuard 导出 Android 应用程序会出现 ParseException 错误【英文标题】:Exporting Android application with ProGuard gives ParseException error 【发布时间】:2013-07-09 02:25:29 【问题描述】:使用 Proguard(通过 Eclipse 中的 ADT)导出 android 应用程序时出现以下错误。
"proguard.ParseException: 期望在 'name' 之前打开 '(' 或分隔符 ';'"
我看到升级Proguard和sdk解决了其他ProGuard解析错误问题;但是,在所有升级之后,这里没有运气。有人见过这个/解决过这个吗?提前感谢您的帮助!
环境
ADT 22.0.1
Eclipse SDK 4.2.2
Android SDK 4.2,SDK 工具第 22 版
Proguard v4.9
控制台日志
Proguard 返回错误代码 1。请参阅控制台 proguard.ParseException:期待打开'('或分隔符';'之前 文件“~/project/bin/proguard.txt”的第 155 行中的“名称”,包括 参数编号 4 在 proguard.ConfigurationParser.parseMemberSpecificationArguments(ConfigurationParser.java:966) 在 proguard.ConfigurationParser.parseClassSpecificationArguments(ConfigurationParser.java:729) 在 proguard.ConfigurationParser.parseKeepClassSpecificationArguments(ConfigurationParser.java:516) 在 proguard.ConfigurationParser.parse(ConfigurationParser.java:165) 在 proguard.ProGuard.main(ProGuard.java:476)
项目的第 55 行
-keepclassmembers class * * 方法名(...);
proguard.cfg
-优化通过 5 -dontusemixedcase类名 -dontskipnonpubliclibraryclasses -dontpreverify -详细 -优化 !code/simplification/arithmetic,!field/,!class/merging/
-assumenosideeffects class android.util.Log 公共静态布尔 isLoggable(java.lang.String, int); 公共静态 int v(...); 公共静态 int d(...);
-printmapping out.map
-renamesourcefile 属性 SourceFile -keepattributes SourceFile,LineNumberTable
-保持公共类 * 扩展 android.app.Activity -保持公共类 * 扩展 android.app.Application -keep public class * 扩展 android.app.Service -保持公共类 * 扩展 android.content.BroadcastReceiver -保持公共类 * 扩展 android.content.ContentProvider -保持公共类 * 扩展 android.app.backup.BackupAgentHelper -keep public class * 扩展 android.preference.Preference -保持公共类com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * 本国的 ;
-keepclasseswithmembernames class * 公共(android.content.Context,android.util.AttributeSet);
-keepclasseswithmembernames class * 公共(android.content.Context,android.util.AttributeSet,int);
-keepclassmembers 枚举 * 公共静态 *[] 值(); 公共静态 * valueOf(java.lang.String);
-keep class * 实现 android.os.Parcelable public static final android.os.Parcelable$Creator *;
-keepclassmembers 类 * 扩展 android.content.Context public void *(android.view.View);公共无效*(android.view.MenuItem);
-keepclassmembers 类 *.R$ 公共静态;
【问题讨论】:
您找到解决方案了吗? 【参考方案1】:我认为问题可能是:
-keepclasseswithmembernames class * native ;
你可以试试:
-keepclasseswithmembernames class *
native <methods>;
【讨论】:
以上是关于使用 ProGuard 导出 Android 应用程序会出现 ParseException 错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 android.support.v4.app 蜂窝兼容包导出签名应用时出现 Proguard 错误
Android - proguard 和 google play 服务的应用程序导出错误
导出已签名、混淆的 Android 应用程序时,如何在 Eclipse 中设置 ProGuard?