AndroidX引发的“血案”

苦难磨炼一些人,也毁灭另一些人。——富勒

AndroidX的诞生

Google为什么要定制AndroidX方案呢?这个方案的定制的主要目的和作用是对遗留版本的Android library support的版本进行规整。比方说,Android support v4版本和Android appcompat v7版本,这两个包我想大部分的开发者都是接触过的,这里的4对应的其实就是Android sdk 4,对应的API版本是1.6,意思说的是,这个Android library support v4包是向下兼容到API 1.6版本,而v7自然就是对应的API 2.1的版本了。

AndroidX存在的意思?

这两个包历史存在的意义是什么呢?Google让他们存在的原因主要是因为很多的API并不是在Android出现的时候就有的,随着Android不断地发展,出现了很多新的API,比方说,Android3.0版本,这个版本是针对平板出的版本,在这个版本里提出了一个新的组件-fragment。这个组件可以拆分activity的结构,让页面更加的有条理。正是因为这个功能的优势,使得很多低版本的API也想去使用它,比方说1.6版本,那怎么办呢?于是就出现了Android library support v4包,这个包的作用就是向下兼容低版本的API,使得低版本的API也能使用类似高版本才能拥有的功能,不只是组件。

那么,AndroidX的意义是什么呢?随着Android版本不断的更迭,许多的新的API要不断的兼容老版本,而很多的老版本其实已经在市面上不多见了,但是这些v4,v7包依然还是去兼容老版本1.6,2.1其实是不太合理的,而且,我们经常会遇到版本不匹配的问题,导致有些三方库里用的v4版本或v7版本跟我们项目的冲突,使得项目错误混乱。因此Google就推出了AndroidX这个策略来解决这个问题。AndroidX推出后版本号从1.0开始记,之前的旧的策略不再进行维护,Google也吸取了之前经验,不再跟API的版本号挂钩命名support library。

如何迁移到AndroidX?

迁移到AndroidX很简单,Android studio提供了傻瓜式的操作方法,只需要对着你的项目名右击 → Refactor → Migrate to AndroidX,就会弹出如下图所示的窗口。
这里点击Migrate,Android Studio就会自动检查你项目中所有使用Android Support Library的地方,并将它们全部改成AndroidX中对应的库。另外Android Studio还会将你原来的项目备份成一个zip文件,这样即使迁移之后的代码出现了问题你还可以随时还原回之前的代码。

“血案”的发生

这个问题的产生是因为我的项目里集成了一个Android三方的库,这个库实质是不支持AndroidX的,而我自己的项目其实也是不支持AndroidX的,但是我自己的项目很好迁移,而一开始我也并不知道这个三方的库不支持AndroidX,我就这样把我的项目打包给业务方使用了,结果,业务方报出了一个问题。

“Failed to transform ‘C:\Users\sunshaochi.gradle\caches\modules-2\files-2.1\com.cardinfolink.smart.pos\PosSDK\2.4.1\268dff92bdc1203156a76ce134d8c1c2b38f29a2\PosSDK-2.4.1.aar’ using Jetifier. Reason: null. (Run with --stacktrace for more details.)”

因为我的项目是托管在我的私有maven上的,他们直接拉取的是我的aar包。但是就是因为这个三方的库不支持AndroidX,导致业务方就是拉不下来我的aar,还报了这个莫名其妙的错误。这个还是小问题,紧接着各种报红,各种提示。我的天,我接到他们的求助的时候我自己也傻眼了,我没干啥啊,我的天这是怎么回事啊?

我通查了整个项目通过比对我发现了正常项目与非正常项目的差异,就是AndroidX的迁移。是的,这个是关键点!我通过修改项目下的gradlr.properties文件里的配置解决了问题。

android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true

enableJetifier注释的解释是说,当这个字段设置为true的时候,自动会将三方的依赖库迁移到AndroidX,这个功能很imba,但是也会出现问题,就是当你的三方依赖库有不支持AndroidX的库的情况下,就会出问题。

AndroidX和Android Support Library中的库是非常不建议混合在一起使用的,因为它们可能会产生很多不兼容的问题。最好的做法是,要么全部使用AndroidX中的库,要么全部使用Android Support Library中的库。

那有人说了改成false就正常了不就可以了,不是很简单吗?是的,很简单,但是,如果单纯的改成false只是解决了表面的问题,实际上官方的建议是不要在项目里既使用AndroidX又包含非AndroidX的内容,会产生莫名其妙的问题。如果你不想找麻烦,还是老老实实地照着做吧,至少,我乖乖地这样做了,结果还是很好的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AndroidX是一个用于支持Android开发的开源软件库。它提供了一套新的Android支持库,用于替代旧的支持库。AndroidX的目标是提供更好的向后兼容性和更简洁的包结构。\[1\] 在使用AndroidX时,需要进行一些配置和处理。首先,在项目的gradle.properties文件中需要配置以下内容: ``` # 启用AndroidX生成支持的标志 android.useAndroidX=true # 启用Maven库转换的标志 android.enableJetifier=true ``` 这样可以确保项目使用AndroidX生成支持的库,并将旧的支持库转换为AndroidX的等效库。\[3\] 另外,在混淆文件proguard-rules中需要添加以下规则,以确保AndroidX的类和接口不被混淆: ``` -keep class com.google.android.material.** {*;} -keep class androidx.** {*;} -keep public class * extends androidx.** -keep interface androidx.** {*;} -dontwarn com.google.android.material.** -dontnote com.google.android.material.** -dontwarn androidx.** ``` 这样可以避免混淆导致的类找不到或出错的问题。\[2\] 总之,AndroidX是一个用于支持Android开发的软件库,通过配置和处理可以在Android Studio中使用AndroidX来替代旧的支持库。 #### 引用[.reference_title] - *1* [Android Studio迁移到AndroidX详细教程](https://blog.csdn.net/qq_45186002/article/details/105191107)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [AndroidStudio将support库迁移或改成Androidx](https://blog.csdn.net/qq_23849163/article/details/121400903)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Android Studio项目中使用 AndroidX支持库的相关配置说明](https://blog.csdn.net/qq_23900685/article/details/86777570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值