随笔分类 - Android
摘要:一、背景 项目开发中,有时候我们需要获取到Gradle源头Task,以做进一步的逻辑处理。如项目中存在多个组合变体的情况下,需要针对其中特定变体引入不同的plugin。这可能是基于如下考虑: 1,如若所有变体都引入并集后的plugin,在逻辑上对某些变体确实是没必要的; 2,如若plugin中如果有
阅读全文
摘要:一、背景 项目中用到了多个第三方的SDK,其中有些外部服务是需要在AndroidManifest中配置的,并且通过形如android:process=":remote"配置单独的进程。如百度定位,对应service配置如下: <service android:name="com.baidu.loca
阅读全文
摘要:一、背景 一般意义上而言,Java/Android中的引用类型包括强引用、软引用、弱引用、虚引用。不同的引用类型具有各自适用的应用场景,并与JVM的GC直接相关。 作为Java/Android中的引用类型之一,WeakReference被大量的使用到系统源码、基础工具甚至具体的业务逻辑中。在解决需要
阅读全文
摘要:一、背景 项目中,客户端与服务端之间普遍使用Https协议通信,突然接到测试同事反馈Android5.0以下手机上,App测试服使用出现问题,出现SSL handshake aborted错误信息,但正式服正常。经查,普遍错误信息详情如下: SSL handshake aborted: ssl=0x
阅读全文
摘要:一、背景 无论是Java还是Android项目,往往都会用到多线程。不管是主线程还是子线程,在运行过程中,都有可能出现未捕获异常。未捕获异常中含有详细的异常信息堆栈,可以很方便的去帮助我们排查问题。 默认情况下,异常信息堆栈都会在输出设备显示,同时,Java & Android为我们提供了未捕获异常
阅读全文
摘要:一、背景 为了安全起见,开发者本地开发和Jenkins上正式构建时,App采取的签名文件是不一样的。本地开发采取通用的如debug.keystore,正式签名文件部署在服务端。现在不少机型,如Oppo,在本地构建安装时往往首先需要输入安全密码,之后还会自动与Oppo应用市场官方渠道上相应App的签名
阅读全文
摘要:一、背景 从系统架构上来说,Android是基于Linux系统基础上,做了进一步的定制与修改,并融入了自身的特有功能,且向应用层提供应用程序接口,供开发者使用。系统内核层面,主体依然是Linux内核。因此,以往的Linux系统上的开发、使用和经验,在Android系统上很大程度上还是适用的。 And
阅读全文
摘要:一、背景 项目开发中,AS(Android Studio)经常会用到通过关键字在项目空间下搜索对应结果。最经常用到的Find in Path。例如打开Find in Path后,可以选中Scope tab,选择All Places范围去搜索对应的关键字,下方会自动显示对应的搜索结果。 Find in
阅读全文
摘要:一、背景 进行Android项目开发时,跟网络代理基本上天天都在打交道。通常情况下,至少有三个场景中经常用到网络代理: 1,经常通过Chrome访问Google等国外的技术网站,如通过SS工具等; 2,AS(Android Studio)中需要下载国外的aar或jar包等资源; 3,手机抓包时,电脑
阅读全文
摘要:一、背景 最近改项目中的bug,遇到一类问题:当月起始日可以设置的情况下(1日到28日),需要计算出对应的月、季度、年等相关的时间范围,以及对应的如上月、上季、去年等,和给定时间戳的所属年、季度、月份等各种时间求取。 为简单起见,举个栗子: 如如果月起始日设置成了5,那么本月的时间范围是: 2019
阅读全文
摘要:一、背景 工作中有时候往往会遇到下述场景:例如需要将新打好的安装包等文件临时性的给到同事,可能还需要给到多个同事。这时,我们往往有如下几种方案: 1,一般都会有公司内部的文件系统,上传文件后将对应的地址给到同事,但往往涉及到权限等诸多限制,且自己这边每次都要上传。 2,上传到外网,然后将对应的链接给
阅读全文
摘要:一、背景 Android系统版本在不断更新,从最初的Android 1.0到现在Google和各大手机厂商正在推的Android 10,平均下来每个年头都有一个大的版本更新。但用户正在用的手机上的Android系统版本往往更新上来有个过程,如当前时点不少App最低支持的Android系统版本还是4.
阅读全文
摘要:一、背景 Gralde版本与AGP(Android Gradle Plugin)版本具有一定的对应关系,原因在于AGP实质上作为Gradle的插件,依赖于Gradle作为宿主。因此,不同的AGP版本需要与相应的Gralde版本相匹配。他们之间版本的对应关系如下: 具体可以参照官方文档: develo
阅读全文
摘要:一、背景 项目需求的频繁迭代,新的产品功能在不断添加和延伸,随之带来的是,项目技术复杂度的提升。 近几年来,Android模块化、组件化相关技术得到极速发展,将项目整体进行分层,不同的层次之间依据实际的技术功能或业务支撑或业务模块去划分具体的组件或模块,是组件化或模块化一致的行动方向。 复杂的产品功
阅读全文
摘要:一、背景 大家都知道,Android Studio开发工具自带了Analyze Apk,可以很方便的分析Apk文件。具体位于菜单build >> Analyze APK...路径下,点击后可以选择目标路径下的Apk文件,甚至可以直接将目标APK文件直接拖拽到Android Studio中,不到几秒中
阅读全文
摘要:一、背景 Http俨然已经成为互联网上最广泛使用的应用层协议,随着应用形态的不断演进,传统的Http在安全性上开始面临挑战,Http主要安全问题体现在: 1,信息内容透明传输。 2,通信对方的身份不可安全验证。 3,通信信息可能被篡改。 于是,结合SSL/TLS协议,形成的Https,被广泛使用。H
阅读全文
摘要:一、背景 SPI,全称Service Provider Interfaces,服务提供接口。是Java提供的一套供第三方实现或扩展使用的技术体系。主要通过解耦服务具体实现以及服务使用,使得程序的可扩展性大大增强,甚至可插拔。 基于服务的注册与发现机制,服务提供者向系统注册服务,服务使用者通过查找发现
阅读全文
摘要:一、背景 代理模式,作为常用的设计模式之一,在实际项目中或多或少都会被使用到。当前一些主流的项目框架中,也有不少代理模式的身影。 代理模式中,代理类与主体类实现同样的接口,代理类持有实体类的引用,并接受客户端对代理类中实体引用的外部注入,并代理实体类的功能。 注:描述中的这种外部注入形式有个专有技术
阅读全文
摘要:背景 项目中使用ARouter进行路由,由于不同上层业务模块都可能会使用到同一目标的路由地址,因此,将所有业务模块的路由地址以一种类似静态常量的方式设置在Base模块中。这样,在实际目前上加上对应此地址的注解,就可以将其对应加入到路由中。使用方通过ARouter对应的地址方式去路由,即可访问到对应的
阅读全文
摘要:背景 项目组多人协作进行项目开发时,经常遇到如下情况:如Git Commit信息混乱,又如提交者信息用了自己非公司的私人邮箱等等。因此,有必要在Git操作过程中的适当时间点上,进行必要的如统一规范、安全检测等常规性的例行检测。 面对此类需求,Git为我们提供了Git Hooks机制。在每个项目根目录
阅读全文