AndroidX

2019-08-12 16:43:33 浏览数 (1)

一、简介

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文件里添加如下配置:
代码语言:javascript复制
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
  • 替换依赖库
代码语言:javascript复制
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'
  • 修改导包
代码语言:javascript复制
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官方文档

0 人点赞