it-swarm.asia

如何使用非翻译字符串在Android Studio上签名APK?

背景

我最近将 我的app 迁移到了Android-Studio。我有一些问题,但最终我克服了它们。

问题

出于某种原因,在Android Studio上,当我尝试签署APK时,我收到很多错误,如下所示:

Error:(16) Error: "..." is not translated in "de" (German), "el" (Greek), "iw" (Hebrew) [MissingTranslation]

(其中“......”是一个字符串)

在底部,经过这种很多错误,我看到了这个:

Error:Execution failed for task ':app:lintVitalRelease'.
> Lint found fatal errors while assembling a release target.
To proceed, either fix the issues identified by lint, or modify your build script as follows:
...
Android {
    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }
}
...

这个问题

我不确定什么是错的以及如何解决它。在Eclipse上我很容易做到了。缺少翻译不应该阻止我签署APK ...

对我而言,似乎Lint阻止了APK的导出,原因是我没有翻译所有的字符串。真的吗?

谁能帮帮我吗?我该如何解决这个问题,以便Lint会向我显示警告?如果我确定要这样做,还是确认对话框?

52
android developer

解决该问题的最简单方法是仅对发布版本禁用Lint检查缺失的翻译。

为此,请在build.gradle文件中添加“disable'MissingTranslation'”,如下所示:

Android {
    buildTypes {
        release {
            lintOptions {
                disable 'MissingTranslation'
            }
        }
    }
}
114
yvolk

对我而言,似乎Lint阻止了APK的导出,原因是我没有翻译所有的字符串。真的吗?

是。默认选项是lintOptions.abortOnError = true

谁能帮帮我吗?

您应该打开位于主项目模块的build.gradle文件,或者如果您没有模块,则打开通用文件夹。然后添加建议的行:

Android {
    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }
}

一些Lint警告默认转为工作室作为错误,我实际上不知道为什么,但就翻译而言,我想这是一种“停止”你发布应用程序的方法,由于最后一分钟的添加,翻译不完整一些文本。

使用lintOptions checkReleaseBuilds abortOnError,您可以设置Lint的检查,以便不为发布版本运行,如果发现“错误”,也不会停止。下面我将解释可以找到Lint错误设置的位置,因此如果您想要更进一步,可以向前迈出一步,逐一阅读。其中一些提供了有用的代码优化指令。

我该如何解决这个问题,以便Lint会向我显示警告?如果我确定要这样做,还是确认对话框?

Android Studio设置中还有一个选项可以将任何Lint错误更改为Lint警告,但我从未测试过。我经常转向gradle解决方案。

该选项位于Settings> Inspections> Android Lint。为了便于查找打开设置,在搜索(位于顶部)键入Lint translation,您可以更改左侧出现的错误到警告的翻译选项。

如果您的错误字符串永远不会被翻译,则另一个选项是在根项目或每个不可翻译的字符串处添加XML字符串文件tools:ignore="MissingTranslation"

30
madlymad

解决此错误的简单方法

只需添加以下代码要在build.gradle文件中添加“禁用'MissingTranslation'”,如下所示:

...
  Android {
      lintOptions {
          checkReleaseBuilds false
          // Or, if you prefer, you can continue to check for errors in release builds,
          // but continue the build even when errors are found:
          abortOnError false
      }
  }
  ...

_或_ 你也可以添加这个:

Android {
        buildTypes {
            release {
                lintOptions {
                    disable 'MissingTranslation'
                }
            }
        }
    }
5
Snoopy

您可以尝试打开“翻译编辑器”并将字符串“...”设置为“Unstranlatable”。您还必须删除此字符串的所有翻译。

1
valenta

工作

             buildTypes {
                        release {
                            lintOptions {
                                checkReleaseBuilds false
                                abortOnError false
                            }
                            minifyEnabled false
                            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
                        }
                    }
0
Keshav Gera

FWIW:如果您不打算支持其他语言,则根本不需要禁用lint检查。有时您的项目设置(或您正在导入的库)可能意外地 - 或有意地 - 包含一个配置来支持其他语言,例如通过声明该语言的values-文件夹:

<your project source folder>/main/res/values-ar

这就是我的情况,所以我只是删除了该文件夹。但是如果您无法控制违规库,那么可以选择禁用lint abortOnError(如接受的答案中所示),或者找到一种方法以某种方式排除“库导入的”文件夹。对于后一种选择,你可以开始 这里

0
kip2

有很多解决方案,但我试过

<string name="hello" translatable="false">hello</string>

它是字符串文件中tools命名空间的ignore属性,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources
  xmlns:tools="http://schemas.Android.com/tools"
  tools:ignore="MissingTranslation" >

  <!-- your strings here; no need now for the translatable attribute -->

</resources>

并从Gradle

 release {
            lintOptions {
                disable 'MissingTranslation'
            }
        }

Android {
     lintOptions {
        disable 'MissingTranslation'
    }
}
0
Null Pointer Exception