7

初めて 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 *;
}
4

3 に答える 3

20

私の場合、レイアウト ファイルの onClick 属性が空のため、このエラーが発生していました。だから私は削除しましonClick=""た、そしてエラーはなくなりました

于 2014-10-12T05:42:28.453 に答える
11

私の場合、エラーはレイアウト ファイルのボタンの空の onClick 属性が原因でした。だから私は削除onClick=""し、エラーはなくなりました。

このエラーの原因となっている正しいレイアウト ファイルを見つけるには、対応するファイルに移動し、この問題の原因となっているレイアウト ファイルを見つけます。ファイルは、次のようなエラーメッセージに示されている行またはその1行上にあります

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=""、任意のビューで を見つけます。それを除く。
うまくいけば、これはうまくいくでしょう。

于 2016-12-12T05:45:34.133 に答える
6

エラーは

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

と置換する

-keepclassmembers class mypackage.** { *; }

セッター/ゲッター用にこの構成を設定する場合は、次のように変更する必要があります

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

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

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

場所 : ' ***' ワイルドカードは、任意のタイプ (プリミティブまたは非プリミティブ、配列または非配列) に一致します。'int' 引数を持つメソッドは、リストであるプロパティと一致します。

于 2013-06-11T09:49:32.903 に答える