Skip to content

pengxurui/AndroidFamilyDemo

Repository files navigation

🔥 本项目作为 《AndroidFamily》 专栏 Android 系列文章配套 ”示例程序“ 而存在,旨在帮助读者更直观感性地理解纸面上的知识点,进一步提高学习效率。

示例一览

专栏文章 配套示例程序
Gradle 系列(4)使用 Maven 实现组件化发布 MavenPublish
Gradle 系列(8)其实 Gradle Transform 就是个纸老虎 HelloTransform
Gradle 系列(11)AGP 案例:多渠道打包 AutoPacker
Jetpack 系列(6)ViewBinding 与 Kotlin 委托双剑合璧 KotlinDelegate
Jetpack 系列(12)OnBackPressedDispatcher:Jetpack 处理回退事件的新姿势 HelloAndroidX
NDK 系列(5)JNI 从入门到实践,万字爆肝详解! HelloJni
NDK 系列(7):NDK 基础:ndk-build & CMake HelloNDK
组件化系列(4)组件化案例:通用方案 HelloModular
Kotlin 系列 委托机制 & 原理 & 应用 KotlinDelegate
为什么各大厂自研的内存泄漏检测框架都要参考 LeakCanary?因为它是真强啊! HelloLeakCanary
为什么每份 Android 简历都说 “熟悉 MQTT 协议”? HelloMQTT
飞书前端提到的竞态问题,在 Android 上怎么解决? RaceRequestDemo

使用方法

1、先给一个 Star: 你的支持对我非常重要,我的内容质量绝对对得起你的 Star,给我一点创作的动力,感谢。

2、进小彭的 Android 交流群: 加我微信进群,我们对群质量有要求,你可以在这里找到志同道合的朋友。群里可以讨论技术、分享文章、聊天、吐槽,允许适当发招聘广告,不受欢迎的行为是严格禁止的:

3、关注我的公众号 [彭旭锐]: 坚持高质量原创内容,不人云亦云,公众号后续是我主要的内容更新平台:

4、关注我的 掘金知乎《AndroidFamily》 专栏: 掘金上有我历史发布过的所有文章,AndroidFamily 专栏是我参考杜威十进制模型搭建的 Android 成长学习路线,你可以参考我的模型定制专属的知识体系。

5、Clone 项目: 本项目的根目录是多个 Android 工程的聚合,工程根目录不用于编译运行。在 Clone 项目到本地后,需要 Open 对应示例的目录才能编译运行,且各个目录下的编译环境相互隔离,互不干扰。

image

常见问题 Q&A

  • 1、找不到 Task

升级到 Android Stidio 4.2 之后,如果在 Gradle 栏目中找不到 Task 列表,在设置里取消勾选此项即可。

https://upload-images.jianshu.io/upload_images/10107787-b037ae917d7fccac.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

  • 2、构建报找不到包 Unable to resolve dependency for 'com.pengxr.demo:maven:v1.0.0’

可能是本地仓库中没有对应的类库。你需要先执行发布任务 uploadArchives。在 DemoHall 工程中,我声明了两个本地仓库:/snapshotRepository/releaseRepository,分别对应快照版本和正式版本。

  • 3、编译运行不成功

如果示例程序不能编译运行,请及时提 issue 反馈给作者;

  • 4、不理解代码逻辑

如果对示例程序有疑问,请到对应的系列文章下的评论区提问,或者加 作者微信 交流。


详细说明

✅ MavenPublish

如今,项目开发已经不再是单兵作战的时代,而往往是多团队、多组件协同开发。此时,我们会发布组件 & 管理组件的技巧。

在这篇文章里,我将带你理解组件的基本概念,以及组件发布 & 快照预览 & 依赖切换的实战应用经验。

Gradle 系列(4)使用 Maven 实现组件化发布

✅ HelloTransform

目前,使用 AGP Transform API 进行字节码插桩已经非常普遍了,例如 Booster、神策等框架中都有 Transform 的影子。Transform 听起来很高大上,其本质就是一个 Gradle Task。

在这篇文章里,我将带你理解 Transform 的工作机制、使用方法和核心源码解析。

Gradle 系列(8)其实 Gradle Transform 就是个纸老虎

☑ AutoPacker

Gradle 系列(11)AGP 案例:多渠道打包(未发布)

✅ KotlinDelegate

委托(Delegate)是 Kotlin 的一种语言特性,用于更加优雅地实现委托模式。其实,Kotlin 委托的语法关键字是 by,其本质上是面向编译器的语法糖,三种委托(类委托、对象委托和局部变量委托)在编译时都会转化为 “无糖语法”。例如类委托:编译器会实现基础接口的所有方法,并直接委托给基础对象来处理。例如对象委托和局部变量委托:在编译时会生成辅助属性(prop$degelate),而属性 / 变量的 getter() 和 setter() 方法只是简单地委托给辅助属性的 getValue() 和 setValue() 处理。

KotlinDelegates 是一个易用的安卓 Kotlin 委托工具类库,它针对安卓开发场景封装了一系列 Kotlin 委托属性,利用其 APIs 可以提高开发效率。

