App
文章平均质量分 95
TechMerger
Android平台资深从业者,公众号「Tech Merger」。
展开
-
别搞错了,nonTransitiveRClass 不能解决资源冲突!
非传递性 R 类的属性,在文件里使用。不少开发者可能听过它,但了解可能仅限于是对 R 文件做了优化,甚至以为它可以解决资源冲突!但它到底做了什么优化、能否解决资源冲突,则鲜少有机会去了解。本文通过该属性使用前后对比、在资源冲突场景下的表现等角度去充分解读它。上面的示例可以看到,没有开启的话,仅仅定义10多个资源的 Module 的 R 文件会激增到4000+个 ID。这对编译速度、AAR / APK 体积的影响是可以预见的。原创 2022-12-12 11:42:10 · 2220 阅读 · 0 评论 -
深入理解 Android 模块化里的资源冲突
作为 Android 开发者,我们常常需要去管理非常多不同的资源文件,编译时这些资源文件会被统一地收集和整合到同一个包下面。根据官方的编译器会将源码文件转换成包含了二进制字节码、能运行在 Android 设备上的 DEX 文件,而其他文件则被转换成编译后资源。APK 打包工具则会将 DEX 文件和编译后资源组合成独立的 APK 文件。但如果资源的命名发生了碰撞、冲突,会对编译产生什么影响?事实证明这个影响是不确定的,尤其是涉及到构建外部 Library。原创 2022-11-27 13:17:50 · 1333 阅读 · 0 评论 -
从 internal 修饰符一探 kotlin 的可见性控制
之前探讨过的和存在module的限制,但其主要用于密封 class 的扩展和 interface 的实现。如果没有这个需求只需要限制 module 的话,使用 Kotlin 中独特的internal修饰符即可。本文将详细阐述 internal 修饰符的特点、原理以及 Java 调用的失效问题,并以此为切入点网罗 Kotlin 中所有修饰符,同时与 Java 修饰符进行对比以加深理解。internal 修饰符open 修饰符default、private 等修饰符针对扩展函数的访问控制。原创 2022-11-13 18:20:56 · 2274 阅读 · 0 评论 -
深入学习 Kotlin 特色之 Sealed Class 和 Interface
sealed class 以及 1.5 里新增的 sealed interface 可谓是 Kotlin 语言的一大特色,其在类型判断、扩展和实现的限制场景里非常好用。本文将从特点、场景和原理等角度综合分析 sealed 语法。每个 enum 常量只能以单例的形式存在sealed class 子类可以拥有多个实例,不受限制,每个均可以拥有自己的状态enum class 不能扩展自 sealed class 以及其他任何 Class,但他们可以实现 sealed 等 interface。原创 2022-10-30 09:27:56 · 788 阅读 · 0 评论 -
开发这么久,gradle 和 gradlew 啥区别、怎么选?
翻译自《gradle-vs-gradlew-difference》使用Gradle的开发者最常问的问题之一便是: gradlegradlew。这两个都是应用在特定场景的 Gradle 命令。通过本篇文章你将了解到每个命令干了什么,以及如何在两个命令中做选择。快速摘要如果你正在开发的项目当中已经包含gradlew脚本,安啦,可以一直使用它。没有包含的话,请使用gradle命令生成这个脚本。想知道为什么吗,请继续阅读。原创 2022-09-18 11:34:07 · 5567 阅读 · 2 评论 -
如何打造车载语音交互:Android Voice Interaction 给你答案
语音交互并不是一个新事物,很早就有了。比如 Apple 设备的 、Amazon 的 、Google 的 等等。它们大多是系统的内置服务,由热词唤醒或按键触发,之后只通过语音指令即可完成完整的交互。可这些交互场景往往覆盖了系统服务或系统 App,而对第三方 App 的支持有限或者鲜少针对第三方 App 完成完整的语音交互逻辑。第三方 App 除了被动等待系统语音服务的调度,当然可以选择主动支持。可是完全依靠自己实现的话,需要考虑监听、识别、理解、分析、调度等诸多复杂逻辑和流程,耗时耗力、可能还入不敷出。那有原创 2022-07-03 09:19:48 · 2941 阅读 · 0 评论 -
Android 13 返回导航大变更:返回键彻底废弃 + 可预见型返回手势
Android 13 针对包括手机、大屏、折叠屏等 Android 设备推出了可预见型返回手势()特性。该特性将便于用户在返回完成之前可以先预览到目标画面或结果,这样的话可以允许他们决定是否要继续返回或者放弃并停留在当前画面。另外引入关于 KeyEvent 相关的一系列变更。为节省篇幅和统一认识,后续的相关描述将按照如下规则简称:后续将按照如下几个方面去阐述:简单来说会产生如下影响:备注:无关 ,运行在 13 上只要支持新返回导航均会受收到如上的影响。准确含义是 13 上一旦开启新返回导航支持,无论是 B原创 2022-06-05 14:54:57 · 6461 阅读 · 0 评论 -
谈一谈 Android 嵌套 Intent 以及解决方案
翻译自 Nicole Borrelli 在 Medium 上的 post 《Android Nesting Intents》。你的 App 是否在某些情况下对外提供了一个 Service 来执行启动其他 App 的 Activity 组件的回调。比如说,接收的 Intent 请求会以 extra 参数的形式内嵌着的其他 Intent ,而这个 Intent 参数会被用作 startActivity() 调用。你有没有意识到这种做法会让你的 App 变得脆弱、易攻击?如下的内容将解释采用这种做法会..原创 2022-05-24 20:11:45 · 262 阅读 · 0 评论 -
Android 13 针对 Intent filters 安全的再加强
作者:李龙、TechMerger 君在看这个变更之前,我们需要回忆下 Android 12 的一个安全性变更, 即声明了 <intent-filter> 的Activity、BroadcastReceiver、Service 必须声明 android:exported, 否则将会无法被启动。Android 12 的这个变更是为了防止开发者在不知情的情况下,声明了一个 intent-filter 就会使得这些组件对外公开,一定程度下强化了安全性。但是却漏掉了显示 Intent 启动和 ..原创 2022-05-17 22:03:11 · 6911 阅读 · 0 评论 -
Android 13 新的换行策略和针对日文的优化
前言Android 13 向 TextView 控件引入了新的换行策略,同时针对日文提供了换行优化。系统将依据开发者指定的换行策略、日文短语换行策略进行文本换行。这将促使文本内容不再杂乱无章、更加具有层次、便于阅读。下面我们从 API、实战、适配办法等多个角度来快速学习一下这个新特性。换行策略 lineBreakStyleIndicates the line break strategies can be used when calculating the text wrapping..原创 2022-05-12 22:25:30 · 1322 阅读 · 4 评论 -
MAD,现代安卓开发技术:Android 领域开发方式的重大变革~
Android 诞生已久,其开发方式保持着高频更迭,相较于早期的开发方式已大不相同,尤其是近几年 Google 热切推崇的 MAD 开发技术。其实很多开发者已经有意或无意地正在使用这门技术,借着 2022 开年探讨技术趋势的契机,想要完整地总结 MAD 的愿景、构成、优势以及一些学习建议。MAD,全称 Modern Android Development:是 Google 针对 Android 平台提出的全新开发技术。旨在指导我们利用官方推出的各项技术来进行高效的 App 开发。有的时候 Google.原创 2022-01-24 16:35:17 · 3781 阅读 · 0 评论 -
Jetpack 叒一新成员 DragAndDrop 框架:大大简化拖放手势开发
对于拖放功能,大家并不陌生,这是在桌面端最稀松平常的操作,比如将文件拖入回收站。随着移动设备的大屏趋势、可折叠设备的愈加发完善,拖放操作在移动平台里端也显得愈加必要和流行!针对拖放功能的实现,Android 平台现存的方案略为复杂。基于此, Jetpack 框架集合里推出了新成员 DragAndDrop 。本文着重阐述该框架的愿景和核心要点,主要内容译自 Android 开发者关系工程师 Paul 在 Meduim 上的 Post:Simplifying drag and drop。本质来说,拖放手.原创 2021-12-18 21:19:02 · 885 阅读 · 0 评论 -
倾情分享:Android 开发者们不要错过的网站宝藏~
从事 Android 开发多年,攒了很多宝贵的学习网站,分享给大家。涵盖了系统、API、语言、开发工具、以及各种官方学习平台,不求面面俱到,只求无私分享!原创 2021-12-11 15:41:10 · 2912 阅读 · 0 评论 -
Handler 的 Message 实例怎么获得?为什么不是直接 new?
基本都是调用 obtain() 来获得使用 Message 的方式有很多种,无论是 Handler#obtainMessage() 还是 Message#obtain(),甚至是 Handler#postRunnable(),本质上都是调用 Message 的静态方法 obtain()。 public final Message obtainMessage() { return Message.obtain(this); } public final boole.原创 2021-09-13 23:59:31 · 398 阅读 · 0 评论 -
写了个MVP架构的电影搜索App
机缘巧合下花了一天多做了个DEMO以演示一定回顾和整理App开发的基本知识。涉及到App架构,网络请求,UI展示,开源框架,单元测试的使用等知识面。网络上有很多公开的接口,以供调用。本人恰巧喜欢电影,选择了OMDb的公开接口。申请API KEY也很方便。大体制定了简单的需求:提供输入框供用户输入关键字点击搜索按钮到OMDb网上检索后展示电影列表。界面上选择了...原创 2020-03-07 21:44:51 · 861 阅读 · 3 评论