安卓
文章平均质量分 93
OH五星上将
这个作者很懒,什么都没留下…
展开
-
依赖检查的插件
作者:codelang写这款工具主要是看了优酷的几篇 向工程腐化开炮 的系列文章,觉得其中的几个点可以通过依赖检查的方式提前找到问题,所以着手找了几个点写了下,并输出 report html 方便查看。一、检查目前该检查工具提供了 5 项内容的检查:so 文件检查64 位 so 未适配检查更安全的导出组件检查未匹配的权限检查uses-sdk 检查1、so 文件检查so 文件检查可以分析出依赖里面包含了多少个 so 文件,并且展示 so 大小,做这个可以辅助 apk 包体积优化来提.转载 2022-03-08 13:39:30 · 518 阅读 · 0 评论 -
为何推荐在自定义View中抽Drawable
作者:Jere_Chen前言在实际业务开发中,当我们需要展示一些简单的图标时,我们都会找UI帮我们切个图,然后直接展示。但一旦遇到一些复杂的图或特殊需求时,比如:股票的分时图、折线图等等,此时UI就帮不了我们了,需要我们自己通过自定义View来进行绘制。而此类自定义View往往都比较复杂,既要处理繁琐的计算及绘制工作,还要处理与用户的交互工作。今天我就来介绍一下,如何通过自定义Drawable来让我们复杂的自定义View变得更加的层次清晰,提升代码可读性。自定义Drawable既然要介绍自定义.转载 2022-03-07 14:21:43 · 548 阅读 · 0 评论 -
Android编译优化系列-kapt篇
作者:字节跳动终端技术———王龙海 封光 兰军健一、背景本文是编译优化系列文章之 kapt 优化篇,后续还会有 build cache, kotlin, dex 优化等文章,敬请期待。本文由Client Infra->Build Infra团队出品,powered by 王龙海,封光,兰军健相信 android 开发对于 kapt 并不陌生,之前也有很多文章在编译优化过程中谈及过 Kapt,主要是针对增量编译场景。抖音火山版同学在接入 hilt 过程中,遇到了更严重的问题: 在 16G.转载 2022-03-04 13:44:55 · 1251 阅读 · 0 评论 -
看这一篇,你也可以自如的掌握字节码插桩
作者:8K吃萝卜本文简介使用GradlePlugin、Transform和ASM实现字节码插桩,GradlePlugin相关代码全部由Kotlin编写,所以不熟悉groovy的小伙伴也可以无障碍阅读。什么是字节码插桩要了解字节码插桩,首先要了解AOP(Aspect Oriented Programming)思想,对比来说,OOP(面向对象编程)主要针对的是业务处理过程的实体极其属性和行为进行抽象封装,为的是有更清晰高效的逻辑单元划分。AOP(面向切面编程)则是针对业务处理过程中的切面进行提取,.转载 2022-03-03 14:59:39 · 2759 阅读 · 0 评论 -
Retrofit 源码解析
作者:liyihuanx梳理retrofit源码时做的一些记录,但也是挺久之前写的东西呢,感觉分析的不够流畅,跳跃性比较大当时是带着这几个问题去看源码的1.整个请求的流程是怎样的?2.底层是如何用 OkHttp 请求的?3.Okhttp是异步的,retrofit是怎么帮我们切换到主线程的?4.注解是什么时候解析的,怎么解析的?5.Converter和CallAdapter的作用?6.如何支持 Kotlin协程的suspend挂起函数的?Retrofit的简单流程图根据流程图进入,首.转载 2022-03-01 15:50:02 · 258 阅读 · 0 评论 -
Android 13 来了,你不能错过的 10+ 新变化~
作者:TechMerger当部分 Pixel 用户还在纠结要不要试试面向大屏设备优化的 Android 12L Beta 时,Google 毫不客气地放出了 Android 13 首个开发者预览版本(以下简称 DP1)。作为开发者预览版本,比起 UI 上的变化 Android 13 DP1 更多地是向开发者展示即将在下一个版本中到来的新功能特性和 API 接口。比如主题图标 API、快速设置开关 API、系统相册选择器、独立应用语言设置等等。让我们一起来看一看。▍测试版要提前了虽然首个开发者.转载 2022-02-28 14:03:21 · 2849 阅读 · 0 评论 -
再学一遍android:fitsSystemWindows属性
作者:郭霖对于android:fitsSystemWindows这个属性你是否感觉又熟悉又陌生呢?熟悉是因为大概知道它可以用来实现沉浸式状态栏的效果,陌生是因为对它好像又不够了解,这个属性经常时灵时不灵的。其实对于android:fitsSystemWindows属性我也是一知半解,包括我在写《第一行代码》的时候对这部分知识的讲解也算不上精准。但是由于当时的理解对于我来说已经够用了,所以也就没再花时间继续深入研究。而最近因为工作的原因,我又碰上了android:fitsSystemWindows.转载 2022-02-23 14:04:30 · 426 阅读 · 0 评论 -
Gradle 7连问,你应该知道这些~
作者: 程序员江同学前言对于Android开发者来说,Gradle也可以说是熟悉的陌生人了,可以说天天会用到Gradle,但对于Gradle的一些原理与细节又往往不太了解本文主要介绍Gradle的一些基础知识与原理,如果对你有所帮助,欢迎点赞本文主要包括以下内容:Gradle到底是什么?Gradle Wrapper是什么?AGP到底是什么?gradle.properties是什么?settings.gradle是什么?build.gradle是什么?Gradle生命周期是怎样的?.转载 2022-02-21 14:34:36 · 473 阅读 · 0 评论 -
Android使用ViewPager2实现页面滑动切换
作者:QiShare1.引言在很多应用中,我们经常会看到多个页面之间滑动切换的场景,ViewPager2是ViewPager的升级版,本文将简要介绍如何使用ViewPager2、FragmentStateAdapter和Fragment来实现页面之间的滑动切换。2.实现页面滑动切换2.1 引入ViewPager2库要使用ViewPager2,需要引入ViewPager2库,引入方法如下:implementation "androidx.viewpager2:viewpager2:1.0.0".转载 2022-02-19 20:44:16 · 2051 阅读 · 0 评论 -
kotlin 协程 + Retrofit 搭建网络请求方案对比
作者:FredYe近期在调研使用Kotlin协程 + Retrofit做网络请求方案的实践,计划后面会引入到新项目中,Retrofit的使用非常的简单,基本上看个文档就能立马接入,也在github上找了大量的Demo来看别人是怎么写的,看了大量网上的文章,但发现很多文章看下来也只是一个简单的接入Demo,不能满足我当下的业务需求。以下记录近期调研的结果和我们的使用。 首先我们先对比从网上找到的几种方案:方案一代码摘自这里 这是一篇非常好的Kotlin 协程 + Retrofit 入门的文章,其代码.转载 2022-02-14 14:21:25 · 923 阅读 · 1 评论 -
Flutter混编工程之通讯之路
作者:徐益生这个系列开始,我们将从「能用的Flutter」到「可用的Flutter」的迁移过程来讲解如何在实际项目中更好的使用Flutter,下面是第一篇。对于混编工程来说,最常用的需求就是双端的数据通信。在Flutter中,SDK提供了platform_channels来进行跨端通信,它的整体架构如下所示。官方文档中提供了一个比较全的例子,下面我们通过这个例子,来好好分析下,如何使用Flutter和原生的通信管道。https://github.com/flutter/samples/blob.转载 2022-02-12 21:47:50 · 265 阅读 · 0 评论 -
Android 13 首个开发者预览版到来
作者 / Dave Burke, VP of Engineering每天,全世界都有数十亿人使用 Android 设备来完成各种事项。这些用户在使用 Android 时的优良体验离不开大家,也就是开发者社区的鼎力支持,是开发者的反馈和建议帮助我们打造出更强大的 Android。今天,我们为大家带来 Android 的下一个版本,即 Android 13 的首个开发者预览版。在 Android 13 中,我们将继续推进一些重要的主题: 隐私和安全,以及开发者生产力。我们还将基于 12L 上最近发布的.转载 2022-02-11 13:45:30 · 288 阅读 · 1 评论 -
浅析如何快速实现wanAndroid客户端
来自 | RicardoMJiang的博客地址:https://juejin.cn/user/6681014310094962021年七月底,Google 正式发布了Jetpack Compose的1.0稳定版本,这说明Google认为Compose已经可以用于生产环境了。相信Compose的广泛应用就在不远的将来,现在应该是学习Compose的一个比较好的时机。在了解了Compose的基本知识与原理之后,通过一个完整的项目继续学习Compose应该是一个比较好的方式。本文主要基于Compose.转载 2022-02-08 14:41:32 · 345 阅读 · 2 评论 -
Android使用GestureDetector进行手势检测
作者:QiShare1.引言在操作应用的时候,会有很多不同的手势操作,如按下、单击、双击、长按等手势,我们可以在这些手势事件中添加相应的业务逻辑,那么如何检测不同的手势操作就比较重要了,本文将带大家了解如何使用GestureDetector进行手势检测。2.进行手势检测2.1 创建GestureDetector进行手势检测之前,需要先新建GestureDetector对象,示例如下:gestureDetector = new GestureDetector(context, new Gest.转载 2022-01-26 14:33:45 · 170 阅读 · 0 评论 -
LeakCanary源码简单分析
作者:奔波儿灞取经Java四大引用强引用: 绝不回收软引用: 内存不足才回收弱引用: 碰到就回收虚引用: 等价于没有引用,只是用来标识下指向的对象是否被回收。弱引用的使用我们可以为弱引用指定一个引用队列,当弱引用指向的对象被回收时,此弱引用就会被添加到这个队列中,我们可以通过判断这个队列中有没有这个弱引用,来判断该弱引用指向的对象是否被回收了。// 创建一个引用队列ReferenceQueue<Object> queue = new ReferenceQueue<.转载 2022-01-20 22:09:17 · 160 阅读 · 0 评论 -
了解Android架构组件后,构建APP超简单
Google 为了帮助 Android 开发者更快更好地开发 App,推出了一系列组件,这些组件被打包成了一个整体,称作 Android Jetpack,它包含的组件如下图所示:老的 support 包被整合进了 Jetpack,例如上图 Foundation 模块的 AppCompat,整合进去之后,包名做了一下修改,全部以 androidx 开头。Android Studio 提供的迁移工具(Refactor > Migrate to AndroidX)可以将源码中的旧包名替换成新的,但是如果原创 2021-11-29 21:18:21 · 523 阅读 · 2 评论 -
细说Jetpack中那些LiveData们
1)低调的CoroutinLiveDataliveData { this.emit("data") //1处}.observe(owner){ data -> doSomething(data)//2处}开局一段代码liveData()全局方法,他的返回值是一个LiveData因此我们可以直接监听其返回值。最后一个参数是一个带接收者的Lambda表达式,这个lambda表达式的接收者是LiveDataScope,可以直接在代码块中(1处)中调用其emit方法,向LiveDa原创 2021-11-26 20:51:04 · 410 阅读 · 1 评论 -
Android 无所不能的 hook,让应用不再崩溃
好文推荐:作者:鸿洋之前推送了很多大厂分享,很多同学看完就觉得,大厂输出的理论知识居多,缺乏实践。那这篇文章,我们将介绍一个大厂的库,这个库能够实打实的帮助大家解决一些问题。今天的主角:初学者小张,资深研发老羊。三方库中的 bug这天 QA 上线前给小张反馈了一个 bug,应用启动就崩溃,小张一点不慌,插入 USB,触发,一看日志,原来是个空指针。想了想,空指针比较好修复,大不了判空防御一下,于是回答:这个问题交给我,马上修复。根据堆栈,找到了空指针的元凶。忽然间,小张愣住了,这个空指.转载 2021-11-25 22:05:24 · 1185 阅读 · 1 评论 -
RecyclerView.ViewCacheExtension 使用及踩坑
作者:Delicia_Lani前言最近遇到一个需求,需求实现上并不复杂,大概长这个样:基本上就是一个RecyclerView 嵌套多个子 RecyclerView ,有横向的,也有竖向的。RecyclerView 实现多类型布局有各种各样的实现方式,这里就不多说了。本来很开心的实现完了,在测试中确遇到了非常严重的性能问题,也就了本篇文章的诞生。具体的讲,嵌套的横向滑动的RecyclerView 没有任何问题,嵌套的竖向RecyclerView 在上下滑动时却遇到了非常严重的性能问题,表现为在从.转载 2021-11-24 16:55:57 · 739 阅读 · 3 评论 -
LeakCanary可能被你忽略的点
好文推荐:作者:giswangsj说起leakcanary大家应该都很熟悉,问起原理应该都知道在对象被销毁时通过WeakReference+ReferenceQueue检测对象是否被回收,延迟二次检测后还没被回收则认为是嫌疑对象,然后dump heap并对其进行分析…但是你知道leakcanary可以检测哪些对象吗?又是如何获取这些即将销毁的对象呢?先说问题1的结论:leakcanary2.6版本之前只能对Activity,Fragment进行监控。leakcanary2.6版本以后增加了对.转载 2021-11-20 20:27:59 · 277 阅读 · 0 评论 -
Android Gradle flavor —— 打造不同风味的app
好文推荐:作者:knight康康何时会用的 flavor ?一个产品,主体功能相同,但又存在差异。比如国内各个手机厂商众多。你的产品想使用各个厂商手机内置的钱包支付功能怎么办?把所以厂商sdk集成,然后根据厂商品牌做条件判断,好像也是一种办法。缺点就是用户只有一种支付方式,却要把所以厂商钱包都集成进去????。 解决这样类似的需求,该 flavor 出场了。flavor基础配置android{ ... //定义风味维度 flavorDimensions "channel转载 2021-11-17 16:09:50 · 674 阅读 · 2 评论 -
那些容易混淆的设计模式,了解一下~
好文推荐:作者:RicardoMJiang转载地址:https://juejin.cn/post/7030415720676589581前言了解过设计模式的同学都知道,设计模式家族成员非常庞大,具体可以分为3类共23种设计模式对我们来说,设计模式在种类上实在是有些多了,而且很多设计模式非常类似,让人傻傻分不清本文主要介绍一些容易混淆的设计模式,以加深对设计模式的理解本文主要包括以下内容六大设计原则的介绍简单工厂、工厂方法与抽象工厂模式的区别代理,装饰与适配器模式的区别策略、状态与.转载 2021-11-15 15:40:52 · 307 阅读 · 2 评论 -
Android自定义ViewGroup的那些事儿
1概念ViewGroup是一种可以包含其他视图的特殊视图,他是各种布局和所有容器的基类,这些类也定义了ViewGroup.LayoutParams类作为类的布局参数, ViewGroup是容器,用来包含其他控件。ViewGroup需要重写onMeasure方法测量子控件的宽高和自己的宽高,然后实现onLayout方法摆放子控件。2绘制原理android 坐标系:以屏幕左上角作为原点,这个原点向右是X轴的正轴,向下是Y轴正轴,如图所示:View坐标系,View坐标系内部关系如图所示:流程图如下所原创 2021-10-25 21:44:11 · 505 阅读 · 1 评论 -
Android12 支持高斯模糊及高斯模糊原理
1. 高斯模糊:高斯模糊是是图片产生模糊效果的一种算法,使用正态分布来平滑数据。1. 原理:所谓"模糊",可以理解成每一个像素都取周边像素的平均值。下图中,2是中间点,周边点都是1。"中间点"取"周围点"的平均值,就会变成1,在图形上,就相当于产生"模糊"效果,"中间点"失去细节。显然,计算平均值时,取值范围越大,"模糊效果"越强烈。下面分别是原图、模糊半径3像素、模糊半径10像素的效果。模糊半径越大,图像就越模糊。接下来的问题就是,既然每个点都要取周边像素的平均值,那么应该如何分配权重呢原创 2021-10-21 16:06:35 · 5456 阅读 · 2 评论 -
从源码角度分析Android 事件分发机制以及常见滑动冲突解决方案
一、何为事件一般谈及事件分发,说到事件,就是指的 Android 中的 Touch 事件。用官方话说:当用户触摸屏幕时,将产生的触摸行为,称之为触摸(Touch)事件。既然是用户触摸行为产生的事件,那么事件的分类就清晰明了:手指刚触摸屏幕手指在屏幕上滑动手指离开屏幕非人为原因取消事件(系统触发,开发者无法掌控)正常情况下,一次手指触摸屏幕的行为会触发一系列点击事件:二、何为分发听名字好像不太理解,其实就是触摸事件发生了,总得要有人(对象)去处理啊,这就是所谓的分发。那么事件分发就原创 2021-10-19 14:30:53 · 302 阅读 · 0 评论 -
【辨析】Compose 完全脱离 View 系统了吗?
好文推荐:作者:RicardoMJiang前言Compose正式发布1.0已经相当一段时间了,但相信很多同学对Compose还是有很多迷惑的地方Compose跟原生的View到底是什么关系?是跟Flutter一样完全基于Skia引擎渲染,还是说还是View的那老一套?相信很多同学都会有下面的疑问下面我们就一起来看下下面这个问题现象分析我们先看这样一个简单布局class TestActivity : ComponentActivity() { override fun onCr.转载 2021-10-14 15:33:35 · 473 阅读 · 3 评论 -
快手开源KOOM浅析,一个高性能线上内存监控方案
转载地址:https://juejin.cn/post/6982121209144016910KOOM 相比较 LeakCanary 和 Matrix 来说有点不同,后俩者由于 dump 的整个过程会影响到主进程,所以基本应用与线下监控,而 KOOM 提出了 fork dump 的概念,能在 dump 分析内存泄漏的时候而不影响到主进程的应用运行,所以,非常适合使用在线上监控。所有的内存泄漏监控工具都离不开这三点:监控触发时机dump 内存堆栈分析 hprof 文件1、监控触发时机Le.原创 2021-09-18 16:53:43 · 2872 阅读 · 2 评论 -
Jetpack Compose入门篇-简约而不简单
好文推荐:作者:QiShareCompose简介Jetpack Compose:利用声明式编程构建Android原生界面(UI)的 工具包优势更少的代码、代码量锐减强大的工具/组件支持直观的 Kotlin API简单易用Compose 编程思想声明性编程范式:声明性的函数构建一个简单的界面组件,无需修改任何 XML 布局,也不需要使用布局编辑器,只需要调用 Jetpack Compose 函数来声明想要的元素,Compose 编译器即会完成后面的所有工作举个栗子:简.原创 2021-09-16 22:07:03 · 1138 阅读 · 2 评论 -
Android 屏幕适配
Android设备多种多样,有着不同的屏幕尺寸和像素密度,大大增加了适配的难度。一、基本单位介绍介绍下Android UI中常见的几个单位。pxpx 就是像素点,是屏幕物理上最小显示单位,如手机分辨率 1080 x 1920 表示宽有1080 像素点,高有1920 像素点。分辨率高的屏幕上面像素点(色块)就多,所以屏幕内可以展示的画面就更细致。但是布局的时候不能直接使用px作为单位,因为在不同分辨率的手机上,展示大小会不一样。可以看到相同的px,在不同分辨率上显示的宽高是不一样的。dpi转载 2021-09-09 14:30:19 · 399 阅读 · 1 评论 -
「性能优化系列」APP内存优化理论与实践
好文推荐:作者:付十一性能优化系列: 启动优化 内存优化 布局优化 卡顿优化 apk瘦身优化 电量优化项目地址: fuusy/FuPerformance当一个应用同时运行越来越多的任务以及复杂的业务,Android系统的内存管理机制已经无法满足内存的释放与回收,为了应用的稳定性与性能,去控制内存的创建和回收就成为了一个重要的命题。本篇文章主要涉及内容如下:对象的创建与回收;分配内存的方式,对象在JVM中的生命周期;判断对象是否需要被回收,垃圾回收算法.转载 2021-08-30 15:18:14 · 307 阅读 · 2 评论 -
Android 开发——JVM复习小结
JVM运行时数据区域根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。程序计数器内存空间小,线程私有.字节码解释器工作时就是通过改变程序计数器的值来选取下一条需要执行指令的字节码指令(主要是取下一条指令的字节码文件).分支,循环,跳转,异常处理,线程恢复等基础功能都依赖程序计数器来完成.如果线程正在执行一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址 ;如果正在执行的是Native方法, 这个计数器记录的值为(U原创 2021-08-21 21:11:43 · 561 阅读 · 3 评论 -
从Retrofit/Okhttp源码 学习设计模式-建造者模式
建造者模式首先我们先大致熟悉下通常的建造者模式建造者模式(Builder Pattern)也叫生成器模式,其定义如下:将一个对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式的通用类图如图所示:Product产品类 Builder抽象建造者规范产品的组建,一般是由子类实现。ConcreteBuilder实现抽象类定义的所有方法,并且返回一个组建好的对象。Director导演类产品类public class Product { public pu原创 2021-08-16 16:35:38 · 814 阅读 · 2 评论 -
「RecyclerView中的位置」你真的会正确获取Item的位置么?
关于Position我们在使用使用 RecyclerView 的时候,总是不可避免的需要知道其 ItemView 的位置以实现各种各样的需求:设置点击事件:我们需要Item所处的位置,取得View对应的相关数据信息,进而完成点击的交互操作。比如一个商品列表,点击商品的Item时,我们只有知道对应Item的位置,才能拿到Item的数据信息(譬如商品ID)从而跳转至正确的商品详情页面。滚动列表至指定的Item位置:这种场景常被应用于RecyclerView的Item选中态发生变化时,滚动Recycler原创 2021-08-14 22:00:09 · 5423 阅读 · 6 评论 -
Glide源码难看懂?用这个角度让你事半功倍!
前言一个功能强大的框架,其背后少不了各种各样的封装,当我们一头扎进去看的时候,很容易被源码里各种各样的跳转,设计模式,封装等等,搞的云里雾里;在这种情况下,我们只能将大概流程给搞懂,但是却很容易忘记,为什么呢?因为我们还没有真正的理解它!我们没有将其转化为我们的知识点,所以隔一段时间就容易忘记了;那么我们要怎么将其转化为我们的知识点呢?不知道你有没有发现,我们人的大脑是很难一下子记住一个很长很长的东西,但是一个名词或者一个事物是可以很轻松的就记住的;下面我会将源码拆散成一个个的小部件,然后由简原创 2021-08-10 21:55:14 · 993 阅读 · 3 评论 -
ARouter原理解析之仿ARouter自定义路由框架
ARouter是什么?ARouter是阿里开源的一款android路由框架,帮助 Android App 进行组件化改造的路由框架 —— 支持模块间的路由、通信、解耦;结合路由可以实现组件化。ARouter接入指北完整Arouter接入指南,ARouter重度用户可以跳过,直接往后看第一步,根build.gradle设置使用arouter-registerapply plugin: 'com.alibaba.arouter'buildscript { repositories {.转载 2021-08-06 16:43:55 · 524 阅读 · 1 评论 -
Android架构组件Room的使用
作者:_wangyiboRoom介绍1.Room是一个OM(Object Mapping对象映射)数据库,可以方便地在Android应用程序上访问数据库。2.Room抽象了SQLite,通过提供方便的api来查询数据库,并在编译时验证。并且可以使用SQLite的全部功能,同时拥有Java SQL查询生成器提供的类型安全。Room的构成1.Database:数据库扩展了RoomDatabase的抽象类。可以通过Room获得它的一个实例。databaseBuilder或Room.inMemor.转载 2021-08-01 21:18:11 · 598 阅读 · 0 评论 -
玩转Gradle ,动不动就Build Running,这玩意到底在干嘛?
好文推荐:作者:Coder-pigAndroid开发仔基本上都间接或直接接触过Gradle,毕竟用AS导项目都这个坎:卡在 Gradle:Build Running半个钟过去了,还在Build Running,而你只能卧槽,这玩意TM到底在干嘛???而学完Gradle,可能有助于你理解这个编译过程,而进行一些编译提速的优化~当然,好处还不止这个,比如:通过Gradle了解到具体的APP打包过程,可以通过自定义Task或编写Gradle插件的形式对APK体积进行缩减,比如资源混淆工具 AndR.转载 2021-07-19 17:16:05 · 2491 阅读 · 2 评论 -
Android 开发有必要去研究Handler和Binder么?
经常会有人问:有必要去研究Handler和Binder么????? 感觉工作中好像用不到呀。以前开始学习Android的时候,有时候想研究源码,研究一些Android底层原理,只能去翻书,或者向其他公司的大牛请教,一个疑问有时候会卡好几天。那时候只要了解四大组件、视图、网络请求,你就能拿到一份薪资丰厚的offer;当时,如果你要是精通java基础,知道如何处理OOM,组件生命周期原理,熟悉android源码、架构体系,进阿里腾讯都是很轻松。现在,你只会这些再出去试试?现在面试对Android开发者原创 2021-07-15 20:56:24 · 466 阅读 · 9 评论 -
Navigation之详细聊聊Fragment的实现原理
作者:字节小站1. 前言Fragment真是一个非常老的家伙,它的第一条提交记录是在2010年,而最近的一条记录则是在2021年6月11号,足足11岁了,但是它却老当益壮,在Jetpack中大放异彩,Navigation组件就是基于Fragment的一个跳转组件,Google的单Activity项目结构就是一个Activity和多个Fragment项目结构。多年以来,一提到Fragment,大家脑海中的第一印象可能还停留在平板应用开发中了,它曾经在手机项目中高频使用Fragment的机会还真没那么.转载 2021-07-12 16:47:23 · 767 阅读 · 2 评论 -
从Gradle生命周期到自定义Task挂接到Build构建流程全解
我们知道Gradle构建工具非常的灵活,它提供了一系列的Api让我们有能力去修改或定制项目的构建过程,在项目的编译过程中,插入我们自己的 Task 并执行相关的操作,如:多渠道打包,ASM代码织入和资源的检测等。要想实现这些功能,首先就需要明白Gradle的构建流程,知道Gradle在每个阶段都做了什么,加上自己需要在哪个阶段做什么事件,就可以通过Gradle提供的Api,插入我们想要执行的代码。因此理解Gradle的生命周期和Hook点,有助于我们梳理、扩展项目的构建流程。Gradle的构建过程有着固原创 2021-07-08 16:59:37 · 485 阅读 · 2 评论