从Android Studio 3.4.2开始,我发现新建的项目已经强制勾选使用AndroidX架构了。但是APP只在Android 6 上出问题了,我该怎么办?
只能在Android 6 上进行调试呗?但是每个版本的Android源码又是不一样的,如果只在Android 6 上出问题,很可能就是Android 6和其他版本的源码不同导致的。
想看源码只能把 compileSdkVersion 编译的版本改成 23,syn 一下,一切都是ok的,完美,安装到机之上试试。这时候发现一直编译不过啊。麻蛋,梦想破灭了,一直报下面错误。
一看就是降低了版本,高版本的资源在低版本找不到了,以前也遇到过呀,就是把这些用不到的东西删了呗。
在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 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 找不到
估计是 API 23 还不止圆图标,直接删了就好
麻蛋,苦了,发现还是报错呀,还是资源找不到的错误,drawable-v24/ic_launcher_foreground.xml 找不到,API 23 反正用不到 v24的资源,直接删了drawable-v24下的所有文件
???还是报错啊 mipmap-anydpi-v26\ic_launcher.xml 报错,看到 v26,API 23 肯定用不到,直接删了mipmap-anydpi-v26下的所有文件
好艰难啊,还是报错,MainActivity 里报错 androidx.appcompat.app
我们都改成了 support 包了,这个报错也可以理解,直接重新 import 就好
import android.support.v7.app.AppCompatActivity;
最后的最后,终于成功了,泪流满面
最好想了想,我这么做是不是很智障啊,看看有没有一键转换的,参看一键换成AndroidX的,找到了一键换成support包的有没有?可惜根本没有,看来google只想让你转成AndroidX,不想你转成support包
要成功转到低版本要做以下五步(智障做法)
gradle.properties,两个参数都改为false
android.useAndroidX=false
android.enableJetifier=false
把 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'
直接删了drawable-v24下的所有文件
直接删了mipmap-anydpi-v26下的所有文件
重新 import AppCompatActivity
import android.support.v7.app.AppCompatActivity;