一、简介
Google 2018 IO 大会推出了 Android新的扩展库 AndroidX,用于替换原来的 Android扩展库,按照官方文档说明 AndroidX 是对 android.support.xxx 包的整理后产物,因为之前的 support 包过于混乱,比如之前我们如果使用support为27.1.1的相关依赖库时。可能需要所有相关的support 库都为27.1.1。如果其中有bug的话,可能需要所有的都去升级,存在一个绑定关系,而且正式版的发布周期也很长。
通过AndroidX,我们可以看到实时实现的特性和bug修复。升级个别依赖,不需要对使用的所有其他库进行更新。这就和我们使用Github上的开源库一样的,出了问题,我们可以提出bug和意见。作者修复后,发布新版本,我们就可以直接替换使用了。更加的透明便捷。
二、配置
- 将AS更新至 AS 3.2及以上;
- Gradle 插件版本改为 4.6及以上; 项目下 gradle/wrapper/gradle-wrapper.propertie 文件中的distributionUrl改为:
- compileSdkVersion 版本升级到 28及以上;
- buildToolsVersion 版本改为 28.0.2及以上。
- 在项目的gradle.properties文件里添加如下配置:
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
- 替换依赖库
implementation 'com.android.support:appcompat-v7:28.0.2'
修改为 implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'com.android.support:design:28.0.2'
修改为 implementation 'com.google.android.material:material:1.0.0'
- 修改导包
import android.support.v7.app.AppCompatActivity;
修改为 import androidx.appcompat.app.AppCompatActivity;
三、mapping.csv
- 如果你不知道切换到AndroidX后依赖库怎么导入,google为我们提供了一个mapping文件在线下载链接
PS:因为太多了,截图只列出部分
- 如果你不知道切换到AndroidX后类路径是什么,google也为我们提供了一个mapping文件在线下载链接
PS:因为太多了,截图只列出部分
四、AndroidStudio自动转换
AS 3.2 及以上版本提供了更加方便快捷的方法一键迁移到 AndroidX。选择菜单上的ReFactor —— Migrate to AndroidX... 即可。(如果迁移失败,就需要重复上面1,2,3,4步手动去修改迁移)
注意:如果你的项目compileSdkVersion 低于28,点击Refactor to AndroidX 会提示升级sdk版本:
代码语言:javascript复制You need to have at least have compileSdk 28 set in your module build.gradle to refactor to androidx
五、AndroidStudio新建工程
如果你是从头开发的新工程,AndroidStudio可以在新建工程时就配置好AndroidX。
六、需要注意的问题
- 通过字符串引用的对象 有时候我们会通过字符串引用一些对象,而这些对象在切换到AndroidX后,路径变了,用原来的字符串引用不到了,所以我们要格外地注意一下。
典型例子:behavior
代码语言:javascript复制// support包
android.support.design.widget.AppBarLayout$ScrollingViewBehavior
// AndroidX
com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior
- 编译注解框架 我们在写编译注解框架时都会生成java文件,其中import包如果是手写拼接字符串的方式写的,也会出现找不到类的错误。
- 属性变更 AndroidX对某些组件的属性做了调整,比如FloatingActionButton,切换到AndroidX后,可能会出现解析失败,需要删除一些属性或者调整一些属性。
- 网络安全规则 Android P 中新引入了网络安全规则,以上内容会对使用 http 的 URL 出现,默认会禁止访问 http 类型的地址。
当然,通常我们发布的时候会使用 Https 类型的网络协议,而当开发和调试的时候可能就没有那么严格了。所以,为了解决这个问题, Android 新引入了下面的解决方案:
首先,创建配置文件 res/xml/network_security_config.xml,内容如下:
代码语言:javascript复制<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</domain-config>
</network-security-config>
这里的 localhost是 host 的地址,比如我上面的出错的地址应该是makeunion.com。 然后,我们将其配置到 manifest.xml 中:
代码语言:javascript复制<application
android:networkSecurityConfig="@xml/network_security_config"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity android:name=" (...)
</application>
如果项目中使用了多个不同的地址,并且都是 http 的,所以就需要在该地址下面配置多个域名。
PS:更多信息请参考AndroidX官方文档