在Android 10 版本中,官方的改动较大,相应的开发者适配成本还是很高的。基于前期调研,我们主要基于以下几方面进行Android 10的适配:
-
Android X
-
分区存储
-
设备ID
-
明文HTTP限制
一、AndroidX
AndroidX 对原始 Android Support库进行了重大改进,后者现在已不再维护。AndroidX 软件包完全取代了支持库,不仅提供同等的功能,而且提供了新的库。
1.1 什么是AndroidX
Android系统在刚刚面世的时候,可能连它的设计者也没有想到它会如此成功。随着Android系统版本不断地迭代更新,每个版本中都会加入很多新的API进去,但是新增的API在老版系统中并不存在,因此这就出现了一个向下兼容的问题。
于是Android团队推出了一个鼎鼎大名的Android Support Library,用于提供向下兼容的功能。比如我们熟知的support-v4库,appcompat-v7库都是属于Android Support Library的。4在这里指的是Android API版本号,对应的系统版本是1.6。support-v4的意思就是这个库中提供的API会向下兼容到Android 1.6系统。类似地,appcompat-v7指的是将库中提供的API向下兼容至API 7,也就是Android 2.1系统。
随着时间的推移,Android1.6、2.1系统早已被淘汰了,现在Android官方支持的最低系统版本已经是4.0.1,对应的API版本号是15。support-v4、appcompat-v7库也不再支持那么久远的系统了,但是它们的名字却一直保留了下来,虽然它们现在的实际作用已经对不上当初命名的原因了。
Android团队也意识到这种命名已经非常不合适了,于是对这些API的架构进行了一次重新的划分,推出了AndroidX。因此,AndroidX本质上其实就是对Android Support Library进行的一次升级。
1.2 为什么要升级AndroidX
-
版本 28.0.0 是Android Support 库的最后一个版本。官方将不再发布 android.support 库版本。所有新功能都将在 AndroidX命名空间中开发。
-
长远来看。AndroidX重新设计了包结构,旨在鼓励库的小型化,支持库和架构组件包的名字进行了简化。而且这也是减轻Android生态系统碎片化的有效方式。
-
与Android Support库不同,AndroidX软件包是单独维护和更新的。这些AndroidX包使用严格的语义版本控制,从版本1.0.0开始,您可以单独更新项目中的AndroidX库。
1.3 适配步骤
1.3.1 环境准备
-
AndroidStudio 3.2.0+
-
gradle:gradle-4.6+
另外修改相关app、library模块中build.gradle的compileSdkVersion、targetSdkVersion、buildToolsVersion的配置,都设置为29,示例如下:
android {
compileSdkVersion 29
buildToolsVersion 29.0.2
defaultConfig {
targetSdkVersion 29
}
...
}
1.3.2 修改当前项目的 gradle.properties
android.useAndroidX=true
android.enableJetifier=true
其中:
-
android.useAndroidX=true 表示当前项目启用 AndroidX;
-
android.enableJetifier=true 表示将依赖包也迁移到AndroidX 。如果取值为 false ,表示不迁移依赖包到AndroidX,但在使用依赖包中的内容时可能会出现问题,如果你的项目中没有使用任何三方依赖,此项可以设置为 false。
1.3.3 修改项目中的build.gradle依赖库
implementation 'com.android.support:appcompat-v7:28.0.0'
→ implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'com.android.support:design:28.0.0'
→implementation 'com.google.android.material:material:1.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
→ implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
映射关系:
https://developer.android.com/jetpack/androidx/migrate/artifact-mappings
1.3.4 修改支持库类
将原来import的android.**包删除,重新import新的androidx.**包;
import android.support.v7.app.AppCompatActivity; →import androidx.appcompat.app.AppCompatActivity;
1.3.5 迁移
官方迁移指南:
https://developer.android.com/jetpack/androidx/migrate#migrate
在 AndroidStudio 3.2 或更高版本(截图中 AndroidStudio 为 3.5 版本)中执行如下操作:菜单>Refactor > Migrate to AndroidX(如果迁移失败,就需要重复上面1,2,3,4步手动去修改迁移)
注意:
-
使用AS迁移工具并不能完全修改完毕,需要手动修改
-
support包名涉及到资源修改,切记检查资源中的类路径
二、分区存储
2.1 背景介绍
为了更好的保护用户数据并限制设备冗余文件增加,以 Android 10(API 级别 29)及更高版本为目标平台的应用在默认情况下被赋予了对外部存储设备的分区访问权限(即分区存储), 对外部存储文件访问方式重新设计,便于用户更好的管理外部存储文件。