- 博客(169)
- 资源 (49)
- 收藏
- 关注
原创 Android Framework - 学习启动篇
首先明确一下前提条件:有 C/C++ 基础,能够阅读 C/C++ 的代码;有 Linux 系统内核基础;有 Android 开发相关的工作经验(1-3年);有 UML 建模基础。如果大家是从事 Android 系统开发的,那么阅读系统源码是必修课程。如果想成为高级 App 开发工程师,那么阅读系统源码也是必修课程,只是这必修课程里面有选修内容,后面我想讲的就是必修课程里面的选修内容。...
2020-02-15 20:40:12 12888 1
原创 音视频技术学习 - 启动篇
其实老早就想写一些关于音视频学习的文章了,但由于各方面的原因迟迟都没有开始。一个方面是因为笔者写文章都是成系统的,音视频需要大家有一定的 c/c++ 基础;还有一个方面是因为之前经验不足,这一块涉及到的细节也比较多。我自己学习时看过大量的文章和资料,这里推荐 雷霄骅的专栏 ,虽然文章的更新永远停在了那一刻,但其无私分享的精神值得我们每一个开发者学习。音视频这系列文章我们打算从基础开始学,然后结合移...
2019-04-14 19:22:29 729 2
原创 Android进阶之旅 - 系统架构篇
1.分享的简介自定义View部分已经结束,了解具体详情请移步Android进阶之旅 - 自定义View篇。按照原定的计划,决定分享Android 进阶之旅 - 系统架构篇。很多博客都有设计模式的一些理论讲解,我也曾经阅读过不少,对我个人也有很大的帮助,但整体来讲都比较零散,主要都是讲一些理论的知识。所以我决定出一整套系统架构的文章和视频,从设计模式的理论出发将Android源码与实战事例结合,来帮助
2017-08-31 18:27:17 1943
原创 Android进阶之旅 - 自定义View篇
1.分享的简介 内涵段子项目分享将于5月中旬结束,了解具体详情请移步2017Android进阶之旅与你同行。经过反复的思考,首先分享Android进阶之旅 - 自定义View篇。 跟内涵段子项目分享不一样的是,我会先从自定义View的最基础开始,一直讲到各种高级效果。当然也需要看源码,比如对于onMeasure()方法,以后就不会人云亦云的出现各种解释,事件分发再也不仅仅是打印出来看看了。
2017-04-22 13:54:56 2811 1
原创 从计算机电路来理解指针
高级语言 -> 汇编语言 -> cpu工作原理 -> 数字电路,再加上数据结构算法、编译原理、操作系统和虚拟机。这个是我的一个学习路径,仅供大家参考。知识浩瀚无限,人的精力和时间却有限,仅仅是一个 linux 操作系统就有上千万行代码,所以我也是一无所知。原则上我们需要尽可能熟悉我们工作的下一层原理,比如以前我做 Android 的时候会花尽可能多的精力去阅读 Framework 的源码,所以之前对于 Android 的分享到 Framework 就打止了。
2024-05-31 10:41:47 683
原创 C++ Primer Plus(第6版)第二章 开始学习 C++
标准 C 库提供了 140 多个预定义的函数。如果其中的西数能满足要求,则应使用它们。但用户经常需要编写自己的函数,尤其是在设计类的时候。无论如何,设计自己的函数很有意思,下面来介绍这一过程。前面已经使用过好几个用户定义的两数,它们都叫 main() 每个 C++程序都必须有一个 main()函数,用户必须对它进行定义。假设需要添加另一个用户定义的函数。和库西数一样,也可以通过函数名来调用用户定义的两数。对于库函数,在使用之前必须提供其原型,通常把原型放到 main() 定义之前。
2024-01-30 17:39:05 755
原创 C++ Primer Plus(第6版)第一章 预备知识
C++ 融合了 3 种不同的编程方式:C 语言代表的过程性语言、C++ 在 C 语言基础上添加的类代表的面向对象语言、C++ 模板支持的泛型编程。使用 C++ 的原因之一是为了利用其面向对象的特性。要利用这种特性,最好是对标准 C 语言知识有较深入的了解,因为它提供了基本类型、运算符、控制结构和语法规则。所以,如果已经对 C 有所了解,那么学习 C++ 将会容易很多,如果学习过其他面向对象的语言像 Java 语言等,学习起来也会比较容易。
2024-01-30 17:38:30 363
原创 C++ Primer Plus(第6版)写在前面
学习也好做事也罢,我认为从来都不是方法问题,更多是信念问题。我大学唯一挂的科目就是C++,及格是60分老师给我58分,当时大二,我专业教育技术学。所以在课程开始前要来说点东西。
2024-01-30 17:37:53 1342
原创 Android 进阶之旅 - 终章
我们的《Android进阶之旅》到这里就算是完结了,五六年的时间,我的青春,我职业生涯的黄金时期,基本都耗在了这上面。很多东西我都是现学现卖,平时上班也很少有时间能备课,很多地方难免讲得不如意,希望大家能理解,也希望没有浪费掉大家的时间。这期间运气很好,进了大公司,赚了一些钱,和自己心爱的人结了婚,买了房也买了车,没车贷房贷的压力,生活滋润了年纪也大了,懂得东西多了也少了一些纯粹。希望自己依旧能勿忘初心~
2023-07-19 17:46:01 1084 1
原创 自己来动手实现 Native Hook
Native Hook 是我们性能优化中最常见的手段之一,推荐大家用开源的方案像和等等,会用这肯定是最基础的,其次我们一直都追求知道原理并且要自己能写。今天这里我们自己来实现一套简单的 Native Hook ,我们只写关键代码。有了以上基础知识,我们实现起来就会变得简单了,虽然过程中可能会遇到一些问题,但前期我们只需要确保流程和方案没问题就行。其实主要就是两步:首先,读取 /proc/self/maps 文件内容,找到目标 so 文件的基地址;
2023-01-10 14:30:33 562
原创 电量优化 - Hook 系统服务
那么现在我们可以开始给自己的 App 开发电量异常检测功能了,实现的方案就是用系统源码类似的计算方案,在 App 内部进行电量统计,主要也就两个部分:线程监控与系统服务调用监控。套路印象中至少应该讲了十次,第一步肯定首先是要看源码流程了,第二步找单例和接口切入点,第三步就是设计实现类。看到这里第二步的方案已经出来了,单例就是 WifiManager 而接口对象就是 WifiManager 中的 mService 对象,只要 Hook 住 mService 就可以了,在。一文中就是用的这种方案。
2022-09-04 13:22:53 256
原创 iOS 学习之旅 - OC 篇
我开始一边做 Android 的需求一边学习 OC 基础,一周后接了两个小需求(不是很难),我们主要是用的 OC 语言,很多同学新项目可能用的是 swift 我目前还没学,因为移动端大部分逻辑都在底层,由于之前写过一点点 C 和 C++ ,所以总的回顾起来压力不算太大。我们还需要了解编译与汇编的一些简单知识,这里我们只需要了解一些简单的指令就可以了,因为苹果只开源了部分代码,有些内容我们只能去看汇编,还有比如 OC 方法的执行过程中有部分代码就是汇编写的。关于 objc 的源码配置我这里提供一个。
2022-09-04 13:21:41 843
原创 来到微信的2021
微信在我的印象中是公司最难合作的部门,之所以有这种感觉,是由于小龙在公司年会上,经常说到其他部门觉得我们很难合作,但其实是……解释一大堆,具体说的啥,虽然每次年会都听到,但也记不清。身边同学的评价就是这群人又聪明又卷,翻译成大白话就是比你厉害的人还比你努力。我自己的感觉这应该是我待过最舒服的一个团队了,一部分原因是由于今年做的事情都是修修补补,没什么技术含量也没什么压力,以前做的是核心功能,现在做的是边缘开发,还有一部分原因是心态上的确成熟了许多,已经开始学会躺平了。BAT或者说互联网这几年变化很小了,对我
2022-09-04 13:20:06 585
原创 电量优化 - Hook 系统服务
那么现在我们可以开始给自己的 App 开发电量异常检测功能了,实现的方案就是用系统源码类似的计算方案,在 App 内部进行电量统计,主要也就两个部分:线程监控与系统服务调用监控。套路印象中至少应该讲了十次,第一步肯定首先是要看源码流程了,第二步找单例和接口切入点,第三步就是设计实现类。看到这里第二步的方案已经出来了,单例就是 WifiManager 而接口对象就是 WifiManager 中的 mService 对象,只要 Hook 住 mService 就可以了,在。一文中就是用的这种方案。
2022-09-04 13:13:19 1103
原创 转岗去微信事业群的一些反思
这周是旧部门的最后一周了,记录下这两年年的一些感悟,希望以后可以时刻警醒自己,同时这也是我对过往的一些总结和反思,希望能帮到我们。跟领导坦白的时候,领导让我好好考虑,你在这里的收入和职位的空间,到微信那边可能会大打折扣,我其实也知道自己也非常纠结,前前后后考虑了差不多一个月,以前想换地方根本不用考虑,反正不会比现在差,年纪越大拥有得多了反而很难决策。这是我考虑后对领导说的原话:经过这些天的考虑,我心里还是想去广州试下。尽管大部分思考时间我都是想继续留在这边,因为在这里与大家相处很舒服,鹅厂的氛围也非常好,尤
2021-09-14 16:15:11 690 1
原创 Gradle 插件 + ASM 实战 - JVM 虚拟机加载 Class 原理
开篇就提到效能优化涉及的范围会很广,考虑后面需要经常用到 asm 字节码插桩,我们首先从 《Gradle 插件 + ASM 实战》开始讲,但又希望大家能知其然也知其所以然,因此我们首先得讲下 JVM 虚拟机加载 Class 字节码的原理。这往往也是我面试新同学必问的一个内容,因为如果对这个不了解的话,像插件化与热修复、性能优化、覆盖率统计等等很多功能都是不好实现的。小公司很少有人用,这也是实话,至于大家要不要学,这就看个人情况了,其实也不是用不用得上的问题,就看大家愿不愿意做一个吃螃蟹的人。我们主要从以下三
2021-05-09 16:03:20 373
原创 Android 进阶之旅 - 效能优化
新年的第一篇文章,没想到自己又回来了,经过慎重的考虑还是决定再讲一期**《效能优化》**。虽然去年刚发表过 《以后,江湖再见了》,看上去似乎有点出尔反尔,但我个人觉得,对大家和我自己都有益的事情还是可以做的。首先先解释一下,为啥是效能优化而不是性能优化,我自己在腾讯的效能组担任客户端开发,讲起来可能会得心应手些,其次效能优化往往是包含性能优化,不光会涉及到性能优化,还会涉及到持续集成持续交互,如何提升研发效率,自动化测试等等。关于我们自己的《效能优化》课程可能会为期一年,这也是我最后还能拿得出手的一点内容
2021-05-09 15:56:52 710 1
原创 Gradle 插件 + ASM 实战 - JVM 虚拟机加载 Class 原理
开篇就提到效能优化涉及的范围会很广,考虑后面需要经常用到 asm 字节码插桩,我们首先从 《Gradle 插件 + ASM 实战》开始讲,但又希望大家能知其然也知其所以然,因此我们首先得讲下 JVM 虚拟机加载 Class 字节码的原理。这往往也是我面试新同学必问的一个内容,因为如果对这个不了解的话,像插件化与热修复、性能优化、覆盖率统计等等很多功能都是不好实现的。小公司很少有人用,这也是实话,至于大家要不要学,这就看个人情况了,其实也不是用不用得上的问题,就看大家愿不愿意做一个吃螃蟹的人。我们主要从以下三
2021-01-09 16:38:32 575 2
原创 以后,江湖再见了
本不想再多说的,但既然都讲了那么多年了,那就最后再啰啰嗦嗦几句。很早以前我就说过,我不是老师,只是有人想往前走,就顺便带带大家而已,一直都是成就自己的同时去成就大家。很庆幸有很多同学一路跟过来,进了头条、BAT这样的大厂;更庆幸的是自己从小城市来了大城市,从五六人的小企业到了五六万人的鹅厂。与其说我成就了大家,倒不如说是大家成就了我。从17年开始讲到现在差不多已是四个年头,一般来说人生每上升一个台阶,按照10000小时定律差不多也是四年,我们想上升到下一个台阶又需要四年,所以我不得不丢弃掉某些东西。一直我
2020-06-16 19:19:00 950 1
原创 Android 源码分析实战 - 授权时拦截 QQ 用户名和密码
1. 说在前面本文内容其实是不适合发出来的,希望大家切勿用作商业用途,也切勿将功能发布到线上环境。技术一定是为生活服务的,是为了大家共同的美好生活。判断一件事是否值得做,一定是利人利己,错误的事可能舒服自己而痛苦了别人,损人利己的事千万不可为。2. 需求背景在测试功能时,我们可能会遇到一些偶现崩溃的情况,往往难以复现。在修改代码时,有时往往改了这个 Bug ,在某个其他地方又引发了另一个 Bug,或者又是不经意间修改了 UI 样式界面。当然以上问题,我们可以看日志跟踪,也可以多写单元测试。基于等等场景
2020-06-16 19:18:13 816
原创 Android 源码分析实战 - 把代码写得更优雅
1. 源码版本适配一般情况下来说,如果涉及到源码反射,通常都需要适配各个版本,因此我们把与 so 修复相关的各大版本源码都翻出来,具体的源码细节,大家可以参考《Android 源码分析实战 - 动态加载修复 so 库》 public void injectLoadPath(String soDir) throws Exception { ... int v...
2020-04-25 10:53:23 552 2
原创 Android 源码分析实战 - 动态加载修复 so 库
1. 需求背景俗话说养兵千日用兵一时,学习源码分析到底有什么用呢?我们遇到的所有问题,都能通过分析源码解决;看似无法实现的功能,都能通过源码分析找到思路…。这些都是之前无数次给大家洗脑的概念,我们来看一下实际的开发需求,我带大家来动手实战几次。之前还在有信时,我们做的是一个音频直播的项目,后面由于这一块业务一直上不去,老板要我们在里面做一个 3D 的玩法,也就是采用 Unity + Androi...
2020-04-25 10:52:42 645 3
原创 Android 底层渲染 - 屏幕刷新机制源码分析
相关文章链接:1. Android Framework - 学习启动篇2. 源码阅读分析 - Window底层原理与系统架构相关源码文件:/frameworks/base/core/java/android/view/ViewRootImpl.java/frameworks/base/core/java/android/view/Choreographer.java/framework...
2020-04-25 10:51:50 698
原创 来到 “鹅厂” 的 2019
关于鹅厂**只要努力过,什么结果都可以接受,即使不行,这也不是人生的终点,继续努力,总有一天可以成的。**人生难得在梦想之地供职,终于在第四次面试后如愿以偿加入了腾讯。在这里真的所有都是顶配,薪资,福利,年终等等都是顶配,当然大公司压力也是顶配。相比于很多同学硕士博士一毕业就加入腾讯,还有很多有华为阿里的大厂背景,也有很多从国外 google 和 microsoft 回来的同学。相比这些方面自己...
2020-04-25 10:50:59 781
原创 Android 系统服务 - Input 事件的分发过程
相关文章链接:1. Android Framework - 学习启动篇2. Android FrameWork - 开机启动 SystemServer 进程相关源码文件:/frameworks/base/services/java/com/android/server/SystemServer.java/frameworks/base/services/core/java/com/and...
2020-04-25 10:50:01 641
原创 Android 四大组件 - bindService 的通信过程
相关文章链接:1. Android Framework - 学习启动篇2. Android Binder 驱动 - Media 服务的添加过程3. Android Binder 驱动 - 启动 ServiceManager 进程4. Android Binder 驱动 - 内核驱动层源码分析5. Android Binder 驱动 - 从驱动层来分析服务的添加过程6. Android ...
2019-12-01 15:46:17 1019
原创 Android 四大组件 - 进程的 fork 创建过程
相关文章链接:1. Android Framework - 学习启动篇2. Android 系统服务 - AMS 的启动过程3. Android 系统服务 - PMS 的启动过程4. Android Framework - 开机启动 Zygote 进程相关源码文件:/frameworks/base/services/core/java/android/os/Process.java/...
2019-11-19 12:17:03 1044
原创 Android 系统应用 - Launcher 的启动过程
相关文章链接:1. Android Framework - 学习启动篇2. Android 系统服务 - AMS 的启动过程3. Android 系统服务 - PMS 的启动过程相关源码文件:/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java/apps/Launche...
2019-11-18 15:39:15 1185
原创 Android 面试经验 - 大厂 腾讯 面
写在前面那天刚好是下午 oppo hr 面完,大约 3 点左右腾讯来电,我在电梯里没太注意没接到电话,下午就一直盼呀盼,大约九点刚下班到公司楼下来电了,问方不方便我当然说方便,就在马路边上面了大约 50 来分钟,我感觉应该是挂了的,因为过程中电话老是断加上环境又比较吵,第二天问猎头说,下班前查了一下同一批面试的都释放了,你应该是过了只说是应该过了。过了整整一周到了隔周五上午,接到了第二面的面试通...
2019-10-29 17:02:28 1910
原创 Android 系统服务 - AMS 的启动过程
相关文章链接:1. Android Framework - 学习启动篇2. Android Framework - 开机启动 SystemServer 进程相关源码文件:/frameworks/base/services/java/com/android/server/SystemServer.java/frameworks/base/services/core/java/com/and...
2019-10-29 17:00:55 1602
原创 Android 系统服务 - PMS 的启动过程
相关文章链接:1. Android Framework - 学习启动篇2. Android Framework - 开机启动 SystemServer 进程相关源码文件:frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.javaframeworks/base/services/co...
2019-10-28 18:49:12 1229
原创 Android 面试经验 - 大厂 OPPO 面
写在前面一直有同学跟我反馈说,你能不能说说你的一些面试经验啥的,其实很多时候我是拒绝的,因为我们简历经历不一样问的问题也会不一样,且大厂面试光靠背几个面试题就想过还是比较难的。因此在这里提醒一下大家不要临时抱佛脚,你花几天能背下的东西,别人花几天一定能超过你的,但我们花几年沉淀的东西,人家花几个月就未必能赶上,希望大家不飞则已,一飞冲天。先说说大的环境,我当时是在 boss 上直接投了很多简历...
2019-10-16 10:06:01 705
原创 Android Handler 通信 - 彻底了解 Handler 的通信过程
相关文章链接:1. Android Handler 通信 - 源码分析与手写 Handler 框架2. Android Handler 通信 - 彻底了解 Native 层的通信过程相关源码文件:/frameworks/base/core/java/android/os/Handler.java/frameworks/base/core/java/android/os/MessageQu...
2019-09-30 18:15:05 863
原创 Android Binder 驱动 - 从 Java 层来跟踪服务的查找过程
相关文章链接:1. Android Framework - 学习启动篇2. Android Binder 驱动 - Media 服务的添加过程3. Android Binder 驱动 - 启动 ServiceManager 进程4. Android Binder 驱动 - 内核驱动层源码分析5. Android Binder 驱动 - 从驱动层来分析服务的添加过程相关源码文件:// ...
2019-09-20 10:05:55 1258
原创 Android Binder 驱动 - 从驱动层来分析服务的添加过程
相关文章链接:1. Android FrameWork - 学习启动篇2. Android FrameWork - 开机启动 Init 进程3. Android 开发者需要知道的 Linux 知识4. 从 Linux 内核的角度来看 Binder 驱动5. JNI 基础 - Android 共享内存的序列化过程6. Android进程间通信(IPC)机制Binder简要介绍和学习计划...
2019-09-08 16:46:09 1286
原创 Android Binder 驱动 - 内核驱动层源码分析
相关文章链接:1. Android FrameWork - 学习启动篇2. Android FrameWork - 开机启动 Init 进程3. Android 开发者需要知道的 Linux 知识4. 从 Linux 内核的角度来看 Binder 驱动5. JNI 基础 - Android 共享内存的序列化过程6. Android进程间通信(IPC)机制Binder简要介绍和学习计划...
2019-09-06 11:46:30 3202 1
原创 Android Binder 驱动 - 启动 ServiceManager 进程
相关文章链接:1. Android FrameWork - 学习启动篇2. Android FrameWork - 开机启动 Init 进程3. Android Binder 驱动 - Media 服务的添加过程相关源码文件:/system/core/rootdir/init.rc/frameworks/native/cmds/servicemanager/service_manage...
2019-08-31 11:59:57 2008
原创 Android Binder 驱动 - Media 服务的添加过程
相关文章链接:1. Android FrameWork - 学习启动篇2. Android FrameWork - 开机启动 Init 进程3. Android 开发者需要知道的 Linux 知识4. 从 Linux 内核的角度来看 Binder 驱动5. JNI 基础 - Android 共享内存的序列化过程6. Android进程间通信(IPC)机制Binder简要介绍和学习计划...
2019-08-29 20:07:04 2036
原创 Android Framework - 开机启动 SystemServer 进程
相关文章链接:1. Android FrameWork - 学习启动篇3. Android FrameWork - 开机启动 Zygote 进程相关源码文件:/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java/frameworks/base/core/java/com/android/internal/os...
2019-08-16 22:22:28 2519
原创 Android Framework - 开机启动 Zygote 进程
相关文章链接:1. Android FrameWork - 学习启动篇2. Android FrameWork - 开机启动 Init 进程相关源码文件:/system/core/rootdir/init.rc/frameworks/base/cmds/app_process/App_main.cpp/frameworks/base/core/jni/AndroidRuntime.cp...
2019-08-10 18:03:57 2692
Android常见多条件筛选菜单(美团、58)
2016-01-13
圆形图像图片
2015-10-31
流式Tag布局
2015-10-20
ViewPager指示器适配所有效果
2016-12-29
玩转ViewPager指示器字体变色
2016-12-11
Android 无限广告轮播
2016-11-19
Android6.0运行时权限框架封装
2016-11-15
Android6.0运行时权限处理事例
2016-11-11
仿QQ6.0侧滑效果
2016-11-02
仿QQ空间,百思不得姐下拉刷新图片放大
2016-07-31
QQ微信附近好友雷达扫描
2016-07-30
不需配置的ViewPagerIndicator
2016-06-05
RecyclerView 瀑布流、ListView、GridView实例
2016-04-10
Android插件换肤完整版
2016-03-27
Android插件换肤Demo
2016-02-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人