- 博客(150)
- 资源 (13)
- 问答 (4)
- 收藏
- 关注

原创 LeakCanary核心机制学习
read the fucking source code前言本文不包含分析LeakCanary所使用的haha库的代码.LeakCanary 官网本文基于:leakcanary-android:2.7简单的使用仅是一句话,连初始化代码都不需要你写.dependencies { debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'}LeakCanary初始化分析上图便是leakCanary工程目录,而
2021-04-25 20:03:06
602

原创 Kotlin协程系列目录索引
协程基础库Kotlin协程源码分析-2 调用挂起函数Kotlin协程源码分析-3 调用挂起函数Kotlin协程源码分析-4 状态机Kotlin协程源码分析-5 状态机Kotlin协程源码分析-6 suspendCoroutineUninterceptedOrReturn注意点Kotlin协程源码分析-7 Context左向链表Kotlin协程源码分析-8 拦截器协程核心库Kotlin协程核心库分析-1 DispatchersKotlin协程核心库分析-2 Job简述Kotlin协程核心
2021-04-20 14:34:32
1602
2

原创 view的事件分发
文章目录前言一次触摸事件事件处理涉及重要方法为什么需要事件分发本文的Demonstrate代码源码分析知识铺垫ViewGroup下的ACTION_DOWN处理ACTION_DOWN子view消费ACTION_DOWN子view不消费ACTION_DOWNViewGroup下的第一个ACTION_MOVE处理假设子view消费了之前的ACTION_DOWN事件假设子view没有消费了之前的ACTION_DOWN事件ViewGroup下的后续ACTION_MOVE处理前言本文基于<<Androi
2021-04-20 14:14:53
255

原创 Binder驱动源码分析目录
目录Android Binder驱动分析一 ServiceManager启动流程Android Binder驱动分析二 ServiceManager与binder驱动Android Binder驱动分析三 addservice源码分析Android Binder驱动分析四 addservice源码分析Android Binder驱动分析五 addservice源码分析Android Binder驱动分析六 addservice源码分析Android Binder驱动分析七 线程相关Andro
2021-04-11 12:18:45
494

原创 Handle 源码分析与学习
class ActivityThread{ public static void main(String[] args) { //构造一个主线程对应的Looper实例,存放在Looper.sMainLooper中 Looper.prepareMainLooper(); //... //创建一个Handler对象实例 if (sMainThreadHandler == null) { sMainThreadHandler = thread.getH
2021-03-07 17:17:03
394

原创 java 泛型擦除
前言本文讲从字节码层面深度学习泛型,这也是大厂常见面试我们定义了如下类图所示类:泛型的协变与逆变定义泛型 extend的作用请先浏览如下代码 List<? extends Female> extenfemalesList1 = new ArrayList<Female>();// List<? extends Female> extenfemalesList2 = new ArrayList<Human>(
2021-02-13 02:32:01
325

原创 Gradle插件 protobuf自动编译
前言protobuf是Google推出的序列化协议,比json所占的字节更小,序列化更快等特点。protobuf Github地址protobuf 语法教程Tip:移动端可以考虑用lite版本减少生成的类体积
2020-12-06 20:33:54
1617

原创 Android之免清单注册启动Activity
在此立志:我要努力大学毕业进BAT 实习目标:Activity不需要注册在清单即可通过intent启动。有些文章叫做hook技术。大致内容为监听方法或者的调用或触发,期间修改方法参数或者返回值达到无须需改app源码即可修改app。如Xpose有插件可防止qq撤销消息。我们今天监听activity的启动然后进行方法修改,期间会用动态代理和大量的反射Activity启动流程分析 第一章首先学习ac
2017-10-12 16:29:53
7294
3

原创 Android压缩图片和libjpeg库
前言一些额外知识补充知识的结论参考文献前言:在android开发时我们往往有如对图片如下的需求: 1. 希望压缩图片方便网络传输 2. 修改图片分辨率 防止在Android加载Bitmap的时候oom(内存溢出)一些额外知识:Android的Bitmap对象在加载时 内存大小为:宽的像素*高的像素*位图格式(如ARGB8888)注意: 这里的
2017-09-01 00:16:34
5252
1

原创 最全的增量更新入门 包含linux端和Android
简介增量更新大量用于 Android各大应用市场.本文想做网络上从服务器到app客户端完整讲解.app用eclipse和android studio 最新版cmark开发ndk 如下图: 以前一直好奇怎么做的直到知道了bsdiff库. 地址附上: bsdiff源码地址和简介大家可以从简介看到bsdiff是基于bzip2源码(bsdiff和bspatch一个用于生成差异文件补丁,另一个用于差
2017-04-19 19:16:25
3836
1
原创 Android compose 重建流程1
本文是笔者学习Compose是如何自动触发UI刷新的笔记,可能缺乏一定可读性和教导性.(建议阅读参考文献更具启发性)使用以下BOM作为研究环境.我们看一下下面的程序,再点击按钮的时候为什么仅仅重组,其他的Composable不会?背后是如何实现特定作用域定向刷新?${当点击。
2024-10-20 13:52:14
1316
原创 cmake学习笔记2
有时候我们想根据一些上下文情况设置一些东西。在cmake我们可以通过if判断条件去完成 也可通过一个生成表达式的东西完成。cmake有很多生成表达式,这里做一个简述。condition只能传0或者1,如果为1那么返回true_string 否则返回空字符串。如果你的condition不是0或者1那么你需要结合其他其他生成表达式进行嵌套完成。需要注意的是表达式并会在生成构建系统文件的求值,而是在构建目标的时候计算,所以我们这里创建一个自定义目标进行输出。
2024-04-05 17:53:42
499
原创 cmake学习笔记1
是什么?是一个元构建系统(meta build-system),用于生产其他构建系统文件(如Makefile或Ninja)。
2024-04-04 14:36:14
1253
原创 GridLayoutManager 中的一些坑
插入3时:0和1同时执行操作A,不执行操作B , 0和1不会触发onmeasure。3和2执行操作A ,2不会触发onmeasure,3触发onmeasure。插入2时:0和1同时执行操作A,不执行操作B , 0和1不会触发onmeasure。2执行操作A并触发onmeasure。插入1时:0和1同时执行操作A,不执行操作B。函数会根据必要性确定是否要执行子view的测量操作。我们假设假设wrapcotent计算的高度为50。插入0时:0执行操作A,不执行操作B。decorate插入的高度为10。
2024-03-31 15:21:30
1233
原创 Swift中 any some的作用
在学习Swift ui看到一个函数返回了some view。view我可以理解那some是什么?如果你仔细看一些官方文档甚至还有any关键字,也可以用于替换some。那么两则区别是什么?本文为博主笔记不具备说教性。
2024-03-19 22:52:03
1365
原创 Makefile 学习笔记
(2) all.o的prerequisite为all.c all.cc all.cpp(优先级排序,如果有c后缀就不会选cc。(3) 如果当前目录不存在all.c all.cc all.cpp那么会选择Makefile中是否存在all.o或者all.c all.cc all.cpp目标规则。证明命令是可选的 %.c到%.o ,以及%.c到target命令都是可选,MakeFile会隐式执行。证明 all目标隐式依赖all.o和all.o隐式依赖all.c all.cc all.cpp。
2024-03-10 23:57:34
903
原创 ARM汇编学习录 3 - 调试/编译
在学习ARM汇编的时候,我们往往需要将汇编生成为可执行程序以及调试运行。这里使用Android手机作为运行环境。高版本NDK使用clang套件已经不在提供GUN GCC/GDB。
2023-10-24 18:59:58
405
原创 ARM汇编学习录 1 -基础概念
现阶段有四个不同的指令集ARM某一个时刻只能运行单独ARM指令集或者Thumb指令,通过CPSR的T标志位决定.如何当前执行ARM函数,想要跳转到thumb函数可以通过调用BX切换状态,需要注意的是Thumb函数跳转地址必须末尾是1才能让CPSR自动切换(thumb实际函数由于字节对齐末尾是0,所以很多跳转到thumb地址函数时往往会手动+1在执行BX指令)。
2023-10-07 16:47:10
261
原创 gcc/linux下的c++异常实现
本文不一定具有很好的说教性,仅作为自我学习的笔记。不妨可参阅国外大神博文链接中包含了大量的例子。偶有在对做分析的时候看到如下图一些注释,部分关键字看不懂,比如什么FDEunwind等是什么?由于笔者在开发领域,因此偏向下做实现,部分源码有时候会参阅或者版本。
2023-08-27 16:42:15
867
1
原创 Android 抓包相关 SSL相关
因此在Android P基本很少能能抓取http请求,多数以https为主。Android 7以上系统默认会让App不信任默认用户证书,只信用系统证书。默认情况我们只能导入用户证书,系统证书导入需要一些root权限。如下图所示导入的charles证书。如果你有root权限直接导入系统证书即可:如笔者次目录下的用户证书(2) 将证书文件拷贝到系统证书目录举例命令如果出现,重新挂载分区(android 8以上版本请关闭dm-verity以及avb在尝试网上重新挂载命令)。
2023-02-01 20:34:14
2056
1
原创 Android hook方式抓包
在跟大佬学习的时候发现另一种抓包方式,采用fridahook socket 字节流即可,哪里还需要管什么证书绑定,双向认证?
2022-11-11 14:39:13
3616
原创 AOSP 8.1.0 编译一些心得
原版镜像,因为国内镜像发现在99%的时候下载网速挂了,如果遇到这类问题可以把镜像替换回。命令执行下面命令导出一个环境遍历在编译(ubuntu 版本过高导致问题)这是一个很乱的文章,几乎没有什么排序。个人不建议用代理下载而是直接用。下载repo然后进行 复制。快速浅克隆源码到本地。
2022-11-08 18:42:21
966
原创 Android 转场动画源码剖析
= =时隔一年 我竟为了一个UI效果再次学习Android,具体原因:UI设计一个转场动画中非共享元素也要执行动画。转场动画基础使用可参阅官方文档.本文主要描述Activity转场中Google的设计与实现(Fragment比较简单不做讨论)。我们看下本期的案例:具体效果首先我们需要知道需要执行退场动画,执行入场动画,两个Activity需要透传共享元素信息,但是Activity可能存在一个问题:跨进程.因此我们需要自己去设计一套流程在去参看google 源码会更好理解我们这里直接给出一个相关生命周期回
2022-09-10 22:38:29
1647
原创 新概念三册笔记-01
spot /spɑːt/具有含义:1 斑点 nounA big red spot . 一个大红斑A pot on one’s reputation. 某人名声上的污点A leopard won’t change its spots. 谚语 狗改不了吃屎2 有一些spot of sth.有些东西a spot of bother. 有一些烦恼You seem to be having a spot of bother with your car,can I help?你的汽车还有有些问题,需要
2022-07-13 15:43:57
815
原创 BottomSheetDialogFragment滑动问题
BottomSheetDialogFragment使用时经常出现嵌套多个RecycleView以及ViewPager2源码分析BottomSheetBehavior 会在布局时 获取第一个可嵌套滚动的view,并且后续都不会在更换。public class BottomSheetBehavior<V extends View> extends CoordinatorLayout.Behavior<V> { @Nullable WeakReference<View.
2022-05-24 11:22:41
1267
原创 ELF格式解读-程序头与内存布局
前言ELF格式解读-(1) elf头部与节头我们知道ELF中有一个头部叫程序头,这个头部专门用于将ELF加载内存中使用。参考Why ELF program headers have two LOAD entries, while the program layout three sectionsHardening ELF binaries using Relocation Read-Only (RELRO)[阅读型]CTF中linux pwn的四大基本防御措施Program Header
2022-05-02 20:04:59
2458
原创 ELF格式解读 Dynamic节
前言首先抛出一个问题,假设程序A需要动态库中的函数funb,那你你怎么知道这个函数在哪个动态库中?以及我们加载器怎么知道我们是否启用延迟加载还是立即加载?为了解决以上问题ELF推出了一个节名为.Dynamic,里面包含很多信息比如你需要的动态库,以及是否立即加载以及符号表等。在got表的第一项指像.Dynamic,并且延迟绑定那个的时候需要传入.Dynamic对象地址,因为里面包含解析函数地址的上下文。实战我们看看下main的例子//main.c#include <stdio.h>
2022-05-01 15:57:04
3776
原创 ELF格式解读-符号表
前言一个优先的symtab文章我们常常调试错误说需要符号表,那么符号表是什么?符号表仅仅用来调试?符号表本质就是一个映射表,举个例子:某行二进制汇编代码映射到源码第几行。符号表的作用:调试重定位调试window工程有一个*.pdb文件,里面编包含调试符号.可参阅wiki window pdb格式。在java工程会使用一个叫混淆的技术,混淆后会生成混淆前后的映射文件mapping.txt,这个也可以理解为符号表的一种。在linux有一个dwarf的文件格式也是专门用于调试的文件。参阅w
2022-04-30 14:44:15
3952
1
原创 通过GDB学透PLT与GOT
前言本文需要基础的ELF格式文件知识。我们知道printf代码的实现位于libc.so中,而我们知道我们的so是在运行通过加载器进行加载的.如下代码所示://编译指令 gcc -o main2.out main2.c -zlazy //zlazy是启用延迟绑定。部分发行版本连接器直接程序加载的时候会进行绑定so函数#include <stdio.h>void main(){ printf("hello %d",23);}ldd命令可以查看程序所需的动态库在so编译
2022-04-23 19:08:41
2822
1
原创 ELF格式解读-(1) elf头部与节头
前言ELF是linux动态库,可执行文件的格式.具体介绍可参阅wiki Executable and Linkable Format。可以类比到windows下exe的格式。我们知道程序需要加载内存后才能运行。但是ELF文件加载到内存后布局会变化和原始ELF文件相比,加载器会将相同的节属性(比如只读)合并一个段。所以ELF也就有了两种视图,一种未加载前静态视图,另一种是加载后的动态视图。我们首先了解静态视图下ELF文件格式如下:你可以把ELF内容大致分为四个部分:(1) ELF头部(2) 节
2022-04-20 18:34:08
6720
3
原创 英语音标真的分得清楚?KK IPA DJ
前言每次查词典时被混乱的音标体系搞得一团乱(美音),因此查了许多资料写了下总结。对于学习英式发音(RP)的同学其实并不困惑,因为英式发音体系已经非常完成形成了标准,但是对于美式英语(GA)却是混乱不堪。对于我身边学习英语的同学貌似没有几个能区分他们到底学的是哪个类型音标都无法区分,于是我又拿出不同版本变化DJ音标音符让他们区分依然觉得很混乱但说貌似都见过。什么是IPA?IPA就是我们常说的国际音标(International Phonetic Alphabet),里面包含众多音符用其可以发出全世界
2022-04-17 13:53:34
1878
1
原创 Android 编译优化探索3
org.gradle.internal.execution.steps.ResolveChangesSteporg.gradle.internal.execution.history.changes.DefaultExecutionStateChangeDetector
2022-04-05 17:24:32
2922
原创 Android 编译优化探索2 Hack字节码
前言承接上文:Android 编译优化探索再最初的版本中需要编译kotlin才能实现Hack自定义增量,但是还一个任务同样也及其耗时org.gradle.api.tasks.compile.JavaCompile,但是此任务不在kotlin插件,难道我们又要自己编译java插件?就连鄙人导师都觉得编译kotlin插件很麻烦。于是乎最后决定采用动态修改字节码的方式实现。作者使用javassist作为字节码编辑器。JavaCompile创建流程在android工程中JavaCompile的创建是由AG
2022-01-31 16:10:26
2282
原创 Android 编译优化探索
前言在mac较为高配的情况增量编译TIYA项目需要2分钟30s左右,这严重影响开发效率。在常规优化手段使用完后只能堆砌硬件进行提升效率是及其不可取的方案,于是和一位同事决心做一次优化。以下是benchmark统计出的增量数据优化前:结果:2分30秒优化后:27秒左右增量时间动态替换成AAR是否可行?在优化初期曾考虑过如果module如果没有改动话,那么将其封装aar在利用插件动态替换依赖即可。期间遇到很多问题与兼容性,最后这种方案技术实现麻烦且最后效益得不偿失。参考文献kapt
2022-01-22 17:53:15
2554
1
原创 我所理解Android渲染流水线与优化
概述Profile GPU Rendering 工具相关基础知识可参考如下链接:官方文档官方文档2Google 官方视频讲解我们的视图View大致渲染流程(根据视频自己理解):我们视图最终都会交付GPU进行渲染,最后我们的GPU在将数据显示到屏幕.我们的View首先会转化为一些OpenGL所能理解绘制命令OpenGL会将这里绘制命令进行计算并最后交给GPU显示CPU我们View在执行相关回执函数后(Ondraw)执行后创建一个Java Display List 所谓的Java Dis
2021-11-21 19:05:34
2073
原创 java proguard混淆示例和结果
前言混淆基础知识混淆基础语法官方指南看了很多混淆的文章但是对于混淆的前后结果语法对比很模糊,因此写下这篇文章。-keep保持类或者成员不被混淆(obfuscate)或者移除(shrink)案例1我们工程下就两个类//MySubLib.javapublic class MySubLib { public void test() { } public String name = "hehlo"; public int age =3;}//MySubLi
2021-10-18 17:19:55
4335
原创 MMKV 原理剖析1
前言MMKV开源地址protobuf变长编码//CodedOutputData.cppvoid CodedOutputData::writeRawVarint32(int32_t value) { while (true) { if ((value & ~0x7f) == 0) { this->writeRawByte(static_cast<uint8_t>(value)); return;
2021-07-24 00:23:05
720
3
frida-12.8.20-py2.7-macosx-10.9-intel.egg
2020-04-05
AIDL bindservice流程图
2017-09-29
fastjson 阿里巴巴的解析生成json工具
2016-09-01
Android 控件顶部阴影如何添加?
2017-04-14
Git创建本地仓库后 如何给他人地址?地址是什么
2016-10-18
安卓最新studio2.1 导入github项目选择那一项 谢谢
2016-10-13
安卓SDK目录中build-tools是用来干嘛
2016-08-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人