
android源码
文章平均质量分 72
不会写代码的丝丽
这个作者很懒,什么都没留下…
展开
-
Android hook方式抓包
在跟大佬学习的时候发现另一种抓包方式,采用fridahook socket 字节流即可,哪里还需要管什么证书绑定,双向认证?原创 2022-11-11 14:39:13 · 3642 阅读 · 0 评论 -
Android 转场动画源码剖析
= =时隔一年 我竟为了一个UI效果再次学习Android,具体原因:UI设计一个转场动画中非共享元素也要执行动画。转场动画基础使用可参阅官方文档.本文主要描述Activity转场中Google的设计与实现(Fragment比较简单不做讨论)。我们看下本期的案例:具体效果首先我们需要知道需要执行退场动画,执行入场动画,两个Activity需要透传共享元素信息,但是Activity可能存在一个问题:跨进程.因此我们需要自己去设计一套流程在去参看google 源码会更好理解我们这里直接给出一个相关生命周期回原创 2022-09-10 22:38:29 · 1669 阅读 · 0 评论 -
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 · 2289 阅读 · 0 评论 -
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 · 725 阅读 · 3 评论 -
SparseArray 源码分析
SparceArray效率对比我们使用HashMap来进行对比,我们这里使用androiX下面的SparceArray版本对象。实现代码: val hashMap = java.util.HashMap<Int, String>(num) var time = measureTimeMillis { for (i in 0..num) { //请勿直接使用i插入,否则一定能够是sparseArray更快,顺序插入在实际生活很少不具备原创 2021-06-04 17:26:42 · 288 阅读 · 0 评论 -
AMS常用知识学习 1 app与ams通信
前言其实在网上已经有数不尽的Activity启动流程分析,但是我很多时候喜欢自己在去跟着源码看一遍.加上今年花了很长时间学习Binder所以在次看源码的时候发现思考的方向也有所不同.本文讲解的源码版本为Android 5.0,不会像其他文章一样深入本文所需的前置知识:Binder驱动源码分析目录AMS 和App的关系AMS基础知识AMS全称为ActivityManagerService,在AMS启动时会向ServiceManager注册服务,服务名为activity(binder基础知识可参考原创 2021-05-22 20:14:03 · 1118 阅读 · 0 评论 -
Okhttp3 设计思想学习
前言Okhttp的源码其实并不难,难的是对于Http的协议的熟悉程度.比如如何缓存.其实Okhttp参考了当前很多热门的浏览器源码而编写成的客户端.你可以看到很多线程数的设置都参考了主流浏览器.你可以把Okhttp视为一个无渲染界面的浏览器即可.Http缓存想要看得懂Okhttp拦截器你首先必须对Http协议自带的缓存机制有一定的了解.这里给出两个参考1 HTTP 缓存(建议切换到英文版本)2 Wikipedia HTTP头字段3 可能是最被误用的 HTTP 响应头之一 Cache-Contr原创 2021-05-19 00:43:29 · 364 阅读 · 0 评论 -
Glide 自我修养系列 1
参考源码解析:Glide 4.9之缓存策略Glide 源码分析解读-基于最新版Glide 4.9.0Android主流三方库源码分析(三、深入理解Glide源码)深入分析Glide源码原创 2021-05-14 14:06:47 · 435 阅读 · 0 评论 -
RecycleView 缓存机制
参考文献您可以先看看下面的文章后,再看博主的也许有更大的收货.每日一问 | RecyclerView的多级缓存机制,每级缓存到底起到什么样的作用?深入理解 RecyclerView 的缓存机制RecyclerView缓存原理,有图有真相前言本文所分析的源码版本:androidx.recyclerview:recyclerview:1.1.0缓存本质思想:缓存是一种空间换时间的算法思想.recyclerview缓存了什么:缓存了ViewHolder对象.原创 2021-05-07 20:02:49 · 746 阅读 · 0 评论 -
Arouter 源码学习 1
前言ARouter开源地址本系列是笔者学习ARouter开篇系列.本文不是教程系列,而是大致分析Arouter路由分发逻辑.以下是一些预备知识:Arouter是一个基于apt框架,对于@Route,@Interceptor,@Autowired等注解的类会在Example/app/build/generated/source/kapt生成对应的类,如下图:注意除了Autowired注解生成在我们自己的包下,其他类全部都在com.alibaba.android.arouter.routes.(这原创 2021-05-04 22:39:13 · 317 阅读 · 2 评论 -
gradle编译时注解增量教程
前言gradle增量注解官方指南原创 2021-05-03 13:25:09 · 2619 阅读 · 3 评论 -
注解处理器常用类说明
常见类javax.lang.model.element.Element其子类可能表示为源代码文件构成的元素(Represents a program element such as a package).一般这个类结合一个工具类使用名叫Elements.包类接口方法变量Doc文档…略注意是源代码,而非java语法中具体的感念.这一点需要区分.举个例子:我们有一个文件如下:package com.example.annotationprocessstudy; //PackageE原创 2021-04-30 12:15:46 · 1185 阅读 · 2 评论 -
Dagger2下的ViewModel
前言本文需要一定的储备知识,可参阅博主其他文章:Dagger2 生成类初探viewModel源码分析假设我们想我们的ViewModel注入一些Dagger2所提供的依赖怎么办?直接给ViewModel构造函数注入?如下代码//MyViewModel.javapublic class MyViewModel extends ViewModel { @Inject @Named("ActivityStr") String applicationMsg; @Inje原创 2021-04-28 19:58:11 · 640 阅读 · 1 评论 -
Dagger2 生成类初探
前言Dagger2是一个IOC容器,相比起后端的spring来说,Dagger2是编译时完成注入,而spring是运行时.关于Dagger2的基础知识请参阅官网:dagger2入门指导本文意在分析编译后的代码如何注入源码分析我们首先了解几个契约接口//Provider.javapackage javax.inject;public interface Provider<T> { T get();}//Factory.javapackage dagger.int原创 2021-04-28 16:02:50 · 441 阅读 · 0 评论 -
LiveData 源码初探
前言文本需要一定lifecycle基础知识.LiveData是一个基础观察者设计模式的基础框架,可结合databinding或者直接作为数据观察回调使用.class MainActivity : AppCompatActivity() { //MutableLiveData继承LiveData val mutableLiveData = MutableLiveData<String>() override fun onCreate(savedInstanceState: Bun原创 2021-04-26 14:15:04 · 184 阅读 · 0 评论 -
Lifecycle 源码初探
前言由于用法比较简单,所以本文不讲解基础使用,注重在源码的透彻分析上.基础使用文章:Android 架构组件之 LifeCycle详解一个小Demo:public class MyObserver implements LifecycleObserver { private static final String TAG = "MyObserver"; @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) public void onCreate原创 2021-04-26 12:03:48 · 240 阅读 · 0 评论 -
ViewModel 源码分析
预备知识在Android中我知道Activity有一个onSaveInstanceState函数,用于在Activity在不幸被回收或者配置改变时存储序列化对象,在下次重建时onRestoreInstanceState取出序列化数据.要是我们有非序列数据呢?public Object onRetainNonConfigurationInstance和public Object getLastNonConfigurationInstance()可以帮助我存储任意非序列化数据,用于下次重建复用对象onR原创 2021-04-25 22:53:57 · 322 阅读 · 0 评论 -
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 · 612 阅读 · 0 评论 -
rxjava简单源码分析
前言RxJava Git地址本文基于3.0.13-RC2源码分析简单的案例public class JavaMain { public static void main(String[] args) { Observable<Integer> objectObservable = Observable.create(new ObservableOnSubscribe<Integer>() { @Override原创 2021-04-22 20:35:14 · 208 阅读 · 0 评论 -
Retrofit 源码分析
前言为防止误会本文分析Retrofit2.9版本retrofit github开源地址官网tutorial本文是记录博主在看Retrofit学习到的东西,如默认接口方法的调用,如何判断android平台还是java平台,Coroutine等.预备知识接口的默认方法 interface Test{ default public void test(){ System.out.println("hello"); } default原创 2021-04-21 17:39:12 · 265 阅读 · 0 评论 -
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 · 262 阅读 · 0 评论 -
View的绘制流程
前言参考Android View的绘制流程面试官带你学安卓 - 从 View 的绘制流程说起原创 2021-04-16 15:05:20 · 445 阅读 · 2 评论 -
LayoutInflater 源码解析
前言LayoutInflater有多个如下填充函数://LayoutInflater.javaclass LayoutInflater{ public View inflate(int resource, ViewGroup root) public View inflate(XmlPullParser parser, ViewGroup root, boolean attachToRoot) public View inflate(XmlPullParser parser, V原创 2021-04-14 13:06:32 · 249 阅读 · 0 评论 -
HandlerThread 源码分析
前言在Rxjava还没普及的handler是我们最常用的线程间通信帮助类.本文需要对Handler有一定的了解,可以参阅博主的其他文章Handle 源码分析与学习我们首先看一个Demo:class MainActivity : AppCompatActivity() { val handlerThread = HandlerThread("一个子线程") var h: Handler? = null override fun onCreate(savedInsta原创 2021-04-11 22:35:25 · 222 阅读 · 0 评论 -
Android 类加载器
前言我们知道Java存在双亲委托模型,具体可以参考Java虚拟机详解(十一)------双亲委派模型。本文将讲解Android下的类加载.本文将以5.0作为源码讲解。原创 2021-04-11 22:12:02 · 200 阅读 · 0 评论 -
AsyncTask源码解析
前言在旧时AsyncTask和Handler作为两个异步框架,但如今Google已在文档中废弃了AsyncTask推荐使用Kotlin协程.但是源码分析依然可以学到很多有用的东西。简单的使用class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setCont原创 2021-04-11 20:03:02 · 224 阅读 · 0 评论 -
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 · 497 阅读 · 0 评论 -
Android Binder驱动分析九 RPC
前言接上文Android Binder驱动分析八 getService本文将研究MediaPlayer最后如何将数据传输到MediaPlayService//MainActivity.javapublic class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)原创 2021-04-11 11:26:46 · 331 阅读 · 0 评论 -
Android Binder驱动分析八 getService
前面几篇文章中我们成功的将mediplayservice注册到binder驱动和servicemanager原创 2021-04-10 18:41:53 · 674 阅读 · 0 评论 -
Android Binder驱动分析七 线程相关
承接上文Android Binder驱动分析六 addservice源码分析大量借鉴 Android Binder机制(八) MediaPlayerService服务的消息循环//frameworks/av/media/mediaserver/main_mediaserver.cppint main(int argc __unused, char** argv){ //知识点sp<xxx> 类似java的WeakReference<xxxxx> //sp 内部的原创 2021-04-06 22:09:21 · 250 阅读 · 0 评论 -
Android Binder驱动分析六 addservice源码分析
承接上文:Android Binder驱动分析五 addservice源码分析servicemanager发送一个指令BINDER_WORK_TRANSACTION给mediaplayservice,而后唤醒其线程。mediaplayservice唤醒后会在binder_thread_read,由于这个函数出现过很多次了这里直接简单略过//drivers/staging/android/binder.cstatic int binder_thread_read(struct binder_pr原创 2021-04-05 21:08:17 · 294 阅读 · 0 评论 -
Android Binder驱动分析五 addservice源码分析
Android Binder驱动分析三 addservice源码分析分析了如下的代码:将事务添加到servicemanager,然后将其唤醒添加一个binder_work事务给mediaplayserice我们在分析下servicemanager被唤醒后的流程,servicemanager在内部会开启一个死循环代码去接收信息,而代码会被阻塞在binder驱动的binder_thread_read函数。//drivers/staging/android/binder.cstatic int原创 2021-04-05 20:37:13 · 353 阅读 · 0 评论 -
Android Binder驱动分析四 addservice源码分析
Android Binder驱动分析三 addservice源码分析接着上网我们分析了如下的代码:将事务添加到servicemanager,然后将其唤醒添加一个binder_work事务给mediaplayserice我们这里分析mediaplayservice提交事务后会做什么//drivers/staging/android/binder.cstatic long binder_ioctl(struct file *filp, unsigned int cmd, unsigned lo原创 2021-04-04 21:23:41 · 1906 阅读 · 1 评论 -
Android Binder驱动分析三 addservice源码分析
前言本文分析如何向ServiceManager注册一个服务。我们这里以mediaplayservice进行分析.首先需要明白的概念。句柄(handle)原创 2021-04-03 23:59:36 · 585 阅读 · 0 评论 -
Binder驱动分析 Parcel写入Binder对象
Parcelhttp://wangkuiwu.github.io/2014/09/05/BinderCommunication-AddService01/frameworks/native/libs/binder/Parcel.cppframeworks/native/libs/binder/Parcel.h原创 2021-03-28 20:39:22 · 521 阅读 · 0 评论 -
binder 红黑树rb_node转实体对象
c内存的骚操作我们看下下面的代码,给你一个成员变量的地址如何转化为其包裹的父结构体的对象?struct Node { long next;};typedef struct _student { char sname[20]; Node mynode;} ;struct _student * getFromMember(Node *node){ //todo?获取从node对象转化为_student *对象} int main(int argc,原创 2021-03-23 23:37:04 · 577 阅读 · 1 评论 -
Android Binder驱动分析二 ServiceManager与binder驱动
Android Binder驱动分析一 ServiceManager启动流程前言本文可能涉及过多的linux内核知识,需要读者自行储备。上文我们尽在framework层分析了ServiceManager的启动流程,很多细节都没在binder驱动层面说明。本文使用3.18的内核版本,读者可自行下载 https://source.android.com/devices/architecture/kernel/...原创 2021-03-21 11:35:07 · 456 阅读 · 1 评论 -
Android Binder驱动分析一 ServiceManager启动流程
getprop dalvik.vm.heapsize 获取虚拟机内存大小原创 2021-03-18 17:53:57 · 535 阅读 · 0 评论 -
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 · 401 阅读 · 0 评论