需要适配 Android 11 那么建议下载 studio4.2 (金丝雀版)差别就在于旧版SDK不兼容,在 4.1 显示的SDK 是 Android 10.0+,4.2显示的是Android 11。
设置studio ,打开模块级 build.gradle 文件并更新 compileSdkVersion 和 targetSdkVersion:
android {
compileSdkVersion 30
defaultConfig {
targetSdkVersion 30
}
...
}
2、隐私权更新
以下是汇总了Android 11 与隐私权限相关的变更,Android 11中隐私权限相关的主要变更分区存储,当前应用的 自身的应用专用缓存文件 下的操作不需要权限,可以直接访问
1、分区存储强制执行:
以 Android 11 为目标平台的应用,以及以 Android 10 为目标平台且未将requestLegacyExternalStorage 设为 true 已停用分区存储的应用,Android 11 的分区存储兼容设置将失效。
Android 使用的文件系统类似于其他平台上基于磁盘的文件系统。系统提供了以下几种保存应用数据:
应用专属存储空间:存储仅供应用使用的文件,可以存储到内部存储卷中的专属目录或外部存储空间中的其他专属目录。使用内部存储空间中的目录保存其他应用不应访问的敏感信息。
共享存储:存储您的应用打算与其他应用共享的文件,包括媒体、文档和其他文件。
偏好设置:以键值对形式存储私有原始数据。
数据库:使用 Room 持久性库将结构化数据存储在专用数据库中。
如果用户是 升级的Android11 应用,将 preserveLegacyExternalStorage 属性设为 true ,用户任然可以使用旧版存储模型 ,如果是卸载重装应用,此属性无效
Android R 规定了 APP 有两种外部存储空间视图模式:Legacy View(分区模式)、Filtered View(兼容模式)
可以用nvironment.isExternalStorageLegacy() 这个 API 来检查 APP 的运行模式
分区模式中文件路径变更:Environment.getExternalStorageState() 变更为:context.getExternalFilesDir()
android:installLocation="preferExternal"在应用的清单文件中指明偏好设置,以便将应用安装到外部存储空间
2、一次性权限
请求位置信息、麦克风摄像头权限需要每次都重新获取权限,电话号码权限修改:必须请求 READ_PHONE_NUMBERS 权限 或者
开发者可以请求用户停用自动重启功能,停用后会保持当前已经请求的权限不会在下次进入应用重新请求, isAutoRevokeWhitelisted()。如果此方法返回 true,则系统不会自动重置应用的权限。
Android 11 更改了您的应用在读取电话号码时使用的与电话相关的权限。
(1)如果您的应用以 Android 11 为目标平台,并且需要访问以下列表中显示的电话号码 API,则必须请求 READ_PHONE_NUMBERS 权限,而不是 READ_PHONE_STATE 权限。
1.TelephonyManager 类和 TelecomManager 类中的 getLine1Number() 方法。
2.TelephonyManager 类中不受支持的 getMsisdn() 方法。
(2)如果您的应用声明 READ_PHONE_STATE 以调用前面列表中的方法以外的方法,您可以继续在所有 Android 版本中请求 READ_PHONE_STATE。不过,如果您仅对前面列表中的方法使用 READ_PHONE_STATE 权限,请按以下方式更新您的清单文件:
1.更改 READ_PHONE_STATE 的声明,以使您的应用仅在 Android 10(API 级别 29)及更低版本中使用该权限。
2.添加 READ_PHONE_NUMBERS 权限。以下清单声明代码段演示了此过程: