6

Androidアプリケーションを難読化しようとしていますが、次のエラーが発生します。

[2012-04-15 19:55:51 - TmtAndroid] Proguard returned with error code 1. See console
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ClassPathElement: can't find referenced method 'org.apache.tools.ant.Project getProject()' in class proguard.ant.ClassPathElement
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ClassPathElement: can't find referenced method 'boolean isReference()' in class proguard.ant.ClassPathElement
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ClassPathElement: can't find referenced method 'java.lang.Object getCheckedRef(java.lang.Class,java.lang.String)' in class proguard.ant.ClassPathElement
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ClassPathElement: can't find referenced method 'java.lang.String[] list()' in class proguard.ant.ClassPathElement
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ClassPathElement: can't find referenced method 'void setLocation(java.io.File)' in class proguard.ant.ClassPathElement
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ClassSpecificationElement: can't find referenced method 'boolean isReference()' in class proguard.ant.ClassSpecificationElement
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ClassSpecificationElement: can't find referenced method 'java.lang.Object getCheckedRef(java.lang.Class,java.lang.String)' in class proguard.ant.ClassSpecificationElement
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ConfigurationElement: can't find referenced method 'boolean isReference()' in class proguard.ant.ConfigurationElement
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ConfigurationElement: can't find referenced method 'java.lang.Object getCheckedRef(java.lang.Class,java.lang.String)' in class proguard.ant.ConfigurationElement
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ConfigurationTask: can't find referenced method 'org.apache.tools.ant.Project getProject()' in class proguard.ant.ConfigurationTask
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.FilterElement: can't find referenced method 'boolean isReference()' in class proguard.ant.FilterElement
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.FilterElement: can't find referenced method 'java.lang.Object getCheckedRef(java.lang.Class,java.lang.String)' in class proguard.ant.FilterElement
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.KeepSpecificationElement: can't find referenced method 'boolean isReference()' in class proguard.ant.KeepSpecificationElement
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.KeepSpecificationElement: can't find referenced method 'java.lang.Object getCheckedRef(java.lang.Class,java.lang.String)' in class proguard.ant.KeepSpecificationElement
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.MemberSpecificationElement: can't find referenced method 'boolean isReference()' in class proguard.ant.MemberSpecificationElement
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.MemberSpecificationElement: can't find referenced method 'java.lang.Object getCheckedRef(java.lang.Class,java.lang.String)' in class proguard.ant.MemberSpecificationElement
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ProGuardTask: can't find referenced method 'org.apache.tools.ant.Project getProject()' in class proguard.ant.ProGuardTask
[2012-04-15 19:55:51 - TmtAndroid]       You should check if you need to specify additional program jars.
[2012-04-15 19:55:51 - TmtAndroid] Warning: there were 17 unresolved references to program class members.
[2012-04-15 19:55:51 - TmtAndroid]          Your input classes appear to be inconsistent.
[2012-04-15 19:55:51 - TmtAndroid]          You may need to recompile them and try again.
[2012-04-15 19:55:51 - TmtAndroid]          Alternatively, you may have to specify the option 
[2012-04-15 19:55:51 - TmtAndroid]          '-dontskipnonpubliclibraryclassmembers'.
[2012-04-15 19:55:51 - TmtAndroid] java.io.IOException: Please correct the above warnings first.
[2012-04-15 19:55:51 - TmtAndroid]  at proguard.Initializer.execute(Initializer.java:321)
[2012-04-15 19:55:51 - TmtAndroid]  at proguard.ProGuard.initialize(ProGuard.java:211)
[2012-04-15 19:55:51 - TmtAndroid]  at proguard.ProGuard.execute(ProGuard.java:86)
[2012-04-15 19:55:51 - TmtAndroid]  at proguard.ProGuard.main(ProGuard.java:492)

追加すると

-dontwarn proguard.ant.**

proguard.cfgにapkがエクスポートされますが、電話にインストールした後、クラッシュするため、この場合の解決策ではありません...

これらの警告を解決するにはどうすればよいですか?それはプロガードとの私の最初の相互作用です...

ありがとう

4

1 に答える 1

1

Proguardを使用するときの私の一般的なアプローチは、すべてがオンになっている非常に小さな.proファイルから始めて、結果の jar が正しく実行されるまで、さまざまな難読化/最適化/縮小オプションをオフにすることです。

したがって、Proguard の例のページを実行して、提案されているさまざまなオプションを試す-keepことdontXXXをお勧めします。

また、アプリケーション (または Android フレームワーク) は、ネイティブ メソッドシリアライゼーションリフレクションコールバック メソッドアノテーションなどを利用していますか? サンプル ドキュメントには、 Proguard のバイトコード操作によってこれらの機能が損なわれないようにするために、 Proguardに渡す必要がある設定が記載されています。

たとえば、私は Android プラットフォームにあまり詳しくありませんが、定義した Java クラスをロード/使用する方法を指示する何らかのタイプの XML フレームワークを使用していると思います。その場合、Proguard でクラスまたはパッケージ名を難読化すると、XML フレームワークはそれらのクラスを見つけることができなくなります。

于 2012-04-15T20:25:06.487 に答える