4

私はプロガードを設定しようとしていますが、優先度順に並べ替えられたいくつかの問題に直面しています:

  • zip が重複しているという警告を受け取りましたが、修正できません。「libs」ディレクトリで外部ライブラリを使用し、2 つのライブラリ プロジェクト (1 つのライブラリ プロジェクトには 1 つの外部ライブラリがあり、プロジェクトに 1 回だけ追加されます) は、プロジェクトに 1 回だけ追加されます。外部jarを別のディレクトリ、つまり「lib」に移動しようとしました-一部のユーザーが解決できたため、名前を変更するだけですが、役に立ちません。別の方法は、一部のユーザーがこれらの警告を回避するのに役立つため、基本的な build.xml に custom_rules を実装しようとすることでした。しかし、それからのすべてが私を助けません。どうすれば修正できますか? ログ:

    ProGuard: Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [jackson-annotations-2.1.4.jar:META-INF/MANIFEST.MF])
    ProGuard: Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [android-support-v4.jar:META-INF/MANIFEST.MF])
    ProGuard: Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [google-analytics-v2.jar:META-INF/MANIFEST.MF])
    ProGuard: Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [jackson-core-2.1.4.jar:META-INF/MANIFEST.MF])
    ProGuard: Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [httpclientandroidlib-1.1.2.jar:META-INF/MANIFEST.MF])
    ProGuard: Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [deviceprint-lib-1.0.0.jar:META-INF/MANIFEST.MF])
    
  • 最後に、署名済み apk のビルド中の注意事項をいくつか示します。

    ProGuard: Note: com.google.analytics.tracking.android.AdHitIdGenerator: can't find dynamically referenced class com.google.ads.AdRequest
    ProGuard: Note: the configuration refers to the unknown class 'com.google.vending.licensing.ILicensingService'
    ProGuard: Note: the configuration refers to the unknown class 'com.android.vending.licensing.ILicensingService'
    

完全なプロガード ファイル:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose

# Otherwise return Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry
-dontwarn com.fasterxml.jackson.databind.**

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

# Preserve all fundamental application classes.
-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.view.View
-keep public class * extends android.preference.Preference
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider

# Preserve ActionBarSherlock and Android support libraries` classes and interfaces
-keep class android.support.** { *; }
-keep interface android.support.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }

# Preserve all Jackson library classes
-keep class com.fasterxml.jackson.** { *; }

# Original
-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);
}

-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}

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

-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}

-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

#To remove debug logs:
-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
}
4

2 に答える 2

5

ここ Stackoverflow で説明されている同様の問題があります。

Android Proguard 重複定義

ProGuard と Android アプリケーションの使用時にリソースを複製する

Android - Proguard 重複 zip エントリ エラー

あなたの場合、最初のものがあなたを助けることができると思います...

これで問題が解決しない場合は、この問題の原因を調べる必要があります。サードパーティのライブラリを使用してプレイストアにアプリをいくつか持っていて、プロガードに問題はありませんでした。サードパーティの lib と google の lvl ライセンスを使用したアプリの 1 つからの proguard.cfg 設定を次に示します。

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-dontwarn **CompatHoneycomb
-keep class android.support.v4.** { *; }
-dontwarn org.apache.**
-verbose
-dontoptimize
-dontshrink
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keepattributes *Annotation*
-dontwarn com.google.ads.**

まあ、それらすべてが必要なわけではありません。実装したものや使用するサードパーティのライブラリによって異なります。そのため、アプリの構造を確認できず、コードも取得できませんでした。これは範囲を超えています。1つずつテストすることをお勧めします。

于 2013-05-07T14:31:50.863 に答える
5

現在リストされている 6 つの警告と 3 つの注意事項は無害です。

Android SDK の最新バージョンを使用していることを確認してください。これにより、プロジェクト用に空の proguard-project.txt が作成されます。標準の Ant ビルドと Eclipse ビルドは、重要な構成を内部的に処理します (IDEA の Ant を使用していると思います)。Jackson や ActionBarSherlock の -keep オプションなど、アプリケーション固有のオプションを proguard-project.txt に追加することもできます。-injars/-libraryjars/-outjars などのオプションはビルド プロセスで指定されるため、追加しないでください。

于 2013-05-09T07:29:40.130 に答える