web-dev-qa-db-ja.com

proguard hell-参照されたクラスが見つかりません

だから、私は_しようとしているいくつかのソフトウェアをリリースしようとしているが、Proguardは私に頭痛を与えている。

Proguardを使用してエクスポートしようとすると、「参照されているクラスが見つかりません」などの警告が多く表示されます。

例えば:

[2011-08-07 17:44:37 - GAME] Warning: org.simpleframework.xml.stream.StreamReader: can't find referenced class javax.xml.stream.events.XMLEvent
[2011-08-07 17:44:37 - GAME] Warning: there were 52 unresolved references to classes or interfaces.
[2011-08-07 17:44:37 - GAME]          You may need to specify additional library jars (using '-libraryjars'),
[2011-08-07 17:44:37 - GAME]          or perhaps the '-dontskipnonpubliclibraryclasses' option.
[2011-08-07 17:44:37 - GAME] Java.io.IOException: Please correct the above warnings first.
[ 

警告はsimpleframeworkに関連しているように見えるので、私のproguard configファイルに次を追加しました:

-libraryjars pathtoprojecttolibs\simple-xml-2.4.jar

ここで、pathtoprojecttolibsは、私のプロジェクトによって参照されるjarへのパスです。

これは違いはありません。

Simpleframeworkがjavaxを参照する場合、これも無視するようにproguardに指示できますか?

何か案は?

122

コードのorg.simpleframework.xml.stream.StreamReaderjavax.xml.stream.events.XMLEventを指します。後者のクラスはJavaランタイム(rt.jar)の一部ですが、Androidランタイム(Android.jar)の一部ではないため、ProGuardは何かがある可能性があることを警告します壊れた。とにかくアプリケーションが機能することが確実な場合は、指定できます

-dontwarn javax.xml.stream.events.**

ProGuard地獄?

125
Eric Lafortune

私の場合、根本的な原因は here でした。これらの警告は単にスキップできます:

-dontwarn org.simpleframework.xml.stream.**

元の答えはこちら

このエラーは、使用するライブラリが実際には使用されていない他のライブラリに依存しているが、Proguardがそれらを探しているために発生します。
-dontwarn行をAndroidのproguard-rules.proファイルに追加します_この警告を無効にするプロジェクト。

enter image description here

エラーのスタックトレースでproguard-rules.proに追加する必要がある依存関係を見つけることができます。

5
Yuliia Ashomok

これをProguard構成に含める必要があります。

-dontskipnonpubliclibraryclasses
2
CrackerJack9

私の検索時間を解決した私の魔法の鍵:これをproguard-Android.txtに追加してください

-dontskipnonpubliclibraryclassmembers
2

うーん。その警告を読むと、使用しようとしているライブラリはjavax.xml.stream.eventsに依存しているように見えます。名前空間が実際にAndroidに含まれるとは思いません。 ( パッケージインデックス を参照)。

Proguardを使用せずにエミュレータに展開してみて、動作するかどうかを確認してください。その警告が正確であれば、私は推測しません。

0
alun

次の行をgradleスクリプトディレクトリのproguard-rules.proファイルに追加します。

-dontwarn package.class.name.**

ここで、package.class.nameは、jarファイルのクラス名が追加されたパッケージ名です。

例えば:

-dontwarn com.myexternalclass.utils.**
0
Pedro Marthon

私の場合、何も変更しておらず、警告が表示され始めました。問題は、壊れたgradleキャッシュにありました。私の他の answer を確認してください。問題を見つけるのに2時間かかったので、私はこれを共有します:]

0
AppiDevo

これはEdgeのケースだと思いますが、私の場合、Jenkinsプロガードのビルドフォルダーを完全に消去する必要がありました。

0
luckyhandler