对了,如果你还不太了解 Kotlin 委托机制,这些文章会帮助你入门:

Kotlin | 委托机制 & 原理 & 应用

Android | ViewBinding 与 Kotlin 委托双剑合璧

✅ HelloAndroidX

androidx.activity 1.0.0 开始,Google 引入 OnBackPressedDispatcher API 来处理回退事件,旨在优化回退事件处理:你可以在任何位置定义回退逻辑,而不是依赖于 Activity#onBackPressed()。

在这篇文章里,我将介绍 OnBackPressedDispatcher 的使用方法 & 实现原理 & 应用场景。

Android | Jetpack 处理回退事件的新姿势 —— OnBackPressedDispatcher

✅ HelloJni

在 Android 生态中主要有 C/C++、Java、Kotlin 三种语言 ,它们的关系不是替换而是互补。其中,C/C++ 的语境是算法和高性能,Java 的语境是平台无关和内存管理,而 Kotlin 则融合了多种语言中的优秀特性,带来了一种更现代化的编程方式。

JNI 是实现 Java 代码与 C/C++ 代码交互的特性, 思考一个问题 —— Java 虚拟机是如何实现两种毫不相干的语言的交互的呢? 今天,我们来全面总结 JNI 开发知识框架,为 NDK 开发打下基础。

NDK 系列(5)JNI 从入门到实践,万字爆肝详解!

☑  HelloNDK

NDK 系列(7):NDK 基础:ndk-build & CMake(未发布)

☑  HelloModular

组件化系列(4)组件化案例:通用方案(未发布)

✅ HelloLeakCanary

LeakCanary 是我们非常熟悉内存泄漏检测工具,它能够帮助开发者非常高效便捷地检测 Android 中常见的内存泄漏。在各大厂自研的内存泄漏检测框架(如腾讯 Matrix 和快手 Koom)的帮助文档中,也会引述 LeakCanary 原理分析。

不吹不黑,LeakCanary 源码中除了实现内存泄漏的监控方案外,还有非常多值得学习的编程技巧,只有沉下心去阅读的人才能够真正体会到。在这篇文章里,我将带你从入门开始掌握 LeakCanary 的使用场景以及使用方法,再介绍 LeakCanary 的工作流程和高级用法,最后通过源码解析深入理解原理。

为什么各大厂自研的内存泄漏检测框架都要参考 LeakCanary?因为它是真强啊!

✅ HelloMQTT

MQTT 是一种基于发布 - 订阅模型的消息传递协议,在物联网和移动应用有较广泛的应用。如果你的目标是冲击中高级工程师岗位,MQTT 或许是一个不错的亮点。最近,我还发现很多候选人会在简历中写自己 “熟悉 MQTT 协议”,但多数人只是停留在了解或用过的程度。

这篇文章里,我将与你探讨 MQTT 协议的 工作原理 & 协议消息格式 & 核心特性,实战的部分我们会在下篇文章中讨论。

为什么每份 Android 简历都说 “熟悉 MQTT 协议”?

✅ RaceRequestDemo

飞书前端提到的竞态问题,在 Android 上怎么解决?

昨天,看到飞书团队一篇技术分享 《如何解决前端常见的竞态问题》 ,自己的项目中也存在类似的问题,也是容易出 Bug的地方。字节这篇文章是从 Web 端的视角切入的,借鉴意义有限,这篇文章我们从 Android 的视角展开讨论。

其实,异步竞态问题并不是一个难题,但是本着精益求精的态度,对问题做一次全面分析,再思考有哪些解决方案,哪些是最优最适合的方案,对自己和社区都会有帮助。


主要功能提交记录

  • 完成 HelloLeakCanary 主体功能(Aug 23, 2022)
  • 修复 Transform 模板未复制 classFilter 过滤的文件(Aug 15, 2022)
  • 完成 RaceRequestDemo 主体功能(Aug 10, 2022)
  • 完成 HelloTransform 主体功能(May 18, 2022)
  • 完成 HelloJni 主体功能(Jul 28, 2022)
  • 完成 HelloMQTT 主体功能(Jul 6, 2021)
  • 完成 KotlinDelegate 主体功能(Jun 22, 2021)
  • 完成 HelloAndroidX 主体功能(Jun 20, 2021)
  • 完成 MavenPublish 主体功能(May 18, 2021)

小彭的其它开源项目

  • AndroidFamily 【Android 面经 + Android 学习指南】一份面向 Android 开发者的成长和进阶的学习路线;🔥
  • AndroidPlatforms 每个 Android 开发都要收藏的系统适配手册,带你全面体系化地解读 Android 系统更新;🔥
  • EasyTrack 基于西瓜视频前端视图树埋点方案实现的埋点方案;
  • EasyPrivacy 一个帮助开发者快速解决整改问题的工具;
  • LeetCode-Kotlin LeetCode 高频题解 - Kotlin 版本。

更多内容,请 点击


Donate

如果本仓库对你有帮助,可以请小彭喝杯速溶咖啡。

License

Copyright [2022] [Peng Xurui]

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.