游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

如何理解AndroidX与Jetpack的关系?

  作者:小虾米君
  谈到Jetpack,大家都以为是一堆框架,事实上它的内容要大的多。本文以大家熟知的Preference组件为切入点,逐步探究它的前世今生。透过Preference组件的变迁,看懂Support库、AndroidX、Jetpack之间的关系
  Preference作为设置画面的标准实现,大家都不陌生。这个组件跟随Android系统一同诞生,之后便不断地变更。先是Support库中出现了独立版本,接着整合到了AndroidX中,最后在Android10的时候完全废弃了SDK版本。
  1。Preference的设计
  Preference组件的API设计得非常简单、清晰。PreferenceActivity或PreferenceFragment管理画面的生命周期和事件交互PreferenceScreen构建整个设置列表PreferenceCategory和Preference展示一组或单个设置条目
  2。落寞的SDK
  Preference组件是Android1。0发布就引入的元老级组件,那会RecyclerView还未推出,自然采用经典的ListView构建整个设置列表。
  使用起来非常简单,跟普通视图的写法并无二致。PreferenceScreenandroid:titlestringmypreferencesettingsPreferenceCategoryandroid:titlestringmypreferencegeneralPreferenceandroid:fragmentcom。android。settings。applications。ManageApplicationsandroid:keyappandroid:titlestringmypreferencegeneralappsPreferenceCategory。。。PreferenceScreenpublicclassSettingsActivityextendsPreferenceActivity{publicvoidonCreate(Bundlebundle){super。onCreate(bundle);addPreferencesFromResource(R。xml。mypreferencelayout);}}
  原理也不复杂:PreferenceManager和PreferenceInflater负责解析Preference布局构建Preference实例树PreferenceScreen采用Preference实例树创建PreferenceGroupAdapter实例,并绑定到ListView视图AdatpergetView()回调到各Preference组件的onBindView()去准备相应的View视图
  ListView的性能欠佳,不再适应复杂的设置画面,尤其是内容众多的系统设置App。3。混战的Support库
  Support库是为新API提供向后兼容性的支持库,包含大量应用组件、视图、MaterialDesign等功能类。重新改写的Preference组件也包含其中。
  依据兼容API版本的不同,Support库的分支众多且凌乱,使用起来也愈发繁琐和呆板。
  V7包
  Preference组件的变更首次出现在Support库的V7包,主要是将SDK版本的Preference组件拷贝过来进行了重写。
  对外的API只是微调,区别大体集中在内部的实现细节上:不再提供专用的PreferenceActivity,只提供面向Fragment的专用类构建设置列表的PreferenceScreen改为性能更加优秀的RecyclerView来实现新增PreferenceViewHolder类,用以复用设置条目的视图Preference移除onBindView()API,新增onBindViewHolder()来向RecyclerView提供条目的视图另外,针对实现变化较大的API,在原有命名上增加Compat字样,比如PreferenceFragment改为PreferenceFragmentCompat。
  使用的话需导入额外依赖:implementationcom。android。support:preferencev7:28。0。0
  另外要注意的是Fragment里加载布局的API由addPreferencesFromResource()改为setPreferencesFromResource()。由于API只是微调,其他使用起来几乎没有变化。publicstaticclassPrefsFragmentextendsPreferenceFragmentCompat{OverridepublicvoidonCreatePreferences(BundlesavedInstanceState,StringrootKey){setPreferencesFromResource(R。xml。preferences,rootKey);}}
  V14包
  第二次变更发生在V14包,区别只是将命名里的Compat字样去掉了,弱化了和SDK版本的API差异。
  比如:PreferenceFragmentCompatPreferenceFragmentSwitchPreferenceCompatSwitchPreferencePreferenceDialogFragmentCompatPreferenceDialogFragment
  导入只需要细微调整即可:implementationcom。android。support:preferencev14:28。0。0
  V17包
  随着Android系统逐渐流行到TV等大屏设备,Google推出了Leanback导航模式,并引入到了V17中。Preference组件也针对Leanback模式进行了跟进,新增了一系列新组件。
  4。一统江湖的AndroidX
  Support库愈加臃肿的分支和呆板的管理方法困扰着开发者。Google同样不胜其烦,终于推出了AndroidX。期望采用全新的包名和版本管理方法彻底解决这个困境。
  比如Support库各分支下Preference组件在AndroidX下的对应关系:
  使用也很方便,只需指定对应的包名和版本即可:defpreferenceversion1。1。1implementationandroidx。preference:preference:preferenceversion
  AndroidX和原有Support库的API对应关系,可以到官方的映射表里进行查询:包的关系:https:developer。android。comjetpackandroidxmigrateartifactmappings类的映射关系:https:developer。android。google。cnjetpackandroidxmigrateclassmappings
  和Support库到底有无区别?
  将最核心的Preference类进行对比,可以发现:除了格式、书写风格的差异以外,代码逻辑几乎完全一致。
  再比如AndroidX里提供的PreferenceFragment类,其实现和Support库的版本几乎是一样的。
  AndroidXreplacestheoriginalsupportlibraryAPIswithpackagesintheandroidxnamespace。OnlythepackageandMavenartifactnameschanged;class,method,andfieldnamesdidnotchange。
  像官方描述的那样,AndroidX是针对Support库的整合和替代,区别仅仅体现在仓库的地址和包名。正因为此,AndroidX拥有清晰统一的版本管理,开发者能便捷和灵活地使用。
  ROM开发需留意
  之前,Preference组件等新API分散在Support库的各个分支包里,源文件也会集成到AOSP源码,ROM厂商可以修改。
  比如V14包的Preference组件在AOSP源码的对应位置如下。
  frameworkssupportv14preferencesrcandroidsupportv14preference
  Android9开始整合到了AndroidX里,但为了过渡,源文件在AOSP源码里仍然保留。也就是我们仍然可以修改其源码。
  frameworkssupportpreferencesrcmainjavaandroidxpreference
  Android10开始全面转向AndroidX,彻底废弃Support库的使用。AOSP源码里也不再集成源文件,只提供了对应的AAR包,这也使得ROM厂商更改实现变得困难,需要额外留意。
  prebuiltssdkcurrentandroidxm2repositoryandroidxpreference
  如何迁移至AndroidX
  为了简化向后兼容的开发工作,将Support库全面迁移至AndroidX极为必要,设置如下的Gradle插件标志即可。android。useAndroidX:Android插件会使用对应的AndroidX替代Support库android。enableJetifier:Android插件会通过重写其二进制文件来自动迁移现有的第三方库,以使用AndroidX依赖项
  当然在AndroidStudio菜单里也可以手动地迁移至AndroidX:MenuRefactorMigratetoAndroidX。
  更详细的迁移细节可以参考如下这篇文章:
  https:www。jianshu。comp41de8689615d
  AndroidX的构成
  依照官方提供的AndroidX构成列表,我概括并制作了一张AndroidX的构成图。
  可以看到,实际上AndroidX在集成了Support库的以外,还涵盖了众多知名的Jetpack框架,这些框架实际上来源于2017年发布的AndroidArchitectureComponents(AAC)。5。短暂的AAC库
  AndroidApp开发有很多痛点,包括ActivityFragment生命周期的管理较为呆板,线程间数据传递的复杂,SQLite封装的繁琐等等。为了改善这些状况并对App架构进行指导,GoogleIO2017上发布了AndroidArchitectureComponents,简称AAC。
  它包含了几个较为经典的框架:LifecycleLiveDataViewModelRoom其他的还有Paging、Navigation和WorkManager
  同时Google还给Android开发者展示了推荐的应用架构,随着Jetpack家族的日益壮大,先在看来这个架构图略显简单。
  AAC库在完善的过程中,和Support库一起,也逐步往AndroidX中迁移,并孕育出一个更大更强的概念Jetpack。6。Jetpack又是何方神圣
  短短一年后,AndroidArchitectureComponents就退出了舞台,GoogleIO2018上发布了全新的Jetpack开发套件。
  Jetpack的官方构成图可以看出来:核心的Architecture模块涵盖了熟知的框架,前身就是去年发布的AAC库以及从Support库整合过来的包,比如Preference、Framgent、AppCompat等除此之外,还包括KTX和Test工具包等
  AndroidJetpackisasetoflibraries,toolsandarchitecturalguidancetohelpmakeitquickandeasytobuildgreatAndroidapps。Itprovidescommoninfrastructurecodesoyoucanfocusonwhatmakesyourappunique。
  所以说,将Jetpack理解为一系列框架不够准确。实际上它是包含了框架、KTX、开发工具和开发向导的开发套件,期望在多个层面提升与Android开发的效率。提供AndroidApp开发的最佳实践消除大量的样板代码,帮助开发者更轻松地编写优质应用提供向后兼容性,在不同版本、不同配置的设备上提供一致性的开发体验改变混乱的散碎的版本管理
  和AndroidX到底啥关系?
  Jetpack开发套件的源码管理在AndroidX内,包括之前的Support库,还有后来吸收的AAC库等等。简要绘制了一下Jetpack的演变图。(画着画着,竟画成了Android机器人的形象,哈哈)
  非要总结下Jetpack和AndroidX关系的话,像fundroid大神描述的那样比较贴切。
  AndroidX是对SDK以外API的内部管理包,Jetpack则是对外宣传的开发套件。
  AndroidX的名字也很酷啊,那为什么不直接用它来进行宣传?个人的一些理解:AndroidX的命名过于抽象、不易理解,也没有特别的含义Jetpack本意是喷气背包、助推器的意思,它更能传达助力开发效率腾飞的设计初衷,也易于理解和传颂。再搭配上AndroidLogo塑造一个火箭机器人的形象,非常有趣和具备辨识度7。Jetpack大事记2011年3月,Support库V4包发布首个版本2014年10月,Support库新增RecyclerView,AppCompat支持2015年8月,Support库新增Preference支持2016年2月,Support库新增VectorDrawable支持2017年5月17日,GoogleIO2017宣布推出AndroidArchitectureComponents2017年9月21日,AndroidArchitectureComponents1。0。0beta版正式发布2018年3月,Support库代码逐步整合至AndroidX2018年5月8日,AndroidArchitectureComponents的代码逐步迁至AndroidX2018年9月21日,GoogleIO2018推出AndroidX,Jetpack开发套件一同发布,Support库终结并转向AndroidX2019年5月7日,JetpackCameraX1。0。0alpha版发布2020年7月22日,JetpackHilt1。0。0alpha版发布2021年3月10日,Compose1。0。0beta版发布
  8。Google野望
  Android的分支众多、迭代太快,开发者疲于应对。Google一直在试图改变这种混乱局面,从经典的Support库,到变革的AAC库,再到持续火爆的Jetpack套件。
  与此同时,随着Android系统愈加完善,SDK也趋于稳定,一年一度的OSV终将是小修小补。但行业的持续发展必将催生层出不穷的新理念、新技术。Google自然不会停下脚步,它将以更高频次、更大范围的动作去变革和应对,而这多将聚焦在SDK以外的领域,比如Jetpack、MAD等。
  MAD,全称ModernAndroidDevelopment,是Google针对Android平台的全新开发理念。它站在比Jetpack更高的视野,旨在通过语言、工具、发行格式、框架等多个层面去指导新型的Android开发。
  在Jetpack套件以外MAD还囊括了诸多内容,包括:持续改进的官方IDE,AndroidStudioAndroid平台首推的Kotlin开发语言先进的AndroidAppBundle发行格式未来的UI开发方式Compose工具包
  可以说,MAD是每个Android开发者都应了解和掌握的重要技术,后续我将解读这个全新的开发理念。最后
  在这里还分享一份由大佬亲自收录整理的学习PDF架构视频面试文档源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料
  这些都是我现在闲暇时还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效地帮助大家掌握知识、理解原理,帮助大家在未来取得一份不错的答卷。
  当然,你也可以拿去查漏补缺,提升自身的竞争力。
  真心希望可以帮助到大家,Android路漫漫,共勉!
  如果你有需要的话,只需私信我【进阶】即可获取

