Androidプロジェクトで未使用の文字列を見つける簡単な方法はありますか?


152

多くの文字列がで宣言されている巨大なAndroidプロジェクトがありますstrings.xml。で未使用の文字列を削除したかったstrings.xml

そうする簡単な方法はありますか?

回答:


238

のAndroidメーカー

メニュー -> 分析 -> 名前による検査の実行 ->未使用のリソース

[ファイルマスク]チェックボックスをオンにstrings.xmlして、テキストフィールドに入力します。


2
次に、あなたが定義することができCustom scope、選択Production classes- > app- > values未使用の文字列、色を見つけるために...
Jemshit Iskenderov

2
SDK Tools 26.0.2では、これは使用されていない文字列を検出しませんが、「使用法を検索」はそれらの使用法を表示しません(実際に使用される文字列を検出します)。
user905686 2017

ところで、文字列が実際に使用されている場合(コードで動的に参照されます)、リンター警告を抑制することができますtools:ignore="UnusedResources"
jakub.g

4
これは期待どおりに動作していません。未使用の文字列を追加して試してみましたが、識別できません
chikka.anddev

これは壊れているようです。私の文字列の多くは未使用であると考えられていましたが、すばやく「使用法を見つける」ことが使用法を見つけました。注意してください。
szaske

37

これはかなり簡単な別のソリューションです。Android Studioメニューで、

リファクタリング>未使用のリソースを削除...

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

[ プレビュー]をクリックして、未使用のリソースを確認し、選択的に削除します。


1
これにより、実際に使用されていた多くのリソースが削除されました。手動で多くのデータの削除を
取り消さなければなりませんでした

1
@stoeflnでは、[プレビュー]をクリックすると、削除するものと削除しないものを手動で選択できます。
Suragch 2018年

1
「unused @ id宣言も削除する」ことに注意してください。私のコードが実際に使用していた多くのIDが削除されました(Kotlin Android拡張プラグイン-アクティビティ、フラグメント、ビューからビューを回復できるようになります)
Dan Alboteanu

28

私の場合、「未使用のリソースを削除」を使用しているにもかかわらず、「名前で検査を実行」は機能しませんでした。

解決:

  1. strings.xmlを開きます
  2. 二次クリック
  3. リファクタリング->未使用のリソースを削除

「未使用のリソースを削除」がなぜ機能するのか、他の機能が機能しないのか、私には手がかりがありません。


2
プロジェクトエクスプローラーでも実行できます。必要なモジュールを選択してから、右クリックしてリファクタリングし、未使用のリソースを削除します。未使用のドローアブルなど、あらゆる種類のリソースを削除します
FRL

22

ADT 16を使用すると、できる限り簡単に実行できます。ADT 16に更新し、Android Lintを使用します。それは本当に素晴らしいツールです。それはすべての未使用のリソース(文字列だけでなく)を見つけることができます。その公式サイトから:

Here are some examples of the types of errors that it looks for:

- Missing translations (and unused translations)
- Layout performance problems (all the issues the old layoutopt tool used to find, and more)
- Unused resources
- Inconsistent array sizes (when arrays are defined in multiple configurations)
- Accessibility and internationalization problems (hardcoded strings, missing contentDescription, etc)
- Icon problems (like missing densities, duplicate icons, wrong sizes, etc)
- Usability problems (like not specifying an input type on a text field)
- Manifest errors
and many more.

11
ADT 20.0.2以降、Android Lintは未使用の文字列を検出せず、要求もしません。完全にランダムなIDの文字列を追加し、Lintを実行してテストしました。私は十分な評判を持っていないので、私は、ダウンの上返信を投票できなかっ:(。
フランク・ハーパー

@FrankHarperが言ったように:以前はありませんでした。フラッシュ卿が言ったように、それは今それをします:Warning: The resource R.string.... appears to be unused [UnusedResources] [lint] <string name="...">some text</string>
serv-inc

3

string.xmlを確認します。

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

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

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

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

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


これは、デフォルトファイルに翻訳がない文字列を見つけるのに役立ちます
ePeace

3

Android Studio Pressで

Ctlr + Alt + Shift + i

選択->未使用のリソース
未使用の未使用の文字列とアイコンが表示されます。

ありがとうコーディング:)


