如何在Android Studio中找到所有RELEVANT硬编码字符串?

时间:2015-07-17 21:47:31

标签: android regex sed lint

以前曾问过这个问题的几种风格,但我不明白它们的答案对于大型项目是如何令人满意的。

我的目标是在我的应用程序中找到需要本地化的任何硬编码字符串,因此我执行以下操作:

  1. 从项目层次结构中选择要运行硬编码字符串的目录
  2. 导航至Analyze - >按名称运行检查...
  3. 选择“硬编码字符串”
  4. 选中“目录”单选按钮后,单击“确定”以运行检查
  5. 此时,我获得了大约3500次点击,其中2500次是日志记录。我运行sed命令从项目中删除所有日志记录并重复上述步骤。这留下了1000次点击。其中大约700个是分配给常量的字符串文字,因此我执行以下操作:

    1. 导航至Android Studio - >偏好设置
    2. 导航至检查 - >国际化问题 - >硬编码字符串
    3. 在右侧的框中,我选中“忽略分配给常量的文字”
    4. 我重新检查支票并最终获得300次点击。其中大约200种是用于读/写JSON属性的某种形式的硬编码标签,99种是用于文件名和共享偏好等内容的构建字符串。

      这个2小时的过程给我留下了1个未被本地化的实际字符串文字。

      问题:是否有内置的说法,“运行此本地化检查,但忽略与此[正则表达式列表] [s]相匹配的行?”

2 个答案:

答案 0 :(得分:1)

对于Android Studio 1.3版,在按名称运行“硬编码文本”检查后,确实会遇到很多非问题,例如Log方法的参数。

但是,检查结果窗口的右侧面板包含有关规则的信息以及一些“问题解决”选项。其中一个选项是“Annotate parameter ...”或“Annotate class ...”。这些选项在annotations.xml文件中创建条目,告诉检查规则忽略这些参数或类。

有了这个,随后的检查运行将不会标记这些调用。因此,在对几个代码文件执行此操作后,您可能会遇到大多数异常,并且会减少整个项目的结果数。

以下是annotations.xml文件中生成的XML示例:

<root>
  <item name='android.content.Intent Intent(java.lang.String) 0'>
    <annotation name='org.jetbrains.annotations.NonNls'/>
  </item>
  <item name='android.content.Intent android.content.Intent putExtra(java.lang.String, boolean) 0'>
    <annotation name='org.jetbrains.annotations.NonNls'/>
  </item>
  <item name='android.content.Intent android.content.Intent putExtra(java.lang.String, int) 0'>
    <annotation name='org.jetbrains.annotations.NonNls'/>
  </item>
  <item name='android.content.Intent android.content.Intent setAction(java.lang.String) 0'>
    <annotation name='org.jetbrains.annotations.NonNls'/>
  </item>
</root>

答案 1 :(得分:1)

只需在日志行后添加 // NON-NLS 即可取消警告。

Route::group(['namespace' => 'Auth'], function() {
    Route::post('/login', ['uses' => 'AuthController@login', 'as' => 'login']);
    Route::post('/registreer', ['uses' => 'AuthController@postRegister', 'as' => 'register']);
    Route::post('/reset', ['uses' => 'PasswordController@sendResetLinkEmail', 'as' => 'reset']);
});