Proguard で apk をエクスポートしようとすると、次のような多くのエラー (400 以上) が表示されます。
Warning: org.codehaus.jackson.jaxrs.JsonMappingExceptionMapper: can't find superclass or interface javax.ws.rs.ext.ExceptionMapper
と
org.codehaus.jackson.xc.DataHandlerJsonDeserializer$1: can't find superclass or interface javax.activation.DataSource
Jackson Json ライブラリを使用していますが、エラーはそれに関連しているようです。
このエラーを調査したところ、Proguards FAQから次のことがわかりました。
クラスまたはインターフェイスへの未解決の参照がある場合は、必須ライブラリを指定するのを忘れている可能性があります。適切に処理するには、Java ランタイム ライブラリを含め、コードで参照されるすべてのライブラリを指定する必要があります。ライブラリを指定するには、-libraryjars オプションを使用します。
SO を検索すると、これに関連する多くの未回答の質問が見つかりましたが、一般的な意味では、使用している jar ファイル (この場合は Jackon JSON) はより多くのライブラリに依存しており、それらを Proguard の構成ファイルに追加する必要があります。どうやって。
ただし、必要なjarファイルとその場所を特定する方法がわかりません。警告には、javax.ws.rs.ext、org.joda.time、org.codehaus.stax2、javax.xml.stream などのさまざまなパッケージが含まれています。
- これらのパッケージが含まれている jar ファイルを特定するにはどうすればよいですか? たとえば、javax.ws.rs.ext.** クラスにはどの jar が必要ですか?
- それらの jar がどこにあり、どのパスが Proguard の -libraryjars で使用されるかを知るにはどうすればよいですか?
どうもありがとう
編集: Android ライブラリ プロジェクトのセットアップ を使用していることにも言及する必要があります。jar はメインの Library プロジェクトにあり、実際の作業プロジェクトには、Library プロジェクトの jar を含むビルド パスがあります。それが違いを生むかどうかはわかりませんが、言及する必要があると思いました。
更新 テストのために、ビルドパスとコードからジャクソンを完全に削除したところ、Proguard が正常に完了しました。問題はまだ残っています...これらのエラーを処理するための正しいアプローチは何ですか?
Eclipse の Android エクスポート ウィザードは自動的に /lib/ jar を proguard に追加しますか、それとも次のように proguard 構成ファイルにすべて手動で追加する必要がありますか?
-libraryjars C:/Project/lib/somjar.jar
私はジャクソンのもののためにそれを試しましたが、違いはありませんでした. これは、警告に記載されているクラスに必要なすべての jar ファイルを見つけて追加する必要があるということですか? それらはsdkにありますか、それともJavaインストールにありますか?
これらがばかげた質問である場合は申し訳ありませんが、私はこの数時間これを理解しようとしてきましたが、どうすればよいかわかりません.
再度、感謝します
再更新
ベンジャミンの提案と組み合わせてさらに検索すると、欠落しているクラスのいくつかが、jdk の lib フォルダーにある rt.jar にあることがわかりました。だから私は最終的に追加しました
-libraryjars <java.home>/lib/rt.jar
proguard.cfg ファイルに移動し、警告を 485 から 204 に下げました。それは何かだと思います...残りの警告は、まったく見つからないクラスについて説明しています。アプリはプロガードを実行しなくても問題なく動作するため、これらのクラスは正しい場所にあるはずです。それとも、これらの警告と一緒に使用-dontwarnする必要がありますか?
残りのクラスは次のパッケージに含まれています。
org.joda.time.
org.codehaus.stax2.
javax.ws.rs.
だから今、私は理解する方法が必要です:
- これらのクラスを持つ jar ファイル
- これらのjarはどこにあるので、proguard構成ファイルに含めることができます