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

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 包_第1张图片

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

在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 包_第2张图片

但是 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 包_第3张图片

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

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

Android Studio 3.4.2 之后创建的项目,如何恢复低版本API,AndroidX 如何恢复 support 包_第4张图片

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

Android Studio 3.4.2 之后创建的项目,如何恢复低版本API,AndroidX 如何恢复 support 包_第5张图片

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

Android Studio 3.4.2 之后创建的项目,如何恢复低版本API,AndroidX 如何恢复 support 包_第6张图片

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

import android.support.v7.app.AppCompatActivity;

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

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

Android Studio 3.4.2 之后创建的项目,如何恢复低版本API,AndroidX 如何恢复 support 包_第7张图片

总结

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

  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;
    

你可能感兴趣的:(错误分析)