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

Mah*_*asi 5 android attributes namespaces manifest android-manifest

clearText在Android客户端和服务器using之间有一个应用用途Retrofit,并且Android 9+不允许使用clearText

要忽略我android:usesCleartextTraffic="true"Manifest其中添加的内容 ,但会发出警告: tools:ignore="GoogleAppIndexingWarning"并建议添加tools:targetApi="m"

这有点令人困惑:

  • tools:targetApi="m"意味着任何属性与tools:是棉花糖和更高?

  • 是使用此版本的清单还是其他?这在我的应用程序中犯了不必要的错误吗?

我的清单:

...
<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">
    ...
Run Code Online (Sandbox Code Playgroud)

Val*_*kov 20

通过添加tools:targetApi="m"到元素,您可以告诉lint该元素不会在低于 23 (M) 的 API 级别上使用。请参阅属性文档

这告诉工具您认为该元素(以及任何子元素)将仅在指定的 API 级别或更高级别上使用。如果该元素或其属性在您指定为 minSdkVersion 的 API 级别上不可用,这将阻止 lint 向您发出警告。

在这种特殊情况下,<application>使用android:usesCleartextTraffic从 API 23 开始可用的属性,但应用程序minSdkVersion小于 23,因此 lint 会警告您。尽管tools:targetApi在这种情况下指定会删除警告,但它不是正确的解决方案,因为如果允许,<application>可以在较旧的 API 级别上使用。minSdkVersion但这样的技巧不会造成伤害,因为android:usesCleartextTraffic如果不支持,它将被忽略,请参阅此答案以获取更多详细信息。

一般来说,命名空间怎么样,它包含构建工具tools使用的属性,不会影响运行时行为。请参阅文档了解更多详细信息。

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

  • 那么,当在最小 SDK 为 21 的项目的 Manifest 中指定明文时,我们是否应该添加 `tools:targetApi="m"` 呢? (3认同)

Luc*_*tti 17

文档中您可以阅读:

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

这意味着它会影响带注释的一个。

其他属性tools不受影响。tools是一个命名空间,你可以从中获取属性,一个属性不会影响整个命名空间。

  • @LucaNicoletti是的,但根据文档,在默认styles.xml中使用它是完全安全的,因为系统会在较低版本上忽略它 (4认同)
  • `tools:targetApi` 只影响 `Lint` (3认同)
  • 所以它基本上只是删除了恼人的红色波浪下划线。就是这样。 (3认同)
  • 我更新了我的问题。查看我的主要标签...`tools:targetApi` 如何检测 api m 中必须影响的属性? (2认同)
  • 如果我在 Styles.xml、tools:targetApi="p" 中使用它并在“P”下方的操作系统中使用该样式,应用程序会崩溃吗?或者它会忽略“P”下面的行属性? (2认同)