Androidプロジェクトからすべての未使用のリソースを削除する


386

Android resディレクトリから未使用のレイアウト、文字列、ドローアブル、色などをすべて削除したい。ファイルのリストを提供するツールはありますか?リポジトリから削除したり、使用されなくなった特定のファイル(たとえば、未使用の文字列エントリ)内の要素を削除したりできますか?

回答:


734

Android Studioから未使用のリソースを簡単に検索できます。CtrlAltShifti未使用のリソース」(引用符なし)を押して入力するだけです。それはlintを実行します。lintコマンド(およびその他のIDEからのもの)を実行する超簡単な方法。

または

Android Studioのメニュー > リファクタリング > 未使用のリソースを削除...

削除するリソースを選択します。リソースアイテムを右クリックすると、保持するリソースを除外できます。

Do Refactorを使用て、すべてのリソースを一度に削除します。

更新:OptionShifti Macでの使用


55
cmd + Alt + Shift for mac
Jesus Dimrix

5
@MikeMilla削除するファイルを右クリックし、[Apply Lint Fixes]をクリックするオプションをクリックします。複数のファイルを一度に削除するには、それらを選択します。
Saket Jain、2016年

28
このアプローチを使用すると、プログラムで使用されたリソースもすべて削除されることに注意してください。
Prokash Sarkar 2017年

23
プロジェクト全体を壊して
しまいまし

7
AS 3.0では、この機能により一部の使用済みレイアウトファイルが削除されます。これを試す前に、バックアップまたはgit commitを行うことをお勧めします。
StoneLam 2018年

99

ADT 16以降、Android Lintを使用できます。それは本当に素晴らしいツールです。

Android Lintは、ADT 16(およびTools 16)の新しいツールであり、Androidプロジェクトソースをスキャンして潜在的なバグを探します。

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

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

ただし、これにはいくつかの問題があり(それらがすでに修正されているかどうかわからない)、おそらく使用されていない数百のリソースを削除する場合は、リソースの削除中にプロジェクトを数回手動でコンパイルして、Lintがそうしないことを確認することをお勧めします必要なものを削除します。


10
特にxmlではなくコードで多くのリソース検索を行う場合は、Lintが未使用のリソースとして提案していることに大きく依存しません。その場合、リントは、実際に使用されている間に多くのリソースが使用されていないことを検出します。
MrJre、2012年

61
Android Studioでは、を使用Analyze > Inspect Code...して、未使用の宣言やメソッドなど、さまざまなものを見つけることができます。
Joshua Pinter 2013年

8
コマンドラインを使用する場合の例:lint --check UnusedResources <project-path>
espinchi

41
しかし、それらを削除する方法は?
Martin Pfeffer、2014年

1
すべてをExtra Translationsまとめて/自動的に削除する方法はありますか?
rishabhmhjn 2015

41

EclipseでのADTのサポートが終了したため、Android Studioを使用する必要があります。

Android Studio 2.0以降で使用 Refactor > Remove Unused Resources...

ここに画像の説明を入力してください


2
このようにすると、プログラムで使用されたリソースが削除されます
THZ

1
次のステップで確認することを忘れないでください。そうしないと、いくつかの使用済みファイルも削除されます。
Karan Sharma

38

Android向けのGradleビルドシステムは、「リソースの縮小」をサポートしています。つまり、ビルド時にパッケージ化されたアプリで使用されていないリソースを自動的に削除します。実行時に実際に必要ではないプロジェクト内のリソースを削除することに加えて、これは、アプリケーションで実際に必要とされない場合に依存しているライブラリからリソースを削除します。

これを有効にするには、gradleファイルにshrinkResources trueという行を追加します。

   android {
        ...

        buildTypes {
            release {
                minifyEnabled true //Important step
                shrinkResources true
            }
   }
}

こちらの公式ドキュメントを確認してください。

http://tools.android.com/tech-docs/new-build-system/resource-shrinking


