6

履歴/コンテキスト サイズが本当に重要なプロジェクト[1]があります-最近、共有ライブラリ[2]に物を移動しましたが、サイズを大幅に削減する構成があったため、proguardが未使用のクラスを処理して削除すると考えましたが、ライブラリを使用して、魔法の100kbマークを超えたので調査しました。確かに使用しないクラスは、結果のdexファイルにあり、フルネームでも(単一文字に短縮されていません)-たとえば、私はアプリで決して使用しないdex.

質問 驚くべきことに、プロガードのドキュメントで次のことがわかりました。

The library jars themselves always remain unchanged. 

どういうわけかプロガードにそれらを処理するように伝える/だますことはできますか? 特に、アプリ自体よりもライブラリでより多くのものを削除できると予想しているため、これは本当に奇妙だと思います..

[1] https://github.com/ligi/FAST [2] https://github.com/ligi/AndroidHelper

4

2 に答える 2

8

Android SDK の Eclipse/Ant/Gradle ビルド プロセスは、コード (からbin/classes) とそのライブラリ (からlibs) をオプションで自動的に指定します-injars。これは、完全なアプリケーションが圧縮、最適化、および難読化されていることを意味します (リリース ビルドでは、ProGuard が有効であると仮定します)。

ビルド プロセスはandroid.jar、オプションでAndroid ランタイムのみを指定します-libraryjars。コードを処理する必要がありますが、デバイスに既に存在するため、処理された apk に含まれるべきではありません。

したがって、すべてが自動的に機能するはずです。構成proguard-project.txt-keep class org.mylibrary.** { *; }. このような構成は通常、リフレクションを考慮した保守的なソリューションです。いくつかの調査と実験により、多くの場合、構成を改良してより良い結果を得ることができます。オプションでクラスが保持されている理由を理解できます-whyareyoukeeping

于 2013-08-27T15:19:15.253 に答える
3

使用する必要があると思います-injars

-injars class_path 処理するアプリケーションの入力 jar (または wars、ears、zip、またはディレクトリ) を指定します。これらの jar 内のクラス ファイルが処理され、出力 jar に書き込まれます。デフォルトでは、非クラス ファイルは変更なしでコピーされます。ディレクトリから直接入力ファイルを読み取る場合は特に、一時ファイル (IDE によって作成されたものなど) に注意してください。フィルター セクションで説明されているように、クラス パス内のエントリをフィルター処理できます。読みやすくするために、複数の -injars オプションを使用してクラスパス エントリを指定できます。

ソース: http://proguard.sourceforge.net/index.html#manual/usage.html

于 2013-08-27T01:54:56.313 に答える