升级targetSdkVersion至33(以及迁移至Androidx)

本文介绍了将Android项目迁移至AndroidX的方法。包括设置相关参数、一键迁移、手动修改未自动迁移部分,更新库版本,升级gradle,修改依赖路径,注销自定义路径,适配webView和截屏服务等内容,助力开发者完成项目迁移。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.设置 android.useAndroidX=true 和 android.enableJetifier=true
2.一键迁移至androidx:Refactor -> Migrate to Androidx
3.手动修改未能自动迁移到androidx的部分:

android.support.v4.view.ViewPager.PageTransformer -> androidx.viewpager.widget.ViewPager.PageTransformer

android.support.annotation.NonNull -> androidx.annotation.NonNull

android.support.annotation.Nullable -> androidx.annotation.Nullable

android.support.v4.content.ContextCompat -> androidx.core.content.ContextCompat

android.support.v7.widget.DividerItemDecoration -> androidx.recyclerview.widget.DividerItemDecoration

android.support.v7.widget.RecyclerView -> androidx.recyclerview.widget.RecyclerView

android.arch.lifecycle.MutableLiveData -> androidx.lifecycle.MutableLiveData

android.arch.lifecycle.ViewModel -> androidx.lifecycle.ViewModel

android.support.v7.widget.LinearLayoutManager -> androidx.recyclerview.widget.LinearLayoutManager

android.support.constraint.ConstraintLayout -> androidx.constraintlayout.widget.ConstraintLayout

android.support.constraint.Group -> androidx.constraintlayout.widget.Group

android.support.v4.widget.NestedScrollView -> androidx.core.widget.NestedScrollView

android.support.v4.widget.SwipeRefreshLayout -> androidx.swiperefreshlayout.widget.SwipeRefreshLayout

android.support.constraint.Guideline -> androidx.constraintlayout.widget.Guideline

android.support.design.widget.CoordinatorLayout -> androidx.coordinatorlayout.widget.CoordinatorLayout

android.support.design.widget.AppBarLayout -> com.google.android.material.appbar.AppBarLayout

android.support.design.widget.CollapsingToolbarLayout -> com.google.android.material.appbar.CollapsingToolbarLayout

android.support.v7.widget.Toolbar -> androidx.appcompat.widget.Toolbar

android.support.v4.view.ViewPager -> androidx.viewpager.widget.ViewPager

android.support.multidex.MultiDexApplication -> androidx.multidex.MultiDexApplication

android.support.v4.view.PagerAdapter -> androidx.viewpager.widget.PagerAdapter

android.support.v7.util.DiffUtil -> androidx.recyclerview.widget.DiffUtil

android.support.v4.app.Fragment -> androidx.fragment.app.Fragment

android.support.v4.app.FragmentActivity -> androidx.fragment.app.FragmentActivity
android.support.annotation.IntDef -> androidx.annotation.IntDef

android.support.annotation.RequiresApi -> androidx.annotation.RequiresApi

android.support.v4.app.ActivityCompat -> androidx.core.app.ActivityCompat