李子柒是包装出来的吗美食界的一股清流大概就是李子柒了吧要说美食界的一股清流大概就是李子柒了吧,她其实是ldquo;全能型rdquo;的,几乎没有她做不出来的东西,李子柒的视频不同于其他网红的搞怪和直接,她的视频则呈现一种古风和味美……面对拥堵的港口环境,釜山新港这样做,美国西海岸的持续拥堵直到现在还没有得到缓解,而这一波堵塞,已经波及到位于韩国的釜山新港,该港口越来越变得拥挤不堪,压力逐渐增大。主要的问题还是出在了港口对于出口集装箱的存……苹果人气依旧火爆,你的订单发货了吗?如果你现在选择购买苹果产品,你可能不会马上得到你想要的。比如你在苹果官网上订购了一台银色256GB版本的iPhone13pro,不仅不支持北京门店提货,而且发货时间也会推迟到1……王嘉尔个人资料简介及照片被质疑和妈妈的关系王嘉尔在韩国的圈子中其实是真的非常不错了,也是有自己的一个想象吧!不过在回到国内之后,他参加了很多综艺,也是有了自己作品,同时更加重要的一点是随之而来的还有一些负面在其中吧!先……易烊千玺家境如何父母做什么工作家庭背景这么了不起易烊千玺堪称是00后内地明星中发展最好的一位了吧,尽管刚开始以tfboys身份出道的时候,易烊千玺的人气没有另外两位成员那么高,但经过后续的发展,现在的易烊千玺已经早就弯道超车……雌雄同体人刘亦菲是什么什么时候做的变性刘亦菲是大家都很熟悉的一位演员。因其清纯可人的形象被不少人称之为神仙姐姐。在娱乐圈就是这样,喜欢你的人会觉得你哪里都是好的,就是无条件的喜欢。如果不喜欢你的人就觉得无论如何你都……关秀媚最大尺度的电影拍过哪些三级电影露点没有尽管关秀媚已经淡出演艺圈很多年了,可是在一代人心目中她依然还是那个ldquo;性感女神rdquo;,从事演员这一行业以来关秀媚曾尝试过很多种走红的方法,最后还是因为拍摄了三级片……周立波怎么突然消失了背景太强大没有想到前几年脱口秀节目捧红了不少的脱口秀演说者。东方卫视的《壹周立波秀》是当时很受观众们欢迎的一档节目。很多人被周立波那海派幽默所吸引。节目的收视率居高不下。一夜之间周立波成为了众人……朱伟个人介绍资料身份背景到底是什么朱伟的身份背景到底是什么,网络中好多人都在说朱伟简直是太多背景,人们认识朱伟就是因为新东方,还说什么朱伟和粉丝的黑料等等,在种种结果中不能够去说明这个事情是否真实,那么就来看看……孙艺珍玄彬恋情不要让大家干着急好吗不知道有多少人看韩剧的时候都是鼻涕一把泪一把的。最主要的原因是很多韩剧都很悲情。虽然是爱情剧但是总是会有重重阻碍,所以看的观众们很是心疼。但是也有一些韩剧是甜美的爱情让人给虐哭……美丽的雪山脚下蓝月谷云在水中游,山在水中倾,碧蓝的湖水镶嵌在银滩里,仿佛一个吊坠挂在山脚下,蓝宝石般的光环在银器里闪闪烁烁,这就是丽江的蓝月谷,积玉堆琼,晖映雪峰。那深埋在岁月里的美,随着流……奚梦瑶维密秀摔跤如今的她照旧是满脸的春风奚梦瑶现在是澳门富商家族的新媳妇,她在模特行业工作多年,除了兢兢业业之外还为华人增光添彩了不少次,唯独2017年的时候她居然在自己引以为傲的T台上摔跤了,这个场景发生以后世人震……
手机电量扛不住用?自己检查解决,能省掉好几百随着大家使用手机的频率越来越高,常常面临手机电量掉得飞快、充电过快或过慢、手机发烫严重等问题。那什么时候是不需要换电池,自己操作解决,什么时候才是电池老化,需要更换呢?……风味人间3大海小鲜致敬大海观众原来真实的赶海是这样的《风味人间3大海小鲜》自开播以来,引起了全国观众对海鲜的讨论。无论是鲜味四溢的美食烹饪,还是赶海捕捞的传统技法,使观众大呼过瘾的同时,也感叹我国海鲜美食文化的博大精深。有观众感……电视剧尽余生启动仪式暨星幕影视开业盛典在山东举行1月8日,大型都市职场情感剧《尽余生》启动仪式暨星幕影视开业盛典在山东隆重举行。一带一路电影共享计划发起人、资深投资人、出品人、最幕集团董事长李强,著名导演武洪武,制片人徐献锋……陈若轩主演电视剧冰雪之名杀青挑战花滑运动员演绎热血青春12月25日,由陈若轩、彭小苒等主演的电视剧《冰雪之名》,历时两个多月的拍摄,迎来了正式杀青。该剧由北京冬奥组委支持、国家广播电视总局、北京市委宣传部、吉林省委宣传部、四川省委……沈浩金涛警官上线口碑好剧女心理师再迎新支线改编自毕淑敏同名小说的电视剧《女心理师》目前正在热播中,每周三至周四更新两集,优酷视频全网独播,播当日就冲上灯塔榜首。2007年,毕淑敏出版了长篇小说《女心理师》,而剧集做出了……都市医疗爱情剧听说你喜欢我杀青时空重启唤爱治愈由耀客传媒、火花传媒出品,杨阳导演,王婕、张楚妤编剧,徐速担任剧本总监,张萌任制片人,彭冠英、王楚然、啜妮、刘芮麟领衔主演,毛林林特别出演,李子峰、朱俊麟、田雷主演的都市医疗爱……半暖时光热播杨旭文摧心演技引情感共振由金晔执导,杨旭文、许龄月领衔主演的都市青春剧《半暖时光》目前正在江苏卫视幸福剧场以及优酷视频热播。在本周剧情中,由杨旭文饰演的沈侯为爱失意,孤身离开,落寞背影令观众唏嘘不已。……中小企业为什么要选择企业宽带而不是个人宽带?作为企业的IT管理者,如何降低企业成本是每个管理者无时无刻不在思考的问题,但实时流媒体、VOIP以及云应用等让网络不堪重负,也让每个企业员工的工作效率变得缓慢异常,商业客户在宽……祝卿好官宣开机袁冰妍郑业成首次合作CP感十足由爱奇艺出品,坦当文化联合出品,爱撒糖工作室制作,改编自晋江文学城伊人睽睽原著小说《我的锦衣卫大人》的古装爱情剧《祝卿好》于2021年3月11日在横店顺利开机。该剧的主创团队由……郑业成古装新剧祝卿好开机飞鱼服造型首曝打戏高能3月11日,由爱奇艺出品,坦当文化联合出品,爱撒糖工作室制作,邵文依担任总制片人,导演朱少杰执导,郑业成领衔主演的古装爱情剧《祝卿好》在横店开机。郑业成在剧中饰演容貌出众,武功……郑业成主演三千鸦杀热播宝藏男孩戏里戏外过得通透星关系3月31日讯在《三千鸦杀》上周的剧情中,郑业成饰演的傅九云不光贡献了深情浪漫的山顶告白,更有糖度爆表的澡堂吻不负按头党们期待,甜蜜升级。九云大人的撩人沐浴、性感锁骨杀,配……郑业成饰顾逢恩离别场面催泪人物海报曝形象转变挑战演技星关系12月11日讯12月10日,由演员郑业成饰演的顾逢恩刚刚在前一晚的影视剧《鹤唳华亭》最新剧集中迎来感人的离别戏份,即先后参与两场新浪直播活动及《鹤唳华亭》中国人民大学主创……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网