9 jeanboydev

尚未进行身份认证

我要认证

Android | iOS | Web 开发者,专注移动开发领域,热爱分享,热爱开源。

等级
TA的排名 5k+

Hook 实战之 Hook AMS

本文 Android 系统源码基于 9.0我们知道新建一个 Activity 之后我们需要在 manifest 中注册,否则启动的时候就会崩溃,现在使用 Hook 的方法绕过检查来启动一个没有注册的 Activity。如果我们不注册的话就会报下面的错误:Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.jeanboy.app.hooktrainning/.

2020-10-09 20:15:39

Hook 技术初探

最近在研究插件化技术,插件化的中经常会使用到 Hook 技术,查阅了很多资料这里总结下讲的比较好的,希望对大家有所帮助。Hook 技术Hook 是钩子的意思,在 Android 操作系统中系统维护着自己的一套事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步地向下执行。而钩子的意思,就是在事件传送到终点前截获监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件。较为形象的流程如下图所示。Hook 的这个本领,使它能够将自身的代码「融入」被勾

2020-08-31 09:00:04

不得不学之代理模式

代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。代理模式 UML 类图静态代理由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。UserServicepublic interface Us

2020-05-28 09:11:35

聊聊反射

反射 (Reflection) 是 Java 的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。Oracle 官方对反射的解释是:Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructor

2020-05-26 08:49:40

性能优化系列(七)APK 体积优化

文章首发「Android波斯湾」公众号,更新地址:https://github.com/jeanboydev/Android-ReadTheFuckingSourceCode减少应用程序安装包的大小,不仅仅减少了用户的网络数据流量还减少了下载等待的时间。毋庸置疑,尽量减少程序安装包的大小是十分有必要的。通常来说,减少程序安装包的大小有两条规律:要么减少程序资源的大小,要么就是减少程序的代码...

2020-03-04 15:48:39

性能优化系列(六)启动性能优化

文章首发「Android波斯湾」公众号,更新地址:https://github.com/jeanboydev/Android-ReadTheFuckingSourceCode提高程序的启动速度意义重大,很显然,启动时间越短,用户才越有耐心等待打开这个 App 进行使用,反之启动时间越长,用户则越有可能来不及等到 App 打开就已经切换到其他 App 了。程序启动过程中的那些复杂错误的操作很...

2020-03-03 09:40:12

性能优化系列(五)网络性能优化

移动互联网时代,用户对网络越来越依赖。虽然网络环境在逐渐变好,但也对网络的应用提出了更高的要求,同时开发人员对网络的重视度却在下降。确实 WiFi 场景下用户的网络质量变好了,而且用户对网络流量消耗的敏感度也在下降。由于对网络问题的忽视,在网络情况不好的情况下,用户体验会极度下降,这时网络性能优化变得尤为重要。作为一名移动开发者,面对复杂多变的移动网络我们该如何去优化呢?优化哪些方面?一个数...

2020-03-02 09:45:54

性能优化系列(四)电量性能优化

耗电设备手机各个硬件模块的耗电量是不一样的,有些模块非常耗电,而有些模块则相对显得耗电量小很多。电量消耗的计算与统计是一件麻烦而且矛盾的事情,记录电量消耗本身也是一个费电量的事情。唯一可行的方案是使用第三方监测电量的设备,这样才能够获取到真实的电量消耗。屏幕当设备处于待机状态时消耗的电量是极少的,以 Nexus 5 为例,打开飞行模式,可以待机接近 1 个月。可是点亮屏幕,味着系统的各组件...

2020-02-28 11:31:00

性能优化系列(三)内存性能优化

Android 为每个应用分配内存时,采用弹性的分配方式,即刚开始并不会给应用分配很多的内存,而是给每一个进程分配一个「够用」的内存大小,这个大小值是根据每一个设备的实际的物理内存大小来决定的。随着应用的运行和使用,Android 会为应用分配一些额外的内存大小。但是分配的大小是有限度的,系统不可能为每一个应用分配无限大小的内存。总之,Android 系统需要最大限度的让更多的进程存活在内存中...

2019-12-28 10:26:33

性能优化系列(二)告别卡顿与 ANR —— 计算性能优化

上一篇文章 渲染性能优化 中,我们分析了 UI 可能引起卡顿原因。卡顿的因素有很多,UI 只是其中一个因素。应用是否流畅往往也与 CPU 的计算性能有关,接下来我们从代码上来分析下引起性能问题的因素。ArrayMap 与 HashMapArrayMap 是 Android 提供的工具类,在 android.util.ArrayMap 中,ArrayMap 的使用方式与 HashMap 几乎没有...

2019-12-05 22:39:35

性能优化系列(一)找出卡顿的元凶 —— 渲染性能优化

