欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android Studio 3.4.2 之后创建的项目,如何恢复低版本API,AndroidX 如何恢复 support 包

程序员文章站 2022-06-08 12:13:41
...

Android Studio 3.4.2 之后创建的项目,如何恢复低版本API,AndroidX 如何恢复 support 包

从Android Studio 3.4.2开始,我发现新建的项目已经强制勾选使用AndroidX架构了。但是APP只在Android 6 上出问题了,我该怎么办?

只能在Android 6 上进行调试呗?但是每个版本的Android源码又是不一样的,如果只在Android 6 上出问题,很可能就是Android 6和其他版本的源码不同导致的。

想看源码只能把 compileSdkVersion 编译的版本改成 23,syn 一下,一切都是ok的,完美,安装到机之上试试。这时候发现一直编译不过啊。麻蛋,梦想破灭了,一直报下面错误。

Android Studio 3.4.2 之后创建的项目,如何恢复低版本API,AndroidX 如何恢复 support 包

一看就是降低了版本,高版本的资源在低版本找不到了,以前也遇到过呀,就是把这些用不到的东西删了呗。

在xml里面,各种删,发现还是编译不过啊。最后把appcompat和constraintlayout引用都删了,终于报了一个能看懂的日志

错误: 程序包 androidx.appcompat.app 不存在

发现不对呀,以前的 appcompat 不是在 support 包里的吗?现在怎么跑到 androidx 里面了? androidx 是什么鬼啊

// 看了下 app/build.gradle 文件下 appcompat 的确是 androidx 下的
implementation 'androidx.appcompat:appcompat:1.1.0'

赶紧查了下androidx 是什么,不懂的朋友可以自行去查看。如果还没迁移的,可以参考下如何迁移到 androidx 。

support 到 28.0.0 就不会再有更新,以后肯定要迁移的,就是现在不会迁移也可以提前了解下

点击查看AndroidX官方介绍文档

点击查看AndroidX官方迁移文档

告诉你如何迁移,还列出了从旧工件到新工件的当前映射

具体注意事项可以看下这篇介绍,里面有各种莫名问题的解决方案,Android:你好,androidX!再见,android.support

发现Android Studio 3.4.2开始,我发现新建的项目已经强制勾选使用AndroidX架构了。

Android Studio 3.4.2 之后创建的项目,如何恢复低版本API,AndroidX 如何恢复 support 包

但是 Android 6 肯定用不了 AndroidX 呀,该怎么办?

发现用不用 AndroidX 是 gradle.properties 下两个参数决定的

修改当前项目的 gradle.properties,两个参数都改为false

android.useAndroidX=false
android.enableJetifier=false

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

如果不要用AndroidX,两个都必须要要设置成false

还必须把 app/build.gradle 文件下所有 androidx 的包删除

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

我把appcompat的包重新改成了API 23 的一个 support包

implementation 'com.android.support:appcompat-v7:23.4.0'

发现还是报错呀,还是资源找不到的错误,AndroidManifest.xml 里面的 android:roundIcon 找不到

Android Studio 3.4.2 之后创建的项目,如何恢复低版本API,AndroidX 如何恢复 support 包

估计是 API 23 还不止圆图标,直接删了就好

麻蛋,苦了,发现还是报错呀,还是资源找不到的错误,drawable-v24/ic_launcher_foreground.xml 找不到,API 23 反正用不到 v24的资源,直接删了drawable-v24下的所有文件

Android Studio 3.4.2 之后创建的项目,如何恢复低版本API,AndroidX 如何恢复 support 包

???还是报错啊 mipmap-anydpi-v26\ic_launcher.xml 报错,看到 v26,API 23 肯定用不到,直接删了mipmap-anydpi-v26下的所有文件

Android Studio 3.4.2 之后创建的项目,如何恢复低版本API,AndroidX 如何恢复 support 包

好艰难啊,还是报错,MainActivity 里报错 androidx.appcompat.app

Android Studio 3.4.2 之后创建的项目,如何恢复低版本API,AndroidX 如何恢复 support 包

我们都改成了 support 包了,这个报错也可以理解,直接重新 import 就好

import android.support.v7.app.AppCompatActivity;

最后的最后,终于成功了,泪流满面

最好想了想,我这么做是不是很智障啊,看看有没有一键转换的,参看一键换成AndroidX的,找到了一键换成support包的有没有?可惜根本没有,看来google只想让你转成AndroidX,不想你转成support包

Android Studio 3.4.2 之后创建的项目,如何恢复低版本API,AndroidX 如何恢复 support 包

总结

要成功转到低版本要做以下五步(智障做法)

  1. gradle.properties,两个参数都改为false

    android.useAndroidX=false
    android.enableJetifier=false
    
  2. 把 app/build.gradle 文件下所有 androidx 的包删除,把appcompat的包重新改成了API 23 的一个 support包

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    
    implementation 'com.android.support:appcompat-v7:23.4.0'
    
  3. 直接删了drawable-v24下的所有文件

  4. 直接删了mipmap-anydpi-v26下的所有文件

  5. 重新 import AppCompatActivity

    import android.support.v7.app.AppCompatActivity;