概述
使用Support库替代AndroidX
- 记录
- 背景
- 解决问题,把支持库从androidx降为android.support.v7
- 第一步 将compileSdkVersion、targetSdkVersion改回27
- 第二步,更改androidx相关依赖为support库
- 第三步 去除项目中对对androidx库里面资源的调用
- 第四步 去除项目中对对androidx库的配置
记录
最近在研究hook技术,在查找hook点的时候,难免要读到源码。在不同的sdk源码上,方法总是会有多多少少的变动。那我手里的设备是8.1的,也就是API27。把app的版本降到27,这样就可以跟27的源码了不是。结果遇到问题了。
目前我使用的Android studio版本是4.1,而从AS3.5之后,创建新项目,默认集成的support库从v7 调整为androidx了。问题来了,androidx最低可以支持的API版本是28,改成27,会报错。
背景
解决问题之前,我们先来看一下androidx是什么。
以下内容节选自我郭婶的博客,详情请去往到底什么是AndroidX?
Android系统在刚刚面世的时候,可能连它的设计者也没有想到它会如此成功,因此也不可能在一开始的时候就将它的API考虑的非常周全。随着Android系统版本不断地迭代更新,每个版本中都会加入很多新的API进去,但是新增的API在老版系统中并不存在,因此这就出现了一个向下兼容的问题。
举个例子,当Android系统发布到3.0版本的时候,突然意识到了平板电脑的重要性,因此为了让Android可以更好地兼容平板,Android团队在3.0系统(API 11)中加入了Fragment功能。但是Fragment的作用并不只局限于平板,以前的老系统中也想使用这个功能该怎么办?于是Android团队推出了一个鼎鼎大名的Android Support Library,用于提供向下兼容的功能。比如我们每个人都熟知的support-v4库,appcompat-v7库都是属于Android Support Library的,这两个库相信任何做过Android开发的人都使用过。
但是可能很多人并没有考虑过support-v4库的名字到底是什么意思,这里跟大家解释一下。4在这里指的是Android API版本号,对应的系统版本是1.6。那么support-v4的意思就是这个库中提供的API会向下兼容到Android 1.6系统。它对应的包名为android.support.v4.app。
类似地,appcompat-v7指的是将库中提供的API向下兼容至API 7,也就是Android 2.1系统。它对应的包名为android.support.v7.appcompat
可以发现,Android Support Library中提供的库,它们的包名都是以android.support.*开头的。
但是慢慢随着时间的推移,什么1.6、2.1系统早就已经被淘汰了,现在Android官方支持的最低系统版本已经是4.0.1,对应的API版本号是15。support-v4、appcompat-v7库也不再支持那么久远的系统了,但是它们的名字却一直保留了下来,虽然它们现在的实际作用已经对不上当初命名的原因了。
那么很明显,Android团队也意识到这种命名已经非常不合适了,于是对这些API的架构进行了一次重新的划分,推出了AndroidX。
简而言之,androidx是android操作系统的扩展库,我们平时开发用到的很多API都来自这个库。
解决问题,把支持库从androidx降为android.support.v7
第一步 将compileSdkVersion、targetSdkVersion改回27
报错Android resource linking failed,原因就是前文提过的项目中用到了androidx的库,最低支持api28。如果你这里直接改到28,就没问题了,但是我是想要27的,所以只能继续解决问题。
第二步,更改androidx相关依赖为support库
主要就是support库的替换
没更改之前
implementation 'androidx.appcompat:appcompat:1.1.0'
更改之后
implementation 'com.android.support:appcompat-v7:28.0.0'
一堆报错,还是Android resource linking failed,原因是我们的项目里仍然有对androidx库里面资源的调用。
第三步 去除项目中对对androidx库里面资源的调用
错误调用路径,日志里都有提示,依次打开去除,比如:
G:workspace2020Test2appsrcmainresvaluesthemes.xml:3:5
G:workspace2020Test2appsrcmainresvalues-nightthemes.xml:3:5
打开文件发现都是红色标识,说明这些资源在support中找不到
将Theme.MaterialComponents.DayNight.DarkActionBar主题,替换为Support库中的存在的主题,比如Theme.AppCompat.Light.NoActionBar,剩下的爆红该删除的删除。
还有就是代码里的调用,androidx也要换成Support库
但是这时候我发现,代码显示找不到Support库
此时运行的话仍然显示linking failed
于是我打开Project Structure,看项目依赖。没错
但是他上面有一个All Moudules,显示的依赖,明显是有问题的
于是我全局搜索了下,哦,好吧,还有好多地方没改。但是重点是android.useAndroidX=true这个配置
第四步 去除项目中对对androidx库的配置
打开这个文件夹,可以看到两个配置。最重要的倒不是我搜到android.useAndroidx=true,而是android.enableJetifier=true这个配置。
如果你是一个新项目,使用AndroidX相关依赖,需要在gradle.properties文件里添加配置:
android.useAndroidX=true
android.enableJetifier=true
如果你想使用AndroidX,但是之前的不迁移,可以这样配置:
android.useAndroidX=true
android.enableJetifier=false
那我们现在并不想使用Androidx,就把这两行干掉就对了。
over
最后
以上就是疯狂皮带为你收集整理的Android Studio使用Support库而不是AndroidX记录背景解决问题,把支持库从androidx降为android.support.v7的全部内容,希望文章能够帮你解决Android Studio使用Support库而不是AndroidX记录背景解决问题,把支持库从androidx降为android.support.v7所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复