使用 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?

使用 LibGDX 和 ProGuard 导出 Android APK 时出错

android应用程序中的proguard

使用带有 proguard 关闭力的 jsoup 关闭