工具:targetApi =“ m”的用法是什么?

时间:2019-04-14 10:32:15

标签: android namespaces attributes android-manifest manifest

我有一个应用在clearText和Android客户端之间使用Retrofit,并且在Android 9+中不允许使用clearText

要忽略这一点,我在android:usesCleartextTraffic="true"中添加了Manifest,但它警告:tools:ignore="GoogleAppIndexingWarning"并建议添加tools:targetApi="m"

这有点令人困惑:

  • tools:targetApi="m"意味着带有tools:的任何属性都适用于棉花糖或更高版本吗?

  • 是使用此版本的Manifest还是其他版本?这会在我的应用程序中造成不必要的错误吗?

我的清单:

...
<application
    android:name=".ApplicationClass"
    android:allowBackup="true"
    android:fullBackupContent="false"
    android:hardwareAccelerated="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="false"
    android:theme="@style/AppTheme.NoActionBar"
    android:usesCleartextTraffic="true"
    tools:ignore="GoogleAppIndexingWarning"
    tools:targetApi="m">
    ...

2 个答案:

答案 0 :(得分:1)

docs中,您可以阅读:

  

表示无论项目目标是什么,Lint都应将此类型视为针对给定的API级别

这意味着它将仅影响已注释的

带有tools的其他属性将不受影响。 tools是一个名称空间,您可以从中获取属性,属性不会影响整个名称空间。

答案 1 :(得分:1)

通过将tools:targetApi="m"添加到元素中,您告诉lint,该元素将不会在23(M)以下的API级别上使用。参见attribute documentation

这告诉工具您相信此元素(和所有子元素)仅在指定的API级别或更高级别上使用。如果该元素或其属性在您指定为minSdkVersion的API级别上不可用,则可以防止棉绒警告您。

在这种特殊情况下,<application>使用android:usesCleartextTraffic属性,该属性从API 23开始可用,但是应用minSdkVersion小于23,因此皮棉会警告您。尽管在这种情况下指定了tools:targetApi仍会删除警告,但这不是一个正确的解决方案,因为如果<application>允许,则minSdkVersion可以在较旧的API级别上使用。但是这样的技巧不会有什么坏处,因为如果不支持android:usesCleartextTraffic,它将被忽略,有关更多详细信息,请参见this answer

一般来说tools命名空间是什么,它包含构建 tools 使用的属性,并且不会影响运行时行为。有关更多详细信息,请参见the docs

Android Studio在工具名称空间中支持各种XML属性,这些属性可启用设计时功能(例如,在片段中显示哪种布局)或编译时行为(例如,应用于XML资源的缩小模式) 。生成应用时,生成工具会删除这些属性,因此不会影响APK的大小或运行时行为。