![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
android源码学习
文章平均质量分 78
喵吉诃德
这个作者很懒,什么都没留下…
展开
-
Android的证书验证过程
说明:源码分析基于Android_8.11 系统证书源码 /system/ca-certificates/files 目录下存放了系统证书系统证书命名规则为 <hash>.<N>,其中 hash 通过命令生成,N 为从 0 开始的一个整数标记openssl x509 -subject_hash_old -in filenameAndroid 系统中,证书存放路径...原创 2020-04-27 23:34:31 · 4562 阅读 · 3 评论 -
Android_8.1 Log 系统源码分析
0x01 Android Log框架推荐1、 logger提供了一些格式化输出、美观// 添加依赖implementation 'com.orhanobut:logger:2.2.0'// 初始化Logger.addLogAdapter(new AndroidLogAdapter());// 使用Logger.d("hello,Android");2、timber基于原生L...原创 2019-10-22 17:47:52 · 1124 阅读 · 0 评论 -
Android 网络框架初探
Android 上的网络框架介绍Android一路走来的网络框架变更【网络协议:HTTP】Android 2.2-:HttpClientAndroid 2.3+:HttpURLConnectionAndroid 3.0:HttpURLConnection 增加了对 HTTPS 的支持Android 4.0:HttpURLConnection 增加了对缓存的支持Android 4.4+...原创 2019-08-12 12:20:19 · 351 阅读 · 0 评论 -
Android 8.1 应用安装过程总结
整体介绍一个 Android 应用安装到手机上大致分为四种情形:系统应用,在设备每次启动时完成安装通过 adb install 命令安装应用市场安装,封装安装过程(略)第三方应用安装或双击安装包,会启动系统应用引导安装无论采用哪种安装方式,最终的安装过程都会走到 PackageManagerService,由这个类来完成一系列的工作。PackageManagerService 实...原创 2019-08-02 15:24:01 · 4233 阅读 · 0 评论 -
Android 源码编译及真机刷机实录
最近接到一个项目,需要接触 Android 源码,所以走了一遍源码编译和刷机的过程,从开始到成功花了差不多一周的时间,踩了很多坑,在此记录一下。整体分为四个部分:环境配置源码下载源码编译镜像刷机1、环境配置参考:https://source.android.com/source/initializing.htmlAndroid 源码需要在 Linux 或 Mac OS 上编译,...原创 2019-03-25 17:49:34 · 3025 阅读 · 0 评论 -
VirtualApp源码分析——(一)VA启动
VirtualApp(以下简称VA)是一个开源的Android app虚拟化引擎,它提供了一个虚拟空间,允许其他应用运行在这个虚拟空间中,实现应用多开(可重复安装)。在VA中,host应用(VA自身)和client应用(通过VA安装的应用)具有相同的uid。 在运行时,一般会包含三个进程:io.virtualapp,主进程,负责VA的用户界面及应用管理; io.virtualapp:...原创 2018-05-04 18:06:58 · 4752 阅读 · 1 评论 -
Android源码学习——ClasLoader(3)
本文学习的源码参考AndroidXRef1,版本为Lollipop 5.1.0_r1。但是目前已经比较明朗了,可以猜测optimizedDirectory是用来缓存我们需要加载的dex文件的,并创建一个DexFile对象,如果它为null,那么会直接使用dex文件原有的路径来创建DexFile 对象。optimizedDirectory必须是一个内部存储路径,还记得我们之前说过的,无原创 2017-08-06 22:30:49 · 265 阅读 · 0 评论 -
Android源码学习——ClassLoader(2)
本文学习的源码参考AndroidXRef,版本为Lollipop 5.1.0_r1。上一篇文章分析到两个类加载器PathClassLoader和DexClassLoader最后都通过一个native方法openDexFile来实现DexFile对象的构造。但是目前已经比较明朗了,可以猜测optimizedDirectory是用来缓存我们需要加载的dex文件的,并创建一个DexFile对原创 2017-08-03 13:27:17 · 546 阅读 · 0 评论 -
Android源码学习——ClassLoader(1)
本文学习的源码参考AndroidXRef,版本为Lollipop 5.1.0_r1。类加载与动态加载Java代码是通过Class来实现的,程序运行时虚拟机首先将对应的类加载到内存中,然后才能进行对象实例化以及后续工作,而这个加载过程就是通过ClassLoader来实现的,也即是类加载。 同时,在Java虚拟机中,我们可以自定义继承自ClassLoader的类加载器,通过defineC原创 2017-08-03 12:07:20 · 635 阅读 · 1 评论 -
Android源码学习——linker(3)
本文学习的源码参考AndroidXRef,版本为Lollipop 5.1.0_r1。这一节,我们详细讲so的加载过程,也即ElfReader这个类的Load函数:bool ElfReader::Load(const android_dlextinfo* extinfo) { return ReadElfHeader() && VerifyElfHeader() &&原创 2017-08-07 15:51:11 · 684 阅读 · 0 评论 -
Android源码学习——linker(4)
本文学习的源码参考AndroidXRef,版本为Lollipop 5.1.0_r1。前面讲完了so的加载,这一章来讲so的链接过程。so的链接是实际上就是完成符号的重定位。分别看下PrelinkImage和LinkImage的实现。首先是PrelinkImage,这个函数很长,我们一段段来看:bool soinfo::PrelinkImage() { /* Extract dynamic sec原创 2017-08-08 00:56:27 · 1996 阅读 · 1 评论 -
Android源码学习——linker(2)
本文学习的源码参考AndroidXRef,版本为Lollipop 5.1.0_r1。上一部分讲到do_dlopen里面,调用了find_library(name, flags, extinfo)去加载so库,最终返回一个soinfo的指针,我们看下这个过程里面做了什么:static soinfo* find_library(const char* name, int dlflags, const a原创 2017-08-07 23:32:13 · 612 阅读 · 0 评论 -
Android源码学习——linker(1)
本文学习的源码参考AndroidXRef,版本为Lollipop 5.1.0_r1。在Android开发过程中,我们要想使用JNI机制调用一个native方法时,首先会需要调用一个system的方法,把定义了native方法的库加载进来。今天,就从System.loadLibrary(“XXX”)来详细看一下一个动态库的加载过程。 public static void loadLibrary(原创 2017-08-07 22:13:19 · 1091 阅读 · 0 评论