Android源码中com.android.support依赖迁移到AndroidX库

Posted 彬sir哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android源码中com.android.support依赖迁移到AndroidX库相关的知识,希望对你有一定的参考价值。

文章目录

一、androidX 简介

1.Google(谷歌) 2018 IO 大会推出了 Android新的扩展库 AndroidX,用于替换原来的 Android扩展库,将原来的android替换成androidx;只有包名和Maven工件名受到影响,原来的类名,方法名和字段名不会更改。官方早就推荐将support库迁移到androidx,因为后续support库不会再做更新

2.AndroidX是对android.support.xxx包的整理后产物。由于之前的support包过于混乱,所以,Google推出了AndroidX

3.Android 版本 28.0.0 (9.0)是支持support库的最后一个版本
   (1) 谷歌将不再发布android.support库版本。所有新功能都将在androidx命名空间中开发
   (2) 所以Android 9.0 之前还可以使用support,Android 10.0之后要使用androidx了
   (3) android对RecycleView有了优化,并且包名也改变了,还有其他控件support相关的控件都修改了包名

二、迁移步骤

1.修改当前项目的gradle.properties

android.useAndroidX=true
android.enableJetifier=true

其中:
(1) android.useAndroidX=true 表示当前项目启用AndroidX
(2) android.enableJetifier=true 表示将依赖包也迁移到AndroidX。如果取值为false,表示不迁移依赖包到AndroidX,但在使用依赖包中的内容时可能会出现问题,当然了,如果你的项目中没有使用任何三方依赖,那么,此项可以设置为false

三、Gradle

1.升级Gradle版本,修改gradle-wrapper.properties:
   AndroidX最低支持的gradle版本是4.6,我这边直接5.1.1了;

distributionUrl=https\\://services.gradle.org/distributions/gradle-5.1.1-all.zip

2.升级插件版本
   在主工程(Project)的bulid.gradle里,AndroidX最低支持的版本是3.2,我这边直接3.4.1了;

classpath 'com.android.tools.build:gradle:3.4.1'

3.修改SdkVersion
   AndroidX最低支持28、28.0.2;

compileSdkVersion: 29
targetSdkVersion : 29
buildToolsVersion "29.0.0"

4.附带添加一下这个gradle.properties:

android.useAndroidX=true
android.enableJetifier=true

5.Gradle中的compileOptions
   点击链接:Android Studio的Gradle中compileOptions的问题

6.使用Migrate to androidx


这波操做之后,你的项目就会有大变更了:

原来的android.xxx.xxx.28.0.2所有变为androidx.xxx.xxx.1.0.0;
下面的这些引入也会变化:

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.appcompat.widget.AppCompatTextView;

四、常用依赖库对比

1.常用依赖库对比

Old build artifactAndroidX build artifact
com.android.support:appcompat-v7:28.0.2androidx.appcompat:appcompat:1.0.0
com.android.support:design:28.0.2com.google.android.material:material:1.0.0
com.android.support:support-v4:28.0.2androidx.legacy:legacy-support-v4:1.0.0
com.android.support:recyclerview-v7:28.0.2androidx.recyclerview:recyclerview:1.0.0
com.android.support.constraint:constraint-layout:1.1.2androidx.constraintlayout:constraintlayout:1.1.2

2.常用支持库类对比

Support Library classAndroidX class
android.support.v4.app.Fragmentandroidx.fragment.app.Fragment
android.support.v4.app.FragmentActivityandroidx.fragment.app.FragmentActivity
android.support.v7.app.AppCompatActivityandroidx.appcompat.app.AppCompatActivity
android.support.v7.app.ActionBarandroidx.appcompat.app.ActionBar
android.support.v7.widget.RecyclerViewandroidx.recyclerview.widget.RecyclerView

五、温馨提示:

1.除了修改build.gradle文件下的dependencies以外,还需要将layout文件中的包名更改。如果不清楚更改哪里的话,build一下就好了,按照报错的地方更改就即可

以上是关于Android源码中com.android.support依赖迁移到AndroidX库的主要内容,如果未能解决你的问题,请参考以下文章

gradle build 在 lint 任务上失败

如何在android源码中找到PackageManager类的具体实现

Binder 机制分析 Android 内核源码中的 Binder 驱动源码 binder.c ( googlesource 中的 Android 内核源码 | 内核源码下载 )

Android系统源码怎么看?Android开发源码精编解析助你高效阅读源码

Android Lifecycle源码解析

如何查看Android源码