2013-08-26 20 views
5

履歴/コンテキスト 私は[1]サイズが本当に重要な場所にあります - 最近私は共有ライブラリ[2]に移動し、proguardは注意を払い、私は構成を持っていたので、サイズを大幅に減らしていましたが、libを使って私は魔法の100kbのマークを調べました。私は確かに使用していないクラスは結果のdexファイルにあります。シングル・チャートへ) - eg私はスクエアビューをdexで見ていますが、私は決してアプリケーションで使用していません。Android用proguardで未使用のクラスを削除する

質問 は、驚くべきことに、私は、ProGuardのドキュメント以下で見つかった:

The library jars themselves always remain unchanged. 

私は何とかそれらを処理する(中)/トリックProGuardのを伝えることはできますか?私は..私はより多くのものはアプリケーション自体よりもlibに取り外しことを期待し、特にので、これは本当に奇妙見つける

[1] https://github.com/ligi/FAST [2]私はあなたが-injarsを使用する必要が信じているhttps://github.com/ligi/AndroidHelper

答えて

8

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

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

したがって、すべて自動的に機能するはずです。コンフィグレーションproguard-project.txt-keep class org.mylibrary.** { *; }のような行が含まれている場合、処理されたAPKの元の名前を持つライブラリ全体が引き続き表示されることがあります。そのような構成は、典型的には、反射を説明するための控えめな解決策である。いくつかの研究と実験では、設定を改善してより良い結果を得ることができます。 -whyareyoukeepingというオプションを使用して、クラスが保持されている理由を理解することができます。

3

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

出典:http://proguard.sourceforge.net/index.html#manual/usage.html

+0

ありがとうございます - これは私が受け入れる理由 - 私は今ここにこだわっているが、まだテストすることができませんでしたhttp://stackoverflow.com/questions/18460982/how-to-specify-injars-for-proguard-within -android-gradle-build-files-for-librari – ligi

関連する問題