在库清单中使用`android:supportsRtl="true"`是必要的吗?有时会导致错误。

15

当我创建一个Android库时,默认情况下会在清单文件中给出以下内容。

<application android:allowBackup="true"
    android:label="@string/app_name"
    android:supportsRtl="true"/>

将其作为库发布在Bintray上并被其他人使用后,只需意识到如果包含此库的应用程序在其清单中具有以下内容

    android:supportsRtl="false"

在gradle同步或编译时,它会发布以下错误。

Error:Execution failed for task ':app:processProductionDebugManifest'.
> Manifest merger failed : Attribute application@supportsRtl value=(false) from AndroidManifest.xml:23:9-36
is also present at [com.mylibrarypackage:mylibrary:1.0.0] AndroidManifest.xml:14:9-35 value=(true).
Suggestion: add 'tools:replace="android:supportsRtl"' to <application> element at AndroidManifest.xml:18:5-67:19 to override.

为了解决这个问题,我认为需要从我的库清单中删除 android:supportsRtl="true"

不知道为什么Android在其库清单中将此设置为默认值。如果我从库清单中删除 android:supportsRtl="true",是否会出现潜在的问题?

2个回答

39

工具:替换="x,y"

用提供的值替换低优先级声明中的x,y属性(必须在同一节点上存在)。

当导入的库比项目的目标SDK版本低时,可能需要显式地授予权限(或进行其他更改),以使库在稍后的运行时正常运行。这将由清单合并器自动执行。

您正在收到:

清单合并失败:来自AndroidManifest.xml的属性application@supportsRtl值=(false) :23:9-36

您可以添加

tools:replace="android:supportsRtl"

最后

<application android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true"
tools:replace="android:supportsRtl"/>

1
谢谢!我在https://dev59.com/AZrga4cB1Zd3GeqPjz13有一个跟进问题。如果你知道这个答案是什么,希望你能帮我看一下。 - Elye

0

如果您想支持从右到左(RTL)布局,则需要设置此属性。

如果将其设置为true,并且targetSdkVersion设置为17或更高版本,系统将激活并使用各种RTL API,以便您的应用程序可以显示RTL布局。如果将其设置为false,或者targetSdkVersion设置为16或更低版本,则RTL API将被忽略或不起作用,您的应用程序将无论用户的语言环境选择与否,始终表现相同(布局方向始终是从左到右)。

此属性的默认值为false。

此属性在API级别17中添加。

(来源:http://developer.android.com/guide/topics/manifest/application-element.html


谢谢@gaurav4sarma。我知道RTL是什么意思。只是想知道我们是否可以决定不在库中设置它,而让应用程序来设置它或覆盖它。 - Elye
感谢您的回复。看起来您的答案已经在上面被质疑了。祝你好运。 - Gaurav Sarma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接