2016-09-20 20 views
0

proguardを使用して実行可能なJARファイルを作成しようとしています。 Eclipseを使用してJARをエクスポートすると、すべて正常に動作し、すばらしいJARファイルがあります。マイProGuardの-project.txtとしてである私は、コマンドラインとコマンド実行可能なJARファイルでProguardを使用する

java -jar ${ANDROID_SDK}/lib/proguard.jar @proguard-project.txt 

を使用しますが、私が作成したJARを実行しようとすると、私は応答に

no main manifest attribute 

を取得obfusicateする

続く:

-injars  bin/classes 
-injars  libs 
-outjars  bin/classes_processed.jar 
-libraryjars proguard/android.jar 

-dontwarn java.** 
-keep class java.** 

-dontwarn javax.** 
-keep class javax.** 

-dontwarn android.** 
-keep class android.** 

-dontwarn com.sun.** 
-keep class com.sun.** 

-dontwarn java.awt.** 
-dontwarn java.beans.Beans 
-dontwarn javax.security.** 
-keep class javamail.** {*;} 
-keep class javax.mail.** {*;} 
-keep class javax.activation.** {*;} 
-keep class com.sun.mail.dsn.** {*;} 
-keep class com.sun.mail.handlers.** {*;} 
-keep class com.sun.mail.smtp.** {*;} 
-keep class com.sun.mail.util.** {*;} 
-keep class mailcap.** {*;} 
-keep class mimetypes.** {*;} 
-keep class myjava.awt.datatransfer.** {*;} 
-keep class org.apache.harmony.awt.** {*;} 
-keep class org.apache.harmony.misc.** {*;} 

-dontnote 


-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-keepattributes *Annotation* 

-keep public class com.app.main { 
    public static void main(java.lang.String[]); 
} 

-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.content.Context { 
    public void *(android.view.View); 
    public void *(android.view.MenuItem); 
} 

-keepclassmembers class * implements android.os.Parcelable { 
    static ** CREATOR; 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

-keepclassmembers class * { 
    @android.webkit.JavascriptInterface <methods>; 
} 

答えて

1

ProGuardはマニフェスト自体を生成しません。 あなたは手動で作成する必要があり、そしてあなたの構成でこのようにそれが含まれます:あなたはまた、難読化した場合

META-INF/Manifest.MF 

:リソース-dirは次のディレクトリ構造を使用してマニフェストを含める必要があります

-injars path/to/your/resources-dir 
-injars ... 

次の設定を追加する必要があります:

-adaptresourcefilecontents **.MF 
+0

こんにちは、私はこれを試しましたが、私はまだ同じ結果を得る。私はメインクラスを難読化していてもそれを難読化せずに試しましたが、別の結果が得られました。 manifest.mfファイルがわかりにくくなる前に マニフェスト - バージョン:1.0 クラスパス:。 メインクラス:com.app.main 私は難読化と私はJARを抽出し、それが今 マニフェスト・バージョンのように見えるMANIFEST.MFファイル開くためのWinRARを使用した後:1.0 初出-から:1.7.0_95( Oracle Corporation) –

+0

Ah私は、META-INFフォルダではなく、抽出JARのトップレベルでManifest.MFを見つけました。これは問題になる可能性がありますか? –

+0

はい、これはMETA-INFディレクトリになければなりません。それ以外の場合は有効なマニフェストとして認識されません。私はこれに言及するのを忘れてしまったので、代わりに-injars path/to/your/resourceディレクトリが必要です。これには、期待されるディレクトリ構造のMETA-INF/Manifest.MFファイルが含まれています。 –

関連する問題