2
shrinkResourcesを有効にするには、プロガードが必要です。プロガードを有効にするためのhvの問題:-(
Tixeon '20

ShrinkResourcesは、minifyEnabledがtrueの場合にのみ考慮されます minifyEnabled true
Eldhopj '21


15

lintを実行するときに複数のフレーバーを使用している場合は注意してください。Lintは、選択したフレーバーによっては、未使用のリソースを誤って提供する場合があります。


これを回避するには?
NickUnuchek

今まで、そのやり方を知りませんでした。各フレーバーに対してlintを実行し、両方のフレーバーで未使用のアイテムをマークすることを除きます。
MRodrigues

8

Android Studio 2.0以降のメニューで、[リファクタリング]を選択し、[未使用のリソースを削除...]をクリックします。

(または)

ショートカットも利用可能

プレス CTLR + Altキー+ Shiftキー+ I 1つのダイアログボックスが入力し、apperます未使用、あなたは多くのオプションを見つけるでしょう選択して、未使用のリソースを削除


7

Android Studioでは、

分析->名前で検査を実行

(Macの場合はshift + command + option + i、Windows / LinuxではCtrl + Shift + A)。

「未使用のリソース」と入力します。

このようにして、未使用のリソース、変数、シンボル、ローカリゼーション、ライブラリなどを削除できます。

リストから目的の検査を選択し、次に検査スコープを選択します-> OK ここに画像の説明を入力してください


6

Android Wear開発者への注意:「未使用リソースの削除」は、機能名(res / values / wear.xml)を宣言したxmlファイルを削除し、携帯電話は時計に接続できなくなります。私は自分のアプリでこのバグを理解するために何時間も費やしました。


また、たとえば、丸いミップマップアイコンを削除します。
artem

正しい。一般に、「使用されていないリソースの削除」は、追跡不可能なバグが多数発生する可能性があるため、推奨されません。
steliosf 2017年

4

string.xmlを確認します。

簡単です(少なくとも私のバージョンのEclipseでは)

Android版Eclipse(バージョンv22.6.2-1085508を使用)

  • 「Package explorer」でプロジェクト名を左クリックします
  • 「Androidツール」を選択します。
  • 「Lintの実行:一般的なエラーの確認」を選択します。

strings.xmlを開くと、未使用の文字列が強調表示されています。

他の潜在的な問題を修正できます。


+1いい解決策、バディ。選択したチェックに対してlintを実行することもできます-私が必要とするものとまったく同じです...(Android Studioとほぼ同じです:プロジェクトエクスプローラーで右クリックし、[ 分析 ]を選択し、[ コードの検査]または[ 名前で検査を実行]):D
Trinimon

これは、それらの未使用の文字列を削除するのにあまり役立ちません。以前のように手動で削除することをお勧めしますか?
Stan

「Lint」は「プロジェクトをクリーンアップする」ための優れた方法です。手動で削除する必要がありますが、強調表示され、使用されていないことがすぐにわかります。中規模プロジェクトの場合は数分かかります。:)
ガブリエルクライン

3

多分有用なAndround Unused Resourcesは、未使用のリソースについてプロジェクトをスキャンするJavaアプリケーションです。未使用のリソースは不必要にスペースを取り、ビルド時間を増やし、IDEのオートコンプリートリストを混乱させます。

これを使用するには、作業ディレクトリがAndroidプロジェクトのルートであることを確認し、次のコマンドを実行します。

java -jar AndroidUnusedResources.jar

https://code.google.com/p/android-unused-resources/


1
どこに置いても、それは正しいプロジェクトルートではないと言い続けます
キングストン、2015年

2

縮小リソースをtrueに定義するときは、保持するリソースと保持しないリソースを定義することもできます。これらのファイルをkeep.xmlという名前のres / rawフォルダーに追加しました

単一の署名済みビルドをさらに生成する前に、drawable-xhdpi-v4にmessenger_button_send_round_shadow.pngがあることを示すapkアナライザーツールをチェックインして、このテストから削除します

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
       tools:shrinkMode="strict"
       tools:discard="@drawable/com_facebook_button_icon_blue.png,
       @drawable/com_facebook_button_icon_white.png,
       @drawable/com_facebook_button_like_icon_selected.png,
       @drawable/messenger_button_send_round_shadow.png,
       @drawable/messenger_*"  />

messenger_ *を実行すると、ドローアブルフォルダー内の名前messengerから始まるすべてのファイルが削除されるか、または他の方法で削除する特定のファイルを定義します

ライブラリ自体からファイルを削除できるように、@ drawout / layoutの名前でレイアウトを削除することもできます(そのドロアブルがレイアウトなどで使用されている場合)。


1

良いツールを提案しているここには本当に素晴らしい答えがあります

ただし、png-drawable(または他の画像ファイル)を削除する場合は、すべてのdrawable-xxxxフォルダーをプロジェクトから一時フォルダーに移動してから、すべてを再ビルドして、ビルドを確認することも検討してください。不足しているメッセージを通知するメッセージリスト。

これは、効果的に使用しているリソースの概要を知り、おそらくAndroid Iconicsライブラリの助けを借りて、アイコンフォントまたはsvgリソースに置き換える場合に特に役立ちます。


これには時間がかかりますが、これも解決策であることに同意します。私はこれを今やっています
Dika

0

Android Assets Viewerは、.apk内に(ドローアブルとして)パックされたグラフィックを視覚的に検査できるように設計されています(必要に応じて、resフォルダーのzipファイルをアップロードすることもできます)。

http://www.cellebellum.net/AndroidAssetsViewer/

したがって、未使用のリソースを削除する場合、これはLintチェックと連携して機能し、そこにあるはずのものがすべてあることを確認するのに役立ちます。また、ドローアブルに関する他のいくつかの潜在的な問題を特定するのにも役立ちます:間違ったバケット、間違ったグラフィックなど。


0

Android StudioでLintを実行し、未使用のリソースをすべて見つけたら、[検査]タブからリソースの1つをクリックできます。それは問題についてのいくつかの詳細とそれを修正するいくつかのオプションを提供します。それらの1つは、すべての未使用リソースの削除です。このオプションを選択すると、未使用のリソースがすべて削除されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.