一个 Android 应用是否流畅,或者说是否存在卡顿、丢帧现象,都与 60fps 和 16ms 有关。那么这两个值是怎么来的呢?为什么以这两个值为衡量标准呢?本文主要讨论下渲染性能方面决定 Android 应用流畅性的因素。为什么是 60fps?12fps(帧/秒)由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约 10 - 12fps 的时候,就会认为是连贯的。 早期的无声电影...

2019-11-19 08:03:25

字节码指令

虚拟机是一个相对于物理机的概念,这两种机器都有代码执行能力,其区别在于物理机的执行引擎是直接建立在 CPU 处理器、指令集、操作系统和硬件层面上的。而虚拟机的执行引擎则由自己实现,因此可以制定自己的指令集和执行引擎的结构体系,而且还可以执行一些不被硬件直接支持的指令集格式。这就是虚拟机相对于物理机的优势所在。但是缺点也比较明显,由于多了一层虚拟指令,执行虚拟机指令后还要转化为本地机器码,所以在...

2019-10-20 11:06:39

字节码文件结构

我们都知道 .java 文件在执行之前会编译成 .class 文件后再执行。比如下面的代码:package com.jeanboy.jvm;public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); }}在 ...

2019-09-03 07:23:40

TreeMap 源码分析(下)

引言通过上一篇TreeMap 源码分析(上)的分析,我们已经了解了红黑树插入数据的操作,本文我们继续来分析红黑树删除数据的操作。红黑树的删除将红黑树内的某一个节点删除。需要执行的操作依次是:首先,将红黑树当作一颗二叉查找树,将该节点从二叉查找树中删除;然后,通过「旋转和重新着色」等一系列来修正该树,使之重新成为一棵红黑树。详细描述如下:第一步:删除节点将红黑树当作一颗二叉查找树,将节点删...

2019-08-17 15:43:25

TreeMap 源码分析(上)

简介TreeMap 最早出现在 JDK 1.2 中,是 Java 集合框架中比较重要一个的实现。TreeMap 底层基于 红黑树 实现,可保证在 log(n) 时间复杂度内完成 containsKey、get、put 和 remove 操作,效率很高。另一方面,由于 TreeMap 基于红黑树实现,这为 TreeMap 保持键的有序性打下了基础。总的来说,TreeMap 的核心是红黑树,其很多...

2019-08-07 08:39:09

Android 签名机制 v1、v2、v3

什么是签名?要想知道签名是什么,先来看为什么需要签名 ?了解 HTTPS 通信的同学应该知道,在消息通信时,必须至少解决两个问题:一是确保消息来源的真实性,二是确保消息不会被第三方篡改。在安装 APK 时,同样需要确保 APK 来源的真实性,以及 APK 没有被第三方篡改。如何解决这两个问题呢?方法就是开发者对 APK 进行签名:在 APK 中写入一个「指纹」。指纹写入以后,APK 中有任...

2019-07-31 08:48:57

聊聊 Activity 栈的亲和关系

launchMode<activity android:name=".ui.activity.TaskAffinityActivity" android:launchMode="singleTask" />standardsingleTopsingleTasksingleInstance默认模式是 standard,这些模式分为两大类,standard 和 s...

2019-07-11 08:51:22

很少有人知道的 ContentProvider 使用技巧

简介ContentProvider 是 Android 的四大组件之一,可见它在 Android 中的作用非同小可。它主要的作用是实现各个应用程序之间的(跨应用)数据共享,比如联系人应用中就使用了ContentProvider,你可以在自己的应用中可以读取和修改联系人的数据,不过需要获得相应的权限。ContentProvider 可以理解为一个 Android 应用对外开放的接口,只要是符合...

2019-07-04 10:21:38

图解 Android 系列(四)原来 SystemServer 启动时干了这么多

介绍这是一个连载的系列「图解 Android 系列」,我将持续为大家提供尽可能通俗易懂的 Android 源码分析。所有引用的源码片段,我都会在第一行标明源文件完整路径。为了文章篇幅考虑源码中间可能有删减,删减部分会用省略号代替。本系列源码基于:Android Oreo(8.0)SystemServer.main()在上篇 探索 SystemServer 进程创建过程 中介绍了 S...

2019-07-02 08:40:28

LinkedList 源码分析

简介LinkedList 是 Java 集合框架中一个常用的集合类,底层采用双向链表结构。和 ArrayList 一样,LinkedList 也支持空值和重复值。由于 LinkedList 基于链表实现,存储元素过程中,无需像 ArrayList 那样进行扩容。但有得必有失,LinkedList 存储元素的节点需要额外的空间存储前驱和后继的引用。另一方面,LinkedList 在链表头部和尾部...

2019-06-25 14:04:31

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。