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

如何理解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路漫漫,共勉!
  如果你有需要的话,只需私信我【进阶】即可获取

iPhone14这次要上天,搭配applewatch无敌了文机siriPhone14还有不到半年应该就会登场,最让人期待的就是iPhone14的外观是否会有大的改变。根据全网目前汇总的爆料情况来看,基本外形应该已经算是确定了。首先,近日有居家畅享鲜氧空气轩尼斯舒立方新风系统2。0上线啦随着我国工业化和城镇化进程的不断深化,大气污染的形势也变得愈发严峻。近年来,雾霾天气频繁出现,空气质量问题已引起全社会高度关注。据统计,我们每天大约有80左右的时间在室内,特别是儿鸿蒙3。0将由华为Mate50系列首发,新系统删繁就简,7月见截至目前,鸿蒙用户已经突破3亿,并且还在呈快速增长之势。随着鸿蒙用户的增加,人们也对全新的鸿蒙3。0系统期待不已,那么鸿蒙3。0到底何时与大家见面呢?有爆料称,鸿蒙3。0将于今年5微信Q化微信农场登场,朋友圈可以养猪养鸡,甚至海绵宝宝文财经天下周刊程靓编辑杨洁QQ农场之后,微信农场粉墨登场。一位年轻的北京白领展示了她设置的一只在朋友圈背景上活蹦乱跳的小狗。她说,不少微信群里从4月12日上午起,就开始分享起了朋友中国手机品牌出海发展强劲已拥有全球近40市场份额西班牙巴塞罗那2022世界移动通信大会上,参观者在体验中国手机品牌OPPO的新款手机。新华社记者郑焕松摄据西班牙20分钟报网站报道,在今年的世界移动通信大会上,中国众多手机制造商纷父母清洁洗衣机很麻烦?免污小蓝扣轻松掌握洗衣自由最近去看望父母的时候,发现家里的老古董洗衣机已经非常破旧了,洗衣时发出的噪音估计十里八村都能听到。为此,我决定给二老重新买一台洗衣机,不过该买什么样的洗衣机却也是一个值得深思的问题修复Windows1011下CPU占用率100的问题我想大家都经历过类似的情况还没有开什么软件也没有做什么事情,但是会感觉到突然的运行速度变慢加上风扇大声运转。打CtrlShiftEscape,你会发现CPU的使用率莫名其妙地飙到了上手一下会自己拍照的佳能PowerShotPickET借来一款会自己拍照的相机佳能PowerShotPick。产品概述PowershotPick是佳能第二款新概念相机。它的外形很像是监控摄像头,镜头部分可以水平垂直快速旋转,从而实vivoPad体验或许是Android平板最佳之选?作为一款搭配键盘手写笔这些外设的设备,vivoPad的确能取代一些笔记本电脑在实际生活中的需求。到2022年,随着用户使用需求的明确以及市场的明显增长,Android平板下一步应该舒心如厕放心清洁云米智能马桶Nano2初体验随着科技的发展,许多智能设备走进了我们的生活之中,覆盖我们的衣食住行等各个方面,为我们的生活提供了极大的便利。最近,在某高档酒店体验了一把智能马桶,人性化的设计以及智能化的操作,着大疆DJIMini3orMini3Pro来了大疆DJIMini3前不久曝光的大疆mini3无人机,有了新消息。据爆料称,大疆通知相关人员近期有新品培训,分析mini3会在4月28日左右正式发布,采取线上活动形式。但此次的消息
超薄化成冰箱行业新风向如何抢占风口?百姓家电网原创近日,海信宣布推出全球最薄的冰箱的消息传出,可谓一石激起千层浪,引起了冰箱行业的轩然大波。在很长的一段时间里,冰箱作为最重要的家电品类之一,进入了漫长的创新转型时期,(科技)研究人员进家门前换鞋很重要新华社北京4月7日电参考消息6日登载美国大众科学网站报道科学家解释,为什么在室内穿鞋很恶心。报道摘要如下如果你踩到某种泥泞或恶心的东西上,你可能要擦鞋。但当你到家的时候,你总是在门灿勤科技2021年净利8749。94万同比下滑67。15董事长朱田中薪酬99万挖贝网4月6日,灿勤科技(688182)近日发布2021年度报告,报告期内公司实现营业收入333,582,985。63元,同比下滑67。99归属于上市公司股东的净利润87,499,中国软件(600536。SH)与子公司合计出资7亿元拟与关联方共同设立有限合伙企业智通财经APP讯,中国软件(600536。SH)发布公告,公司及子公司麒麟软件有限公司(简称麒麟软件)计划合计出资7亿元(其中公司认缴2亿元,子公司麒麟软件认缴5亿元)拟与关联方共经纬恒润将登陆科创板主营业务强势增长,致力成为国际一流综合型电子系统科技服务商4月7日,科创板即将迎来一家汽车电子领域的龙头公司。日前,经纬恒润(688326,SH)发布公告称,公司将首次公开发行股票并在科创板上市。本次拟发行股数3000万股,占发行后公司总3大主营业务同比增长中兴2021年净利同比增约6成参考消息网3月11日报道路透社网站近日报道称,中国电信设备制造商中兴通讯近期发布的年报显示,2021年,该公司实现净利润68。1亿元人民币,同比增长59。9实现营收1145。2亿元中国天弓控股(00428。HK)与JPEX订立谅解备忘录格隆汇3月11日丨中国天弓控股(00428。HK)公告,最近集团与JPEXTechnicalSupportCo。PtyLtd订立不具法律约束力谅解备忘录。根据谅解备忘录,JPEX将谁也别想搞封锁,中国核心技术重大突破,荷兰愿降价出售光刻机图为光刻机自从美国宣布芯片禁令以来,国内半导体产业也受到了一定的影响,但前不久荷兰突然放话我愿意降价出售处理光刻机,这直接引起了国人的高度关注,难道荷兰良心发现,不打算跟着美国狼狈小鹏汽车已经在欧洲四国接受P5车型预定据外媒报道,小鹏汽车已经在欧洲四国接受P5车型的预定。具体来看,从3月10日起,丹麦荷兰挪威和瑞典的消费者可以在小鹏汽车APP和官网预定该款车型。根据外媒的报道,欧洲版P5与中国版Gosund智能墙壁插座CO1M,简约设计,智能控制墙壁插座对于每个家庭来说都是必备的,市面上的智能墙壁插座也很多,但是,遇到突发的断电情况无需担心,插座自带记忆功能,并且接入米家APP还价格厚道的却不多。最近,我入手了一款白色的G2022年买手机别扣搜,目前这4款零差评手机,再用三年没问题最近很多朋友都想让我推荐一下今年值得入手的高端旗舰机,随着大家对于手机数码的不断了解,也认识到了如今每年换台中端机不如一次到位换台长寿机更为划算,而且如今不论是国产旗舰机还是国外手