smallSohoSolo

smallSohoSolo Blog

Android View事件分发解析

事件分发的整体的流程图 细节原则 对上面流程图的解析,和一些异常情况的梳理,只有这么多情况可以影响事件分发。 事件一定按照图里面的线走。 图里面没标记true 或者 false的线就是一定会走的。 如果事件被消费了,后续的事件都会按照最短路线传给消费的View。 onTouchListener > onTouchEvent > onLongClickL...

Android查问题的一些技巧

当项目庞大到一定量级的时候,我们就会出现各种神奇的问题,针对查问题的一些方案,总结了一些小技巧,可以帮助大家更快的定位问题,而不用浪费更多时间 如何定位一个View在哪里 如果这个view可以点击,在OnClickListener的OnClick方法上面打个断点 如果这个View无法点击,请在View的OnTouch方法添加断点,用手触摸一下即可。 点击一下命中之后即可在左下...

Android优雅的打包时自动化获取全部res资源

随着项目的不断迭代,各种自动化工具的需求会涌现出来,这里列举几种场景 由于开发人数众多,需求多,导致图片的放置会很混乱,设计给的大图不经过压缩就放进项目,导致包大小无限膨胀 目前某音短视频项目存在多个flavor,可能某些字符串需要动态的使用脚本替换解决App名称不一致的问题(当然这个解决方案有很多种,这里列举一种) 对资源的自动化处理的需求是不可避免的,所以如何处理是一个问...

Android App Bundle探索

什么是App Bundle Android App Bundle是Google最新推出的Apk动态打包,动态组件化的技术,通过一个.aab结尾的bundle文件组装一个apk来为你的设备安装。这是一篇科普的文章,后续会对源码进行剖析。 通俗理解就是,Appbudle就是把Apk拆分成了多个积木,之前我们是把一个大而全的apk装到你手机里面,但是你其实用不到这么多东西,比如,你xxhdp...

Android简易路由框架MobRouter开发

Android Router介绍 Android Router即是Android路由工具,通过使用路由工具,可以做到通过一句话进行跳转,无需知道具体的Activity类。 context.startActivity(context,XXX.class); //常见的跳转 MobRouter.build("image_activity").go(); //使用路由框架跳转 通过这种路由...

[译]使用ASM Core API修改类

2. 章节 这个章节说明了如何使用Core ASM API 构造并且修改编译Java字节码。开始首先介绍字节码的编译,之后指出相应的ASM接口,组件和工具去构造和修改她们,并且有很多实用的例子。方法,注解和泛型的内容在下一章节说明。 2.1. 结构 2.1.1. 概览 字节码的结构是很简单的。并不像一个编译好的Application,字节码保留了结构信息和大多数的源代码符号。事实上,...

startActivity探索

本篇博客代码基于aosp发表日期最新的repo master分支(API 25)。可能会伴随很多源码,所以略显枯燥,源码已经被我手动精简带上注释。 如何启动Activity? startActivity(new Intent(this,XXX.class)); 使用startActivity可以很轻易的启动一个Activity,可以在Activity中使用,可以在Service中使用...

Android单元测试实践

为什么要引入单元测试 一般来说我们都不会写单元测试,为什么呢?因为要写多余的代码,而且还要进行一些学习,入门有些门槛,所以一般在工程中都不会写单元测试。那么为什么我决定要写单元测试。因为两个条件 我很懒:我每次改完都很懒测试 我很怂:我要是不测试,没有一次通过的信心,于是我还是要测试。。。 这篇博客看完并不会让你完全掌握单元测试,但是会给你在单元测试的开始有一个好的指引 ...

McImage插件解析

介绍 McImage插件传送门:https://github.com/Aweme/McImage McImage是一个对资源中的png和jpg图片进行压缩和图片大小检查的插件,通过pngquant算法对图片资源进行压缩,并且可以设置图片最大大小来在打包时候对所有图片资源进行检查。如果发现大于设置的大小,默认为1M,那么就会中断打包,并且提示是哪张图 与tinypng的比较 McImag...

Android自定义Gradle插件

最近各种热修复框架开源,其中使用instant run方式的框架是目前兼容性最好的,典型的有蘑菇街的Aceso和美团的Robust。两者都是使用ASM在编译的时候进行方法级别的修改来达到在运行时热修复。具体原理不详谈,本篇文章主要讲述使用插件在编译时候进行处理。 基础流程:Gradle会将Java代码打包成class,我们可以在打包成class之后插入我们的插件,在插件中使用asm来进行对...