范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

如何理解AndroidX与Jetpack的关系?

  作者:小虾米君
  谈到Jetpack,大家都以为是一堆框架,事实上它的内容要大的多。本文以大家熟知的Preference组件为切入点,逐步探究它的前世今生。透过 Preference 组件的变迁,看懂 Support库、AndroidX、Jetpack 之间的关系
  Preference 作为设置画面的标准实现,大家都不陌生。这个组件跟随Android系统一同诞生,之后便不断地变更。先是Support库 中出现了独立版本,接着整合到了AndroidX 中,最后在Android 10的时候完全废弃了SDK版本。
  1. Preference的设计
  Preference 组件的API设计得非常简单、清晰。 PreferenceActivity或PreferenceFragment管理画面的生命周期和事件交互  PreferenceScreen构建整个设置列表  PreferenceCategory和Preference展示一组或单个设置条目
  2. 落寞的SDK
  Preference组件是Android 1.0发布就引入的元老级组件,那会 RecyclerView 还未推出,自然采用经典的ListView 构建整个设置列表。
  使用起来非常简单,跟普通视图的写法并无二致。                          ... public class SettingsActivity extends PreferenceActivity {     public void onCreate(Bundle bundle) {         super.onCreate(bundle);         addPreferencesFromResource(R.xml.my_preference_layout);     } }
  原理也不复杂:  PreferenceManager和PreferenceInflater负责解析Preference布局构建Preference实例树  PreferenceScreen采用Preference实例树创建PreferenceGroupAdapter实例,并绑定到ListView视图  Adatper#getView()回调到各Preference组件的onBindView()去准备相应的View视图
  ListView的性能欠佳,不再适应复杂的设置画面,尤其是内容众多的系统设置App。  3. 混战的Support库
  Support库 是为新API提供向后兼容性的支持库,包含大量应用组件、视图、Material Design 等功能类。重新改写的Preference 组件也包含其中。
  依据兼容API版本的不同,Support库的分支众多且凌乱,使用起来也愈发繁琐和呆板。
  V7包
  Preference组件的变更首次出现在Support库的V7包,主要是将SDK版本的Preference组件拷贝过来进行了重写。
  对外的API只是微调,区别大体集中在内部的实现细节上:  不再提供专用的PreferenceActivity,只提供面向Fragment的专用类  构建设置列表的PreferenceScreen改为性能更加优秀的RecyclerView来实现  新增PreferenceViewHolder类,用以复用设置条目的视图  Preference移除onBindView() API,新增 onBindViewHolder() 来向RecyclerView提供条目的视图 另外,针对实现变化较大的API,在原有命名上增加Compat字样,比如PreferenceFragment改为PreferenceFragmentCompat 。
  使用的话需导入额外依赖:  implementation "com.android.support:preference-v7:28.0.0"
  另外要注意的是Fragment里加载布局的API由addPreferencesFromResource()改为 setPreferencesFromResource() 。由于API只是微调,其他使用起来几乎没有变化。 public static class PrefsFragment extends PreferenceFragmentCompat {     @Override     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {         setPreferencesFromResource(R.xml.preferences, rootKey);     } }
  V14包
  第二次变更发生在V14包,区别只是将命名里的 Compat 字样去掉了,弱化了和SDK版本的API差异。
  比如:  PreferenceFragmentCompat → PreferenceFragment  SwitchPreferenceCompat → SwitchPreference  PreferenceDialogFragmentCompat → PreferenceDialogFragment
  导入只需要细微调整即可:  implementation "com.android.support:preference-v14:28.0.0"
  V17包
  随着Android系统逐渐流行到TV等大屏设备,Google推出了 Leanback 导航模式,并引入到了V17中。Preference组件也针对Leanback模式进行了跟进,新增了一系列新组件。
  4. 一统江湖的AndroidX
  Support库愈加臃肿的分支和呆板的管理方法困扰着开发者。Google同样不胜其烦,终于推出了`AndroidX`。期望采用全新的包名和版本管理方法彻底解决这个困境。
  比如Support库各分支下Preference组件在AndroidX下的对应关系:
  使用也很方便,只需指定对应的包名和版本即可:      def preference_version = "1.1.1"     implementation "androidx.preference:preference:$preference_version"
  AndroidX和原有Support库的API对应关系,可以到官方的映射表里进行查询:  包的关系: https://developer.android.com/jetpack/androidx/migrate/artifact-mappings  类的映射关系: https://developer.android.google.cn/jetpack/androidx/migrate/class-mappings
  和Support库到底有无区别?
  将最核心的Preference类进行对比,可以发现:除了格式、书写风格的差异以外,代码逻辑几乎完全一致。
  再比如AndroidX里提供的PreferenceFragment类,其实现和Support库的版本几乎是一样的。
  AndroidX replaces the original support library APIs with packages in the   androidx   namespace. Only the package and Maven artifact names changed; class, method, and field names did not change.
  像官方描述的那样,AndroidX是针对Support库的整合和替代,区别仅仅体现在仓库的地址和包名。正因为此,AndroidX拥有清晰统一的版本管理,开发者能便捷和灵活地使用。
  ROM开发需留意
  之前,Preference组件等新API分散在Support库的各个分支包里,源文件也会集成到AOSP源码,ROM厂商可以修改。
  比如V14包的Preference组件在AOSP源码的对应位置如下。
  /frameworks/support/v14/preference/src/android/support/v14/preference/
  Android 9开始整合到了AndroidX里,但为了过渡,源文件在AOSP源码里仍然保留。也就是我们仍然可以修改其源码。
  /frameworks/support/preference/src/main/java/androidx/preference/
  Android 10开始全面转向AndroidX,彻底废弃Support库的使用。AOSP源码里也不再集成源文件,只提供了对应的AAR包,这也使得ROM厂商更改实现变得困难,需要额外留意。
  /prebuilts/sdk/current/androidx/m2repository/androidx/preference/
  如何迁移至AndroidX
  为了简化向后兼容的开发工作,将Support库全面迁移至AndroidX极为必要,设置如下的Gradle 插件标志即可。  android.useAndroidX :Android 插件会使用对应的 AndroidX 替代Support库 android.enableJetifier :Android 插件会通过重写其二进制文件来自动迁移现有的第三方库,以使用 AndroidX 依赖项
  当然在AndroidStudio菜单里也可以手动地迁移至AndroidX: Menu  → Refactor  → Migrate to AndroidX 。
  更详细的迁移细节可以参考如下这篇文章:
  https://www.jianshu.com/p/41de8689615d
  AndroidX的构成
  依照官方提供的AndroidX构成列表,我概括并制作了一张AndroidX的构成图。
  可以看到,实际上AndroidX在集成了Support库的以外,还涵盖了众多知名的Jetpack框架,这些框架实际上来源于2017年发布的Android Architecture Components(AAC)。  5. 短暂的AAC库
  Android App开发有很多痛点,包括Activity/Fragment生命周期的管理较为呆板,线程间数据传递的复杂,SQLite封装的繁琐等等。为了改善这些状况并对App架构进行指导,Google IO 2017上发布了 Android Architecture Components ,简称AAC 。
  它包含了几个较为经典的框架:  Lifecycle  LiveData  ViewModel  Room  其他的还有 Paging 、Navigation 和WorkManager
  同时Google还给Android开发者展示了推荐的应用架构,随着Jetpack家族的日益壮大,先在看来这个架构图略显简单。
  AAC库在完善的过程中,和Support库一起,也逐步往AndroidX中迁移,并孕育出一个更大更强的概念Jetpack。  6. Jetpack又是何方神圣
  短短一年后,Android Architecture Components就退出了舞台,Google IO 2018上发布了全新的Jetpack开发套件。
  `Jetpack`的官方构成图可以看出来:  核心的 Architecture 模块涵盖了熟知的框架,前身就是去年发布的AAC库 以及从 Support 库整合过来的包,比如Preference 、Framgent 、AppCompat 等 除此之外,还包括 KTX 和Test 工具包等
  Android Jetpack is a set of libraries, tools and architectural guidance to help make it quick and easy to build great Android apps. It provides common infrastructure code so you can focus on what makes your app unique.
  所以说,将Jetpack理解为一系列框架不够准确。实际上它是包含了框架、KTX、开发工具和开发向导的开发套件,期望在多个层面提升与Android开发的效率。  提供Android App开发的最佳实践  消除大量的样板代码,帮助开发者更轻松地编写优质应用  提供向后兼容性,在不同版本、不同配置的设备上提供一致性的开发体验  改变混乱的散碎的版本管理
  和AndroidX到底啥关系?
  Jetpack开发套件的源码管理在AndroidX内,包括之前的Support库,还有后来吸收的AAC库等等。简要绘制了一下Jetpack的演变图。(画着画着,竟画成了Android机器人的形象,哈哈)
  非要总结下Jetpack和AndroidX关系的话,像fundroid大神描述的那样比较贴切。
  AndroidX是对SDK以外API的内部管理包,Jetpack则是对外宣传的开发套件。
  "AndroidX"的名字也很酷啊,那为什么不直接用它来进行宣传? 个人的一些理解:  "AndroidX"的命名过于抽象、不易理解,也没有特别的含义  "Jetpack"本意是喷气背包、助推器的意思,它更能传达助力开发效率腾飞的设计初衷,也易于理解和传颂。再搭配上Android Logo塑造一个火箭机器人的形象,非常有趣和具备辨识度  7. Jetpack大事记2011年3月,Support库 V4包发布首个版本  2014年10月,Support库新增RecyclerView,AppCompat支持  2015年8月,Support库新增Preference支持  2016年2月,Support库新增VectorDrawable支持  2017年5月17日,Google IO 2017 宣布推出 Android Architecture Components  2017年9月21日,Android Architecture Components 1.0.0 beta版正式发布  2018年3月,Support库代码逐步整合至AndroidX  2018年5月8日,Android Architecture Components的代码逐步迁至AndroidX  2018年9月21日,Google IO 2018 推出 AndroidX ,Jetpack开发套件 一同发布,Support库终结并转向AndroidX 2019年5月7日,Jetpack  CameraX  1.0.0 alpha版发布 2020年7月22日,Jetpack  Hilt  1.0.0 alpha版发布 2021年3月10日, Compose  1.0.0 beta版发布
  8. Googleの野望
  Android的分支众多、迭代太快,开发者疲于应对。Google一直在试图改变这种混乱局面,从经典的 Support库 ,到变革的AAC库 ,再到持续火爆的Jetpack套件 。
  与此同时,随着Android系统愈加完善,SDK也趋于稳定,一年一度的OSV终将是小修小补。但行业的持续发展必将催生层出不穷的新理念、新技术。Google自然不会停下脚步,它将以更高频次、更大范围的动作去变革和应对,而这多将聚焦在SDK以外的领域,比如Jetpack、MAD等。
  MAD ,全称Modern Android Development ,是Google针对Android平台的全新开发理念。它站在比Jetpack更高的视野,旨在通过语言、工具、发行格式、框架等多个层面去指导新型的Android开发。
  在Jetpack套件以外MAD还囊括了诸多内容,包括:  持续改进的官方IDE, Android Studio  Android平台首推的 Kotlin 开发语言 先进的 Android App Bundle 发行格式 未来的UI开发方式 Compose 工具包
  可以说, MAD 是每个Android开发者都应了解和掌握的重要技术,后续我将解读这个全新的开发理念。 最后
  在这里还分享一份由大佬亲自收录整理的学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料
  这些都是我现在闲暇时还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效地帮助大家掌握知识、理解原理,帮助大家在未来取得一份不错的答卷。
  当然,你也可以拿去查漏补缺,提升自身的竞争力。
  真心希望可以帮助到大家,Android路漫漫,共勉!
  如果你有需要的话,只需私信我【进阶】即可获取

