我有一个应用在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">
...
答案 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的大小或运行时行为。