23

ProGuard と Android の扱いに問題があります。

私は何時間も Web を検索し、Android アプリケーションを難読化する方法を複数見つけました。今のところ、私は最も簡単に見えるものを試しています。

  • config.cfgプロジェクトのルート ディレクトリにファイルを作成しました
  • 私は私の中に追加proguard.config=config.cfgしましたproject.properties
  • Eclipse エクスポート ウィザードを使用して、.apk ファイルをエクスポートおよび署名しました。

Proguard returned with error code 1. See consoleコンソールに次のようなメッセージが表示されました。

Proguard returned with error code 1. See console
Note: there were 3847 duplicate class definitions.
Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry
Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry
Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry
Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry
      You should check if you need to specify additional program jars.
Warning: there were 4 unresolved references to classes or interfaces.
         You may need to specify additional library jars (using '-libraryjars').
Error: Please correct the above warnings first.

Proguard の公式 Web サイトで提供されている構成、またはデフォルトの構成を使用しても、エラーが発生します。
これが私のカスタム設定です (myProject/config.cfg):

-injars      bin/classes
-injars      libs
-libraryjars "C:\Program Files\Android\android-sdk\platforms\android-13\android.jar"

-dontskipnonpubliclibraryclasses
-optimizationpasses 5
-printmapping map.txt
-flattenpackagehierarchy
-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*

-keep public class * extends android.app.Application
-keep public class * extends android.app.Activity
-keep public class * extends android.app.PreferenceActivity
-keep public class * extends android.view.View
-keep public class * extends android.widget.BaseAdapter
-keep public class * implements android.view.View.OnTouchListener

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}

-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 android.os.Parcelable$Creator CREATOR;
}

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

私はそれを働かせることができません...どんなアイデアでも大歓迎です!

注:libsプロジェクトのフォルダーに保存されているJackson JSONライブラリを使用します

4

3 に答える 3

35

1) ProGuard マニュアル > トラブルシューティング > 注: プログラム/ライブラリ クラスの重複定義

Android Ant/Eclipse ビルドでは、すでに -injars/-libraryjars が指定されています。構成でそれらを再度指定すると、ProGuard はそれらが重複していることを認識します。したがって、-injars/-libraryjars を指定しないでください。

2) ProGuard マニュアル > トラブルシューティング > 警告: 参照されているクラスが見つかりません

org.w3c.dom.bootstrap.DOMImplementationRegistry は入力コードに存在しませんが、com.fasterxml.jackson.databind.ext.DOMSerializer はそれを使用しています。アプリケーションがとにかく動作する場合は、次のようにして ProGuard に受け入れさせることができます。

-dontwarn org.w3c.dom.bootstrap.DOMImplementationRegistry
于 2012-06-28T17:18:29.173 に答える
5

ここで提供される ProGuard 構成ファイル:

https://groups.google.com/forum/#!msg/robospice/xGLRbGkLwQU/cAkaUQF34RsJ

私の問題を解決してください!

于 2013-04-16T12:43:09.763 に答える
1

同じ問題で立ち往生し、JRErt.jarファイルを参照して解決しました。

-libraryjars /lib/rt.jar

お役に立てば幸いです

于 2013-03-21T17:08:07.747 に答える