だから、私は_しようとしているいくつかのソフトウェアをリリースしようとしているが、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に指示できますか?
何か案は?
コードのorg.simpleframework.xml.stream.StreamReader
はjavax.xml.stream.events.XMLEvent
を指します。後者のクラスはJavaランタイム(rt.jar
)の一部ですが、Androidランタイム(Android.jar
)の一部ではないため、ProGuardは何かがある可能性があることを警告します壊れた。とにかくアプリケーションが機能することが確実な場合は、指定できます
-dontwarn javax.xml.stream.events.**
ProGuard地獄?
これをProguard構成に含める必要があります。
-dontskipnonpubliclibraryclasses
私の検索時間を解決した私の魔法の鍵:これをproguard-Android.txtに追加してください
-dontskipnonpubliclibraryclassmembers
うーん。その警告を読むと、使用しようとしているライブラリはjavax.xml.stream.eventsに依存しているように見えます。名前空間が実際にAndroidに含まれるとは思いません。 ( パッケージインデックス を参照)。
Proguardを使用せずにエミュレータに展開してみて、動作するかどうかを確認してください。その警告が正確であれば、私は推測しません。
次の行をgradleスクリプトディレクトリのproguard-rules.pro
ファイルに追加します。
-dontwarn package.class.name.**
ここで、package.class.name
は、jarファイルのクラス名が追加されたパッケージ名です。
例えば:
-dontwarn com.myexternalclass.utils.**
私の場合、何も変更しておらず、警告が表示され始めました。問題は、壊れたgradleキャッシュにありました。私の他の answer を確認してください。問題を見つけるのに2時間かかったので、私はこれを共有します:]
これはEdgeのケースだと思いますが、私の場合、Jenkinsプロガードのビルドフォルダーを完全に消去する必要がありました。