Android:有没有一种简单的方法可以找到我项目中的所有字符串?

问题描述 投票:0回答:7

我想扫描我的 Android 项目中的所有硬编码字符串,以便我可以本地化该项目,将字符串放入 strings.xml 中。我在 Eclipse 中看到“外部化字符串...”的选项,但它并非特定于 Android。

我知道你可以重构单个字符串但我想立即重构所有字符串。我有大量文件,我试图避免手动浏览每个文件。

android string localization
7个回答
13
投票

我只需在项目的根目录中打开一个终端窗口(如果您在 Windows 上,则为 Putty)。然后您可以运行如下所示的命令:

grep -r --include=*.java '="[^"\r\n]*"' ./*  --to look for something like this String test="text";, a string with =""
or
grep -r --include=*.java '"[^"\r\n]*"' ./*  -- to look for any string, anything enclosed in ""

当然,下一部分是将字符串实际替换到 Strings.xml 中,这也可以编写脚本,但可能需要更多修改。


7
投票

我自己也在寻找这个。有一个很好的方法可以做到这一点:

右键单击“src”目录 -> 源 -> 外部化字符串

这将找到所有非外部化字符串并让您外部化它们。

希望这会有所帮助:)

编辑:
这与 Android -> 提取 Android 字符串不同。 但它可以帮助您找到所有非外部化字符串。然后,您必须对每个字符串执行:
Ctrl + 1 -> Android -> 提取 Android 字符串。


1
投票


    Field[] fields = R.string.class.getDeclaredFields(); // or Field[] fields = R.string.class.getFields();
    String str = "";
    for (int  i =0; i < fields.length; i++) {
        int resId = getResources().getIdentifier(fields[i].getName(), "string", getPackageName());
        str += fields[i].getName() + " = ";
        if (resId != 0) {
            str += getResources().getString(resId);
        }
        str += "\n";
    }

您将获得字符串的所有代码及其值在“str”变量中。


1
投票

注意:此解决方案可以帮助解决一半的问题 - 查找所有硬编码字符串。您仍然需要自己进行实际的重构,因为您仍然需要 name 所有提取的字符串。


编辑:

这是更短更好答案:

  1. 菜单 -> 分析 -> 按名称运行检查...(如果您感觉灵活,甚至还有快捷方式)
  2. 输入“硬编码文本”,选择范围并运行。

您可以运行自定义 lint 检查 - 仅查找布局文件中的硬编码文本:

  1. 菜单 -> 分析 -> 检查代码
  2. 选择所需的范围(例如布局)

  3. 在“检查配置文件”下,选择新的自定义配置文件 (...)

  4. 复制现有配置文件,并取消选中除“硬编码文本”之外的所有检查

  1. 运行此检查,所有硬编码字符串将方便地收集到一个列表中。

0
投票

只需配置 eclipse 以显示代码中的所有字符串: 配置 Eclipse 以抱怨 android xml 首选项的硬编码字符串

并用eclipse refactor一一替换


0
投票

Android Studio 鬣蜥 2024

确保选择整个项目

检查硬编码字符串

点击Analyze并检查java包内部。


-1
投票

我相信 Eclipse 的 Google CodePro 插件有这个功能 某处

© www.soinside.com 2019 - 2024. All rights reserved.