android.support.v4.widget.Space -> androidx.legacy.widget.Space(为使用space,还需要implementation 'androidx.legacy:legacy-support-v4:1.0.0)

android.support.annotation.ColorRes -> androidx.annotation.ColorRes

android.support.annotation.StringRes -> androidx.annotation.StringRes

android.support.v7.widget.GridLayoutManager -> androidx.recyclerview.widget.GridLayoutManager

android.support.annotation.LayoutRes -> androidx.annotation.LayoutRes

android.support.v4.util.ArrayMap -> androidx.collection.ArrayMap

android.support.design.internal.BottomNavigationMenuView -> com.google.android.material.bottomnavigation.BottomNavigationMenuView

android.support.design.widget.BottomNavigationView -> com.google.android.material.bottomnavigation.BottomNavigationView

android.support.v7.widget.SimpleItemAnimator -> androidx.recyclerview.widget.SimpleItemAnimator

android.support.v8.renderscript. -> androidx.renderscript.

android.support.design.widget.FloatingActionButton -> com.google.android.material.floatingactionbutton.FloatingActionButton

android.support.v7.widget.PagerSnapHelper -> androidx.recyclerview.widget.PagerSnapHelper

android.support.v7.widget.AppCompatImageView -> androidx.appcompat.widget.AppCompatImageView

android.arch.lifecycle.ViewModelProviders -> androidx.lifecycle.ViewModelProviders

android.arch.lifecycle.Observer -> androidx.lifecycle.Observer

android.support.v4.app.FragmentManager -> androidx.fragment.app.FragmentManager

android.support.v4.app.FragmentPagerAdapter -> androidx.fragment.app.FragmentPagerAdapter

android.support.v7.app.AppCompatActivity -> androidx.appcompat.app.AppCompatActivity

android.support.transition.Transition -> androidx.transition.Transition

android.support.v7.app.ActionBar -> androidx.appcompat.app.ActionBar

android.support.v7.app.AppCompatDelegate -> androidx.appcompat.app.AppCompatDelegate


4.更新 ButterKnife 和 ShadowLayout 库到androidx兼容版本

implementation 'com.jakewharton:butterknife:8.8.1' -> implementation 'com.jakewharton:butterknife:10.2.1'

annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' -> annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1' 

5.升级gradle

com.android.tools.build:gradle:3.4.1 -> com.android.tools.build:gradle:7.1.2

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

6.根目录的build.gradle文件中的依赖路径全部改为https的

7.注销build.gradle文件中的自定义路径(gradle tool插件7.x版本好像不支持自定义路径)

variant.outputs.all {
            // 自定义输出路径
            if (variant.buildType.name == "release") {
                variant.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + File.separator + "app/build/outputs/apk/release")
            } else {
                variant.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + File.separator + "app/build/outputs/apk/debug")
            }
        }

8.适配webView

mWebSettings.setAppCachePath(appCachePath);

webView.getSettings().setAppCacheEnabled(false); -> webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

mWebSettings.setAppCacheEnabled(true) -> mWebSettings.setCacheMode(WebSettings.LOAD_DEFAULT);

9.适配截屏服务:

在manifest.xml文件中添加权限和service

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.MEDIA_PROJECTION" />

<service

            android:name=".xxxService"
            android:foregroundServiceType="mediaProjection"
            tools:node="replace"
            android:exported="false"/>

10.其他改动待补充


 

AndroidX是一个由Google维护的框架,旨在提供更稳定、统一的Android库替代旧的Support Library。如果你需要将项目从使用旧版Support Library迁移AndroidX,可以按照以下步骤进行: 1. **添加 Gradle插件**:在`build.gradle (Module: app)`文件中,确保已经包含了AndroidX的插件: ```groovy plugins { id 'com.android.application' id 'kotlin-android' id 'com.google.gms.google-services' id 'androidx.navigation.safeargs' // 如果有使用导航组件 } ``` 然后,在`dependencies`块中添加对AndroidX的依赖。 2. **更新依赖**:移除旧版Support Library的依赖,例如`implementation 'com.android.support:appcompat-v7:28.0.0'`替换为: ```groovy implementation 'androidx.appcompat:appcompat:1.4.0' // 最新版本 ``` 3. **查找并替换**:运行`./gradlew app:generateSignedApk --variant=debug --no-daemon`命令,并检查构建日志中的警告,它们通常会指出哪些地方需要修改,比如`AppCompatActivity`替换为` AppCompatActivity`,`v7包`改为`material包`等。 4. **处理 FragmentTransaction 和 SupportV4 动态引入**:如果项目中有使用Fragment,确保导入`androidx.fragment:fragment-ktx`或手动替换`FragmentActivity`和`FragmentManager`。 5. **更新 AndroidManifest.xml**:在`<application>`标签内添加`tools:replace="android:allowBackup"`,然后替换`uses-sdk`部分的`support-version-sdk`为`targetSdkVersion`。 6. **测试应用**:完成以上步骤后,你需要重新编译和测试应用,确保功能正常。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值