Libery

秋流到冬尽 春流到夏

0%

需求

随着版本迭代越来越多,我们需要每次手动修改 ChangeLog,多人维护项目则容易忘记填写,并且组件化后每个模块多人维护,容易忘记填写.Module 里填写了 ChangeLog 但是 App 壳项目也要填写相同内容,也是比较麻烦的事.所以需要引入自动化来降低我们手动维护的成本.

阅读全文 »

问题

公司项目中使用 React Native 实现部分功能,因为业务需求问题,比如 A 和 B 分别继承 ReactContextBaseJavaModule 且其 ReactMethod 所注解的方法也相同,但是其实现略有不同,这时候正常做法是会写抽象类或者说接口,这时候 ReactMethod 应该写在那里呢,如果在父类或者接口里,运行起来会发现找不到这个方法,如果写在实现类里会很麻烦.

阅读全文 »

译文

你知道 Android 里有个叫blink的 ViewGroup 吗?惊讶吗?我第一次知道它时和你是同样的表现.

当我正在阅读LayoutInflater的源码,我对 xml 如何转换成 object 特别感兴趣,所以我没有从头开始阅读这个类,而是直接阅读inflate(layoutRes,parent方法.

经过一段时间的阅读,我在View createViewFromTag(View parent, String name, Context context, AttributeSet attrs, boolean ignoreThemeAttr)方法前停了下来,这个方法签名没有特别之处,但是以下的情况很奇怪,并且注释也是.

Let's party like it's 1995!

阅读全文 »

上一篇介绍怎样新建一个插件工程,本篇分析 EventBus 插件的实现.
此插件涉及较多的 Java GUI 代码,但是自己也不是很熟悉,只能做大概分析,重点在于分析扫描引用点.

扫描规则

我们项目对于 EventBus 有特殊的封装,就需要插件可以扫描出XXX.send(new NotifyEvent())(XXX 类也可能会有子类),可以找出这个 Event 所有的接收点,并且对于继承了 Sender 的类页都应该支持.

XXXX.java
1
2
3
4
5
6
public static void notify(){
send(new NotifyEvent());
}
static void send(Object eventModel) {
Smart.getEventBus().post(eventModel);
}
阅读全文 »

Intellij 有很多优秀的开源插件,让我们更加高效的编程.EventBus 虽然可以很好的解耦,但是对于使用者来说不那么方便找到发射点和接收点.EventBus Plugin 帮我们愉快的解决了这个痛点.但是由于我们项目自己封装 EventBus,所以其插件无法生效,只能通过站在巨人的肩膀上,修改轮子让他重新跑起来.

配置开发环境 新建项目

开发插件可以使用收费旗舰版也可是使用免费社区版本.

  1. File->New->Project 选择 Intellij Platform Plugin 如图

    Project SDK 选择 Intellij 的安装目录,这个 SDK 版本觉得这最低兼容版本,如果要适配低版本的 Intellij 或者 Android Stuido
    如果想使用 Gradle Kotlin 之类的开发方式可以选择 Gradle 然后勾选 Java、Kotlin、Intellij Platform Plugin
  2. 输入项目名称和路径,点击 Finish 即可创建插件项目
  3. 配置 SandBox
    IntelliJ Plugin Run/Debug模式运行在 SandBox 中进行的,和当前 Intellij 没什么关系,需要在 Project Structure 中设置 Sandbox Home 路径.
    阅读全文 »

本文中的灰名单指的是 Aandroid 规定的深灰名单
我们应用使用了 Pandora 1.3.2 版本 库,方便测试环境里查看界面元素、网络、数据库之类的数据.在使用 Aandroid 9.0 时发现会弹出下面这样的提示框.需要探寻下是什么原因引起的,在那里调用的,能不能去掉这个强制提示.

应用的 targetSdkVersion 是 27,compileSdkVersion 是 28
Pandora 2.0 版本目前已经规避了这个问题,都使用了浅灰名单里的方法或字段.

阅读全文 »

前言

为了监测 APP 运行时是否流畅,项目使用 Choreographer 配合 ActivityLifecycleCallbacks 监测页面掉帧情况,然后在记录到数据库,方便回顾那些页面出现频繁卡顿情况,目前只是在测试环境使用,还未实现上传至服务器做更直观的分析,都需要dump 出 db 文件再分析.项目最低版本也是 4.1 以上,所以使用了 Choreographer 这种方式.

阅读全文 »

项目中需要核验身份信息,所以模拟支付宝的身份证 OCR 界面,做一个类似的功能.但是又有不同的地方,我们需要拍下照片而不是不断的扫描获取图像.
由于项目最低支持 4.0 系统为了方便起见使用 Camera 而不是 Camera2 接口,因为 Camera2 是 5.0 以后加入的 api.

阅读全文 »

使用 DownloadManger 进行应用内更新然后当下载成功时调起安装界面,感觉挺简单调用系统 api 就可以完成,但是里面适配的坑真的是很多.

阅读全文 »

在查看同事写的代码时,发现各种方法调用有点混乱,不易快速梳理逻辑.所以想着是否可以通过打印方法日志,从而观察各种方法间的调用逻辑.

需求

  1. 打印方法名称、入参、耗时、返回值
  2. 对项目所有方法生效
  3. 可以自定义排除不打印的类
  4. 可作为三方库
    阅读全文 »