3

これは、Android 3.3で行った方法です。

保存されていない変更をリポジトリにチェックインします。

  • アプリのモジュールを右クリック->リファクタリング->未使用のリソースを削除->プレビュー
  • リファクタリングプレビューで、両方のビューを折りたたみます(「削除するアイテム」と「未使用のリソース宣言」)
  • 「削除するアイテム」を右クリック->除外
  • 「未使用のリソース宣言」を右クリック->除外
  • 次に、「未使用のリソース宣言」を展開し、その下にアプリ固有のstrings.xmlを配置します(strings.xmlは複数あります)。
  • そのstrings.xmlを右クリック->インクルード
  • リファクタリングしてください!xmlファイルの未使用の文字列はすべて削除されます!

注:プロジェクトをビルドしてみてください。コンパイルが失敗した場合、これらのstrings.xmlは、それら自体が使用されていないレイアウト/メニューxmlから参照されている可能性が高いです。したがって、これらのレイアウトxmlは手動で削除することもできます!

ビルドして実行します。テスト!


-1

プロジェクトのルートからこのスクリプトを実行します。

`find res / values / *。xml`のリソースファイル用; 行う
  `grep '。* / \ 1 / g'`の文字列名の場合; 行う
    count1 = `grep -rc" R.string。$ {stringname} "src | egrep -v ':0 $' | wc -l`
    count2 = `grep -rc" @string / $ {stringname} "res / layout | egrep -v ':0 $' | wc -l`
    count3 = `grep -rc" @string / $ {stringname} "res / menu | egrep -v ':0 $' | wc -l`
    count4 = `grep -rc" @string / $ {stringname} "AndroidManifest.xml | egrep -v '^ 0 $' | wc -l`
    count5 = `grep -rc" @string / $ {stringname} "res / xml | egrep -v ':0 $' | wc -l`
    if [$ count1 -eq 0 -a $ count2 -eq 0 -a $ count3 -eq 0 -a $ count4 -eq 0 -a $ count5 -eq 0]; その後
      echo $ resourcefile:$ stringname
    fi
  できた
できた

`find res / drawable * -type f -name '*。???'`のリソース名の場合 行う
  resource = `echo $ resourcename | xargsベース名| sed "s / ^ \(。* \)\ .... $ / \ 1 / g" `
  count1 = `grep -rc" R \ .drawable \。$ {resource} "src | egrep -v ':0 $' | wc -l`
  count2 = `grep -rc" @drawable / $ {resource} "res / layout | egrep -v ':0 $' | wc -l`
  count3 = `grep -rc" @drawable / $ {resource} "res / drawable * / *。xml | egrep -v ':0 $' | wc -l`
  count4 = `grep -rc" @drawable / $ {resource} "res / menu | egrep -v ':0 $' | wc -l`
  count5 = `grep -rc" @drawable / $ {resource} "AndroidManifest.xml | egrep -v '^ 0 $' | wc -l`
  if [$ count1 -eq 0 -a $ count2 -eq 0 -a $ count3 -eq 0 -a $ count4 -eq 0 -a $ count5 -eq 0]; その後
      echo $ resourcename
  fi
できた

`find res / layout / *。xml`のリソース名用; 行う
  resource = `echo $ resourcename | xargsベース名| sed "s / ^ \(。* \)\ .... $ / \ 1 / g" `
  count1 = `grep -rc" R \ .layout \。$ {resource} "src | egrep -v ':0 $' | wc -l`
  if [$ count1 -eq 0]; その後
      echo $ resourcename
  fi
できた

それは私にこの種の出力を与えます:

res / values / activity_strings.xml:activity_more
res / values / activity_strings.xml:activity_as_reply_to
res / values / db_strings.xml:sql_backlog_count
res / values / db_strings.xml:sql_backlog_update_last_resend
...

クールなアプローチですが、リソース名がコメントまたは文字列に含まれていないかどうかをチェックしますか?新しいAndroid Studioプロジェクト構造と互換性を持たせるには、いくつかの変更も必要です。
Mohammad Jafar Mashhadi 2015

-1

不足している翻訳のみ:

InteliJを使用して、InteliJのパネルバーをクリックします:「分析」>「名前で検査を実行」>入力:不完全な翻訳

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