9

EclipseワークスペースにAndroidLibraryProjectがあり、これを独自のツールボックスとして使用しています。偶然(1)、ライブラリのリソース(xmlアニメーション、xmlレイアウト、さらにはドローアブル!!!)が、ライブラリを使用しないプロジェクトのAPKにパックされていることを発見しました。

読んだ後Androidは常に未使用のリソースをパッケージ化しますか?、それは正常なのだろうか。どうすればこれを回避できますか?異なる図書館プロジェクトを持つ唯一の方法はありますか?

編集:.dexを逆コンパイルすると、未使用のコードもapkに含まれることがわかりました。

(1)アプリの新しいアイコンをテストしようとしました/res/drawable/icon.pngが、デフォルトのアイコンが表示され続けました。画像を削除しても、デフォルトのアイコンが表示され続けました。/res/drawable-mdpi/icon.pngそれは図書館からのものでなければなりませんでした。

4

3 に答える 3

3

新しいAndroidビルドシステムには、ビルドプロセスの最終ステップとして実行できるリソースストリッピングメカニズムが組み込まれています。lintが識別するリソースを削除することに加えてそれを使用してください。

リソースストリッピングメカニズムは、Proguard(ビルドシステムにもバンドルされている)と組み合わせて、プロジェクトでライブラリを使用している場合に特に便利です。アイデアは次のとおりです。

  • Proguardは、ライブラリからのものを含め、使用していないクラスを削除します。
  • 上記のプロセスでは、これらのライブラリに含まれているリソースへのコード参照を削除できます。
  • したがって、これらの参照されていないリソースは、それらを使用するコードがなくなったため、APKから削除できます。

lintが識別する未使用のリソースを削除すると、次のようになります。

  • ビルドをスピードアップ
  • プロジェクトのメンテナンス負担を軽減します。
于 2015-07-15T22:15:05.077 に答える
2

Proguardは未使用のコードを取り除くことができます。

ただし、未使用のリソースについては何も実行せず、コードも難読化されます。あなたはそれを使う前にそれにいくつかの考えを与えなければなりません。

于 2011-04-06T12:11:04.363 に答える
1

誰かが前に言ったように、Proguardは未使用のコードを取り除くことができます。

未使用のリソースを削除するには、ADT16からAndroidLintツールを使用できますこれは、未使用のリソースを削除するだけでなく、潜在的なバグを見つけるのにも役立ちます。この引用は公式サイトからのものです:

探すエラーの種類の例を次に示します。

  • 欠落している翻訳(および未使用の翻訳)
  • レイアウトパフォーマンスの問題(古いlayoutoptツールが検索に使用したすべての問題など)
  • 未使用のリソース
  • 一貫性のないアレイサイズ(アレイが複数の構成で定義されている場合)
  • アクセシビリティと国際化の問題(ハードコードされた文字列、contentDescriptionの欠落など)
  • アイコンの問題(密度の欠落、アイコンの重複、サイズの間違いなど)
  • 使いやすさの問題(テキストフィールドに入力タイプを指定しないなど)
  • マニフェストエラーなど。
于 2011-12-14T17:04:16.307 に答える