前言
将AS更新至 AS 3.2及以上
Gradle 插件版本改为 4.6及以上,项目下gradle/wrapper/gradle-wrapper.propertie文件中的distributionUrl改为:distributionUrl=https://services.gradle.org/distributions/gradle-4.6-all.zip
compileSdkVersion 版本升级到 28及以上buildToolsVersion 版本改为 28.0.2及以上。
官方建议在迁移之前,先将应用的Support Lib更新至最新版本version 28.0.0。这是因为AndroidX 1.0.0版本是与Support Lib 28.0.0一致的二进制文件。
android.useAndroidX:如果设置为 true,Android 插件会使用相应的 AndroidX 库,而非支持库。如果未指定,则该标记默认为 false。
android.enableJetifier:如果设置为 true,Android 插件会重写其二进制文件,自动迁移现有的第三方库以使用 AndroidX。如果未指定,则该标记默认为 false。
开干
1.gradle.properties添加
android.useAndroidX=true
android.enableJetifier=true
project的build.gradle添加刷版本
ext{
// 用于编译的SDK版本
compileSdkVersion = 30
// 用于Gradle编译项目的工具版本
buildToolsVersion = "30.0.2"
}
module build.gradle刷版本
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
2.Android Studio
Refactor->Migrate to AndroidX
弹框选Migrate备份
搜索结束点击do refactor进行重构
File -> Invalidate Caches /Restart 重启AS,清除缓存重启下
报错处理
1.错误: 找不到符号 全局替换Ctrl+Shift+R
import androidx.core.view.ViewPager; ->import androidx.viewpager.widget.ViewPager;
import androidx.core.view.PagerAdapter;->import androidx.viewpager.widget.PagerAdapter;
import androidx.core.app.FragmentActivity;->import androidx.fragment.app.FragmentActivity;
import androidx.core.app.FragmentPagerAdapter;->import androidx.fragment.app.FragmentPagerAdapter;
import androidx.core.app.FragmentStatePagerAdapter;->import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.core.util.ArrayMap ->import androidx.collection.ArrayMap
import androidx.appcompat.widget.LinearLayoutManager -> import androidx.recyclerview.widget.LinearLayoutManager
2.升级Glide
implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
Glide.with(mContext).load(identifier).asGif().into(mImageView);
//As of Glide version 4.x, asGif() method is removed.
Glide.with(mContext) .load(yourgif).into(imageView);
3.程序包org.apache.http不存在
在对应module的 build.gradle
android{
useLibrary 'org.apache.http.legacy'
}
4.引用的三方jar包使用的是support相关库,使用相关工具转换为支持AndroidX的文件
open_sdk_r5509.jar
Tencent.class
import android.support.v4.app.Fragment;
独立的 Jetifier 工具可将依赖于支持库的库迁移为依赖于等效的 AndroidX 软件包,下载见附件。
cd进入jetifier-standalone\bin目录
jetifier-standalone -i open_sdk_r5509.jar -o open_sdk_r5509_androidx.jar
5.Failed to transform 'F:\Android\..\libs\Msc.jar' using Jetifier. Reason: null
查了很多,基本是说把最开始设置的android.enableJetifier=true改为false,改完又出现新的bug
| +--- com.taobao.android:weex_inspector:0.24.2.4
| | \--- com.android.support:appcompat-v7:23.1.1
| | \--- com.android.support:support-v4:23.1.1
| | \--- com.android.support:support-annotations:23.1.1
改回android.enableJetifier=true(自动迁移现有的第三方库以使用 AndroidX)
\--- com.taobao.android:weex_inspector:0.24.2.4
\--- androidx.appcompat:appcompat:1.0.0
最后参照附录Android Studio 迁移 AndroidX 遇到 jetifier相关问题的记录文章修复
// 在工程目录下的gradle.properties文件内,添加要屏蔽的jar包的名称(既可以使用jetifier将工程迁移到AndroidX,又不需要更改旧的jar包)
android.jetifier.blacklist = old.jar,test.aar