准备配置一台电脑,预算5000,在线大神们推荐一下?5000块预算搭配电脑现阶段组装电脑的性价比不是很高,如果是刚需的话,那么建议就是将显卡下调,作为过渡显卡使用,如果上全新的显卡的话,那么整机配置就会很低了。下面给你推荐搭配一套全一加9RT和小米11之间,买哪款性价比更高?根据买新不买旧的原则,小芳个人是更加倾向于一加9RT这款手机会更多一些的。不过大家在实际购买手机的过程当中还是要将自身的需求以及两款手机的各自优缺点相结合,才能够做出最合理的选择。小米手机越来越难用是为什么?所有品牌的手机在用久后都会越来越难用,这是自然规律,不可能有用得越久越好用的手机,不仅手机是这样,其他产品也一样。是因为小米手机越看越好用了,黑小米越看越难了,小米越黑越强了。一直想买相机,尼康D850价格还比较贵,在这个阶段是买便宜下来的尼康D810还是等等价格再下来点直接上D850比较合算?我先给你说一下换D850相机后遇到的一些问题1用D850拍摄的RAW格式照片,老版本的PS已经不具备打开的能力,需要安装更高版本的PS才行,我现在用的CC2018(其它软件没用过,有多少人中了头条的毒,每天起床第一件事就是打卡头条?这问提得很可爱!我很高兴在此吐露一二句。今日头条的确是个热闹平台,还真是百花齐放百家争鸣,哦哦,这样表达还远远不够贴切现实作为我对该平台的评价是情暖人间真善美!我除了吃饭须要做的事航天员王亚平为什么不剪掉长头发?我看视频里,王亚平头发时而飘向左,时而飘向右,时而竖起来,王亚平还时不时的用手去撸一下头发。我也曾担心,会摩擦,从而产生小火光。但后来仔细想想,这个问题连我都想的到,我国航天科技人华为P系列手机,目前为止哪一款最经典最好用?最经典是P20最好用是下一台最经典,最好用的莫过于华为p40pro,无论是性能,拍照,做工,外观工艺,握持手感都做到了绝佳!华为p系列真正发力于p9,经典徕卡双摄,但性能太差,p2现在所谓的微单不就是以前的卡片机么?微单其实早就有了,只不过之前都是C画幅的。现在微单都是全画幅的了,目前微单炒作很厉害,一部小小的微单,价格非常高,远远高于之前的单反,几乎与单反旗舰机价格差不多了。微单机身虽然小,手机里的指南针是什么原理?其实这个问题很简单,手机装入软件能分出东南西北是因为手机中内置了电子指南针,电子指南针又称作电子罗盘,电子罗盘一般来说有两大类材料能够实现,一种是霍尔材料,一种就是磁阻材料。先来讲被忽略的骁龙888旗舰三星E4屏幕超高颜值,价格不到3000元在过去几年的时间里,手机厂商的竞争愈发强烈,这就使得大家都开始走性价比路线,其中最具代表的品牌就是红米手机。作为小米旗下主攻性价比的子品牌,红米每次推出的新品都是极具性价比的。如今零跑汽车回应将进行香港IPO融资10亿美元消息不实10月12日,针对市场关于零跑汽车考虑香港IPO融资10亿美元的传闻,零跑汽车对媒体表示,消息不实。公开资料显示,浙江零跑科技股份有限公司(leapmotor)于2015年12月在
全链路服务体验,飞书深诺跨境营销技术解决方案全面升级2021年7月8日,飞书深诺在上海成功举办SinoClick跨境营销,岂止一点技术发布会,正式宣布旗下跨境营销一站式解决方案飞书逸途SinoClick迎来全新升级,首度集结三大技术2021首届CTIS消费者科技及创新展览会重磅亮相上海2021年6月9日(中国,上海)6月9日,备受行业瞩目的2021首届消费者科技及创新展览会(简称CTIS)在上海新国际博览中心隆重开幕。本届CTIS共为期三天,将科技贸易创新有机融专访丨击碎勒索病毒,保障SaaS安全,派拓网络解读零信任安全架构2021年5月7日,美国成品油管道运营商科洛尼尔遭遇勒索病毒攻击,并触发美国进入紧急状态的事件,再一次让行业绷紧了神经。勒索病毒并不是新鲜事物,可近年来,它一直就像幽灵一样游荡在人全新防飞翘风嘴加持,戴森Supersonic吹风机可减少高达62的飞翘自2016年戴森Supersonic吹风机面世以来,戴森以颠覆性的科技革新了传统的护发造型行业,影响和塑造着大众日常的干发造型习惯和生活方式,成为高科技美发行业毋庸置疑的革新者及引集成高ISP画质和AI算力,酷芯微电子发布新一代AI相机芯片AR93412021年7月7日,上海酷芯微电子有限公司在世界人工智能大会上隆重发布了新一代AI相机芯片AR9341。作为酷芯微电子推出的第二代超高清智能相机芯片,AR9341是在听取了业界多家评测丨原厂QLC颗粒加持,Crucial英睿达P22TBSSD能飙到什么程度?无论是高分辨率的视频需求,还是着重于渲染的游戏与设计需求,都越来越依赖于强大稳定且高寿命的SSD固态硬盘。作为美光旗下的消费级品牌,Crucial英睿达的P2系列NVMeSSD,正BOE(京东方)重磅亮相DIC2021屏之物联开启显示创新新未来6月30日7月2日,2021年国际显示技术及应用创新展(DIC2021)在上海隆重举行。在6月29日举行的中国国际显示产业高峰论坛上,BOE(京东方)董事长陈炎顺作为中国光学光电子覆盖全数据周期管理,联想凌拓与万国数据达成战略合作2021年5月25日,致力于驱动中国企业释放数据潜能并加速数字化转型的领先智能数据管理解决方案和服务供应商联想凌拓科技有限公司(以下简称联想凌拓)和中国领先的高性能数据中心运营商和希捷2021Datasphere线上峰会生态伙伴携手开启数据新径界2021年6月25日,全球领先的数据存储基础设施解决方案提供商希捷科技今日举行了ANewWaytoData数据新径界希捷科技Datasphere2021线上峰会。本次峰会中,希捷和斑马技术EC50EC55移动终端如何助力企业打造无缝全渠道体验?作为致力于助力企业一线获得性能优势的解决方案提供商,斑马技术公司近日公布了其2021全球消费者调查结果。结果显示,疫情之下,消费者更青睐采用移动端下单和智能结帐的解决方案,而六成受助力云上创新,亚马逊云科技发布全球优势植根本地中国战略2021年7月21日在7月21日22日召开的2021亚马逊云科技中国峰会上海站上,亚马逊云科技正式发布全球优势植根本地中国战略。通过亚马逊云科技和亚马逊全球的511优势,打造中国业