即使使用未翻译的字符串,如何在 Android Studio 上签署 APK?
Posted
技术标签:
【中文标题】即使使用未翻译的字符串,如何在 Android Studio 上签署 APK?【英文标题】:How to sign APK on Android Studio even with non-translated strings? 【发布时间】:2015-02-12 20:30:46 【问题描述】:背景
我最近将 my 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 只会向我显示警告?还是确认对话框(如果我确定要这样做)?
【问题讨论】:
【参考方案1】:在我看来,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"
或者在根项或每个不可翻译的字符串中。
【讨论】:
您能告诉我在哪里可以更改 Lint 设置以使其保持警告状态吗?另外,你建议的修复究竟是做什么的?另外,我认为您的意思是不同的文件。 “gradle.build”不存在。出于某种原因,顺便说一句,消息窗口有时会消失。 他的意思是你模块的build.gradle
@Emmanuel 是的,我试过了。有用。但是,我想知道后果是什么以及解决方案的真正作用。
关于文件,这是一个错字,对不起。我认为我设法在我的回答中包含了与您的额外问题相关的所有信息。
@madlymad 所以我可以将“Android Lint”列表(在“设置”->“检查”内)中的“不完整翻译”设置为“警告”,对吧?【参考方案2】:
解决此问题的最简单方法是仅针对发布版本禁用对缺失翻译的 Lint 检查。
为此,将“disable 'MissingTranslation'”添加到您的 build.gradle 文件中,如下所示:
android
buildTypes
release
lintOptions
disable 'MissingTranslation'
【讨论】:
希望有更好的解决方案。必须有一个选项来保留未翻译的字符串。 @RahulRastogi 更好的“解决方案”需要 Android 平台支持“语言中立”字符串。目前,我的项目中有带有此类字符串的“strings-international.xml”文件。但我不能告诉 Android 该文件包含不应翻译的字符串。 @yvolk 同意你的观点!我制作了一个 keys.xml 来保存诸如 facebook 和 google 的 api 键之类的字符串。 @RahulRastogi 似乎有一种方法可以告诉Android不应该翻译整个文件:“如果你有很多不应该翻译的资源,你可以将它们放在一个名为 donottranslate.xml 的文件和 lint 将认为所有这些资源都是不可翻译的资源”(来自 tools.android.com/recent/non-translatablestrings )。 @yvolk 耶!我会在空闲时间尝试使用构建系统(gradle)和 Lint 来促进此类功能。【参考方案3】:解决此错误的简单方法
只需添加以下代码即可将“disable 'MissingTranslation'”添加到您的 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
...
或者你也可以添加这个:
android
buildTypes
release
lintOptions
disable 'MissingTranslation'
【讨论】:
【参考方案4】:您可以尝试打开“翻译编辑器”并将字符串“...”设置为“Unstranlatable”。 您还必须删除此字符串的所有翻译。
【讨论】:
报告的字符串不是应用的。它属于支持库。我无法编辑它们。【参考方案5】:FWIW:如果您不打算支持其他语言,那么您根本不需要禁用 lint 检查。有时,您的项目设置(或您要导入的库)可能会意外或有意地包含一个配置,以通过为该语言声明一个 values- 文件夹来支持其他语言,例如:
<your project source folder>/main/res/values-ar
我就是这种情况,所以我只是删除了该文件夹。但是,如果您无法控制有问题的库,那么一个选择是禁用 lint abortOnError,如已接受的答案中所示,或者找到一种方法以某种方式排除“库导入”文件夹。对于后一个选项,您可以开始 here
【讨论】:
【参考方案6】:有很多解决方案,但我试过了
<string name="hello" translatable="false">hello</string>
就是你的strings文件中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'
【讨论】:
tools:ignore="MissingTranslation"
仍然将它放在翻译编辑器中,所以 translatable="false"
仍然是一个好东西放在那里...【参考方案7】:
工作
buildTypes
release
lintOptions
checkReleaseBuilds false
abortOnError false
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
【讨论】:
以上是关于即使使用未翻译的字符串,如何在 Android Studio 上签署 APK?的主要内容,如果未能解决你的问题,请参考以下文章
如何修复未安装的颤振医生错误android studio和IntelliJ IDEA,即使我已经安装了它
为啥我会收到“服务未注册”异常,即使我没有在 Android - Java/Kotlin 中使用任何服务?
如何使用 FUSED LOCATION API 优化电池 - Android
即使在 if (process) 块中使用,也未定义未捕获的进程? [复制]