0

私はこれを解決する方法をこの辺りで探しましたが、私が見つけたものは何も役に立ちませんでした。解決策はここにあるのではないかと思いましたが、私は間違っていました。詳細を有効にするとコンソールに何も表示されないため、これを特定するのは困難です。プロガードを有効にして他のプロジェクトをエクスポートすることはできますが、この特定のプロジェクトはエクスポートできません。もともと、使用しているopencsv jarと関係があると思っていましたが、そのjarを削除し、コード内の参照を削除しても、エラーが発生しました。

プロガードなしでアプリをエクスポートすると機能し、アプリ自体は正常に動作します。

注:AlternateJavaBridgelibのものは、ほとんどのプロジェクトで使用したライブラリです。他のアプリでproguardを使用してapkをエクスポートすることに問題はありません(これがopencsv jarであった可能性がありますが、他のアプリで使用していない唯一の他のjarです)。

何かが足りない場合に備えて、proguard.cfgを次に示します。

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


-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
-keep public class au.com.bytecode.**
-keep public class java.beans.**

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

-keep class * implements java.io.Serializable {
    static final long serialVersionUID;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    public boolean equals(java.lang.Object);    
}


-dontwarn java.beans.**, android.support.v4.**, com.google.ads.**, android.provider.CalendarContract*, com.dropbox.client2.**,
android.view.Display, com.xiledsystems.AlternateJavaBridgelib.components.altbridge.FormFragment, android.widget.Switch, au.com.bytecode.opencsv.**

編集:プロガードが実際に機能しているようです。なんらかの理由でプロガードが実行された後、失敗しているようです。プロジェクト用に生成されたダンプ、マッピング、シード、および使用法のtxtファイルを取得します。

4

1 に答える 1

1

これはProGuardのバグである可能性があり、無効なコードが生成され、dxがあいまいなエラーを報告します。最新バージョンのProGuardを使用していることを確認してください。問題が解決しない場合は、 ProGuardサイトで報告するか、問題を再現できるプロジェクトをメールで送ってください。

(私は彼がProGuardの開発者です)

于 2012-11-10T09:07:34.553 に答える