
Android
文章平均质量分 76
千里马学框架
安卓架构师,安卓技术专家,android framework
展开
-
android高级开发自定义View-canvas的save和restore方法的使用-大厂高频面试题
其实很多高级ui,其实大部分时候都需要比较复杂的绘制,大部分时候都需要灵活掌握绘制相关方法,canvas属于最为频繁的一种,而且复杂ui经常需要涉及到旋转,平移,等操作,这时候就需要save和restore的出场。这里的save1,save2,save3其实本质可以认为是某一个时刻的matrix和clip的数据。这里的restore和save一般是对应的,前面save是保存canvas的matrix,clip到stack,这里restore就是从stack把顶部的matrix和clip取出应用。原创 2023-09-27 12:09:25 · 456 阅读 · 3 评论 -
Android跨进程通信Client Crash后Server端onDestroy
hi,粉丝朋友大家好!好久没有给大家写blog了,哈哈,这里说声抱歉!实在家里比较忙,今天就来给大家分享一个跨进程专题课中学员问的一个问题,blog就来解答一下这个问题。原创 2022-07-23 00:51:39 · 1229 阅读 · 1 评论 -
手把手教你aosp android 12 pixel 解锁oem 编译刷入大全
hi,因为同学们学完了我的课程后,开始想玩一下google的pixel实体机,不想一直玩模拟器了,那么千里马老师今天也在咸鱼上掏了一个pixel 3来给大家展示一下这个google的机子怎么玩,其实我自己本身是有小米的lineage系统在玩,为了满足广大粉丝的好奇心也就自掏腰包买了个pixel玩,下面我们正式开始记录整个pixel 3的刷入自己编译修改的aosp代码:入门课,实战课,跨进程专题,input专题ps需要学习深入framework课程和课程优惠新课程优惠获取请加入qq群:422901085原创 2022-06-13 23:58:01 · 10842 阅读 · 0 评论 -
android 11/12的 framework 框架systemserver源码中的AMS和WMS部分ProtoLog相关log的开放命令
在高版本android源码中,在分析AMS和WMS源码时候经常会看到如下的log打印:这里看着也是个log打印,但是它又不是我们常见的Log.i(“”,“”);或者Slog.i(“”,“”)是可以直接通过logcat命令就可以看到对应的log打印,但是这种ProtoLog类型的log我们发现logcat并不可以直接看到那具体要怎么样才可以看到呢?下面我们就来讲解一下ProtoLog相关的log如果要通过logcat方式查看要怎么操作呢?1、使用wm相关命令这里XXX_TAG要替换成ProtoLog原创 2022-06-12 22:53:35 · 2152 阅读 · 0 评论 -
android P/Q/R/S 9/10/11/12多任务手势动画OverviewInputConsumer情况-第二节
hi,多任务手势分析了OtherActivity的情况,这一节来分析一下在桌面本身就是前台情况下,进入多任务的源码及情况分析。首先来看看原生aosp上多任务的2个过程:[入门课,实战课,跨进程专题,input专题](https://ke.qq.com/course/package/51285?tuin=7d4eb354)ps需要学习深入framework课程和课程优惠新课程优惠获取请加入qq群:422901085(获取demo源码)这个过程就是我们还处于手指底部上划过程,这个还是用个自己绘制的图好展原创 2022-06-02 23:46:31 · 1683 阅读 · 1 评论 -
android framework项目开发案例-动态隐藏Launcher上图标
hi,粉丝朋友们大家好!今天开始我们来开发一个android手机上如何动态隐藏桌面图标案例!项目背景:手机上桌面图标有时候不想被其他人发现,我们安装了某些应用,比如陌陌,xxx交友,和平精英等等具体实现方案讨论:方案1:在桌面launcher上面进行对应图标隐藏既可以缺点:只能隐藏桌面图标,但是一些应用中心等也一样有入口,所以不彻底方案2:在桌面launcher隐藏,而且framework层面实现拦截跳转,如framework在startActivity地方进行拦截缺点:这里可能会让第三方应用原创 2021-12-16 00:14:09 · 3073 阅读 · 0 评论 -
adb编译那些事
adb这个命令虽然我们用的很多,但是对它的是怎么编译出来的却不是非常清楚:一般我们使用都是windows上使用adb,这个其实是sdk下面的adb.exe,那么adb.exe到底是怎么编译来的:源码在system/core/adb下面但是依赖两个USB相关的dll源码在development/host/windows/usb下面下面讲一下怎么编译adb.exesudo apt-get install mingw32会有报错:Unable to locate package mingw32原创 2021-12-13 00:35:27 · 2387 阅读 · 0 评论 -
Windows上运行自己编译的安卓系统img(补充自己制作雷电)-千里马android framework
hi,粉丝朋友们大家好,自从学员们学习了我之前课程里面讲解的windows上怎么运行编译的android系统一课,相信大家都已经可以实现了windows上运行自己修改的android系统。如果还没看的学员可以先看这一篇blog:Android Framework高级开发-修改的系统Window上模拟器运行但是同学们陆续也提出了一些问题,我在这里进行一些补充:1、首先问题那就是,第一次是顺利运行起来了自己修改的android系统,但是后面 如果经常修改,该怎么来很好的快速的更新呢?需要回答这个问题,原创 2021-12-12 22:06:36 · 2451 阅读 · 0 评论 -
android framework之priv-app,系统特权app权限那些坑
csdn在线学习课程,课程咨询答疑和新课信息:QQ交流群:422901085进行课程讨论android跨进程通信实战视频课程(加群获取优惠)hi,大家好!在做framework开发过程中相信很多朋友会有一些关于系统应用的一些权限问题,在学习过千里马相关系统内置应用相关课程后,大家也知道了系统内置应用一般放在system/app路径下,这样就不会被用户随意卸载了,但是app放在这下面具体运行起来有哪些权限和没有哪些权限就不是很清楚了。这里刚好做一个比较全面总结:android中app主要有3个路径可原创 2021-12-11 22:35:50 · 7103 阅读 · 4 评论 -
adb shell调试contentprovider相关命令-千里马android framework
hi,经常在在做android系统应用开发,货值framework时候其实都少不了和contentprovider打交道,这里contentprovider其实也算android四大组件中非常重要的一个组件。经常如果涉及到数据库操作和跨进程一些通信,如果我们需要测试contentprovider写的是否正确可以 被客户端调用正常主要有2种方法 :1、自己写一个demo来 专门访问contentprovider方式,这种方式当然是ok的,但是每次需要访问contentprovider接口等 都需要对代码进行原创 2021-12-11 11:16:45 · 3158 阅读 · 0 评论 -
android8.1编译出现py相关语法错误: SyntaxError: invalid syntax
在我ubuntu编译android8.1时候一切都是ok,不知道什么时候可能编译高版本的android时候强制要求切换了python的版本。报出如下错误: except getopt.GetoptError, err: SyntaxError: invalid syntax 这个说实话看到第一眼确实比较蒙,因为明明自己android8.1代码原来都是可以顺利编译过的啊,为啥现在报这种py的语法错误啊?其实这个问题我回想起来,本质可能还是python的版本问题,因为在android s/t的编译原创 2021-12-11 10:58:50 · 1425 阅读 · 0 评论 -
千里马android Framework实战开发-你真的懂aidl转换吗(aidl命令转cpp)
csdn在线学习课程,课程咨询答疑和新课信息:QQ交流群:422901085进行课程讨论android跨进程通信实战视频课程(加群获取优惠)千里马android Framework实战开发-你真的懂aidl转换吗(aidl命令转cpp,aidl命令转java)原来讲解aidl时候给大家讲过是转换成java文件情况,也给大家展示了怎么使用命令来吧aidl文件转换成java。但是这里有个疑问了,难道aidl文件就只能转换成java文件么,难道不可以转换成cpp文件么?如果可以转换成cpp文件那是不是对我原创 2021-09-27 00:28:54 · 903 阅读 · 0 评论 -
Android Framework实战开发-(1)binder通信常见使用方式,及案例分析
(1)binder通信常见使用方式,及案例分析原创 2021-09-10 21:16:46 · 716 阅读 · 0 评论 -
千里马Android Framework-Binder通信总结流程图
csdn在线学习课程,课程咨询答疑和新课信息:QQ交流群:422901085进行课程讨论[android跨进程通信实战视频课程(加群获取优惠)](https://edu.csdn.net/course/detail/35911)原创 2021-09-07 00:17:50 · 792 阅读 · 0 评论 -
千里马Android Framework实战开发-binder驱动常见binder_open,binder_mmap介绍
背景知识:大家经常听到的驱动驱动,是不是一般都会有与一个具体的硬件设备相关,比如说wifi驱动,触摸屏驱动等。binder驱动是不是也是会有一个对应的一个硬件设备呢?哈哈,这里要告诉大家是没有的,因为binder本身只是用于操作系统进程间一个通讯而已,只涉及一些内存的拷贝,并不需要额外的硬件来支持,和linux常见的socket,共享内存,等一样哈。所以binder驱动不是实体的硬件驱动。方法映射关系:binder驱动代码是在内核层,而普通进程的都是通过一些常见的系统调用才可以到达内核层,所以肯定会有原创 2021-09-04 23:19:31 · 960 阅读 · 0 评论 -
千里马Android Framework实战开发-跨进程通信专题博客总结
千里马Android Framework实战开发-跨进程通信专题课表介绍因为课程还剩下最后一部分binder驱动没有讲完,但是粉丝同学们已经迫不及待想要要提前看,这里就先分享一个课表给大家,提醒一下,课表的很大,你忍一下。。。。。预计一星期左右可以上线全部视频,大家敬请期待课程杀青...原创 2021-09-04 18:01:15 · 2934 阅读 · 0 评论 -
千里马Android Framework实战开发视频-binder驱动的简单核心方法及原理介绍
binder驱动的简单核心方法及原理介绍1、linux操作系统用户空间和内核空间简单介绍一般内核空间1GB,用户空间是3GB2. 为什么要分为内核空间和用户空间cpu在不同的工作模式下可以访问的寄存器是不一样的,所以为了保护我们的操作系统,避免用户程序将内核搞崩,所以进行了内核空间和用户空间的划分。3.用户空间想要访问内核空间怎么办?只能通过系统调用和硬件中断完成,常见就是系统调用4、binder驱动中涉及的系统调用有哪些?ioctlmmap5、为什么内核态情况下就是进程间是可以互通的原创 2021-09-04 15:48:22 · 727 阅读 · 0 评论 -
千里马Android Framework实战开发-am命令怎么编译生成及native程序与java程序的binder通信实战
千里马Android Framework实战开发-am命令怎么编译生成及native程序与java程序的binder通信实战背景:大家如果看到binder通信native和java,肯定以为java是apk,但本节课就非要带大家了解点android中其实除了apk这种java程序,还有一类jar的运行程序,这样让大家就可以收获更多的知识点。当然大家学习完了觉得还想去apk上实验当然没有问题,不过这里唯一要提醒大家就是可能apk直接与native binder通信可能会有selinux问题,所以,可以se原创 2021-08-31 23:58:37 · 672 阅读 · 0 评论 -
千里马Android Framework实战开发-native程序之间binder通信实战案例分析
千里马Android Framework实战开发-native程序之间binder通信实战案例分析1、需求背景在android系统开发中,不仅仅我们都停留在java层面,很可能也会遇到比如一些native的可执行程序,比如surfaceflinger,bootanimation等他们都是native的执行程序,这些程序之间也经常会有要进行binder跨进程通信的需求,所以这个时候学习native层进行跨进程通信是非常有必要的。2、案例功能介绍在app的java层面我们之前已经实现过了binder的双原创 2021-08-29 23:05:54 · 1130 阅读 · 0 评论 -
Android Framework实战开发-socketpair介绍及它在android系统源码使用分析
Android Framework实战开发-socketpair介绍及它在android系统源码使用分析1.socketpair介绍在linux下,使用socketpair函数能够创建一对套节字进行进程间通信(IPC)。函数原形:#include <sys/types.h>#include <sys/socket.h>int socketpair(int domain, int type, int protocol, int sv[2]);参数1(domain):表示协原创 2021-08-29 12:03:04 · 992 阅读 · 0 评论 -
Android Framework实战开发-socket跨进程通信之native程序与apk java通信
unix socket前面几节课已经讲过了,但都是基于linux下面的c程序,那么在android中往往经常会遇到c代码的native程序要与apk的java程序进行socket通信,本节课我们来实现一下:直接上代码:native端作为服务端:#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <arpa/inet.h>原创 2021-08-28 21:47:36 · 994 阅读 · 0 评论 -
Android Framework实战开发-Socket让app实现shell命令行执行
Android Framework实战开发-Socket让app实现shell命令行执行1、项目背景在android系统开发过程中,经常会有这样一个需求,就是可能需要让自己app执行一个shell脚本,但是目前app的一般方法都是getRumtime exec方式,但是这种方法基本不可能可以实现,因为只有在root的机子上这个方法才可以成功,但是你想想,一般正常的产品可以有root权限么,那是当然不可能可以有的。但是有客户就是想要在他的app上可以执行对应的shell命令等来动态启动一些脚本等。那么原创 2021-08-28 11:27:50 · 4314 阅读 · 0 评论 -
千里马Android Framework实战开发-Binder通信之startActivity跨进程源码分析
上节课我们已经讲解完了Binder常见使用的一些方法,下面这节课我们来讲解一些Binder跨进程通信在平时Framework及SystemServer源码分析场景。(注意这个分析是基于我们的android 10,因为课程上讲过android 8.1,也相对比较清楚了,这里blog就单独写一下android 10,因为和8.1有一些差异,这样可以多学习到android 10的情况)首先我们来看一副图:1、 startActivity源码分析上面是不是我们常见的一种App与系统SystemServer原创 2021-08-22 23:39:33 · 717 阅读 · 0 评论 -
千里马Android Framework实战开发-binder通信之Messenger介绍
Messenger是什么?Messenger是基于AIDL实现的轻量级IPC方案。这里立马就会有疑问为什么要它呢?明明有了aidl上节课大家学完了aidl进行binder通信是否感觉到使用起来其实还是有点复杂,毕竟通信什么的要写aidl,而且客户端和服务端都需要aidl文件,两个过程里面都需要,相对来说还是比较麻烦,对于项目过程中可能就是一些简单的跨进程数据传递,就是调用几个非常非常简单的方法,很多觉得都要写aidl成本比较大,那么有没有更加简单的方案来解决这个问题呢?那就是本节课要讲解的Messe原创 2021-08-21 22:47:15 · 906 阅读 · 0 评论 -
Android Framework实战开发-binder通信常见(oneway,in,out,inout)元素介绍及binder双向通信的实现
aidl的一些关键字:1、oneway介绍oneway 关键字用于修饰远程调用的行为,被oneway修饰了的方法不可以有返回值,也不可以有带out或inout的参数。使用oneway时,远程调用不会阻塞;它只是发送事务数据并立即返回。接口的实现最终接收此调用时,是以正常远程调用形式将其作为来自 Binder 线程池的常规调用进行接收。2、in,out,inout介绍in、out、inout表示跨进程通信中数据的流向(基本数据类型默认是in,非基本数据类型可以使用其它数据流向out、inout)。原创 2021-08-20 23:26:49 · 2162 阅读 · 0 评论 -
Android Framework实战开发-Binder专题讲解之aidl文件的详细分析
大家平时做应用开发时候也经常会遇到有跨进程通信的需求,这里大部分通信可能就会回答,就是用aidl,service。确实这个aidl和service的方式是应用开发中对binder接触层面应该属于最为接近的一层。因为其他的接口方式跨进程通信,比如startActivtiy,ContentProvider,broadcast,这些都是系统组件接口直接帮我们做好的,连binder的影子都看不见,自然也就对binder相对比较陌生。本节就来重点介绍一下深入讲解分析应用层面binder通信的方式及原理,这一部分属于原创 2021-08-13 00:34:10 · 1253 阅读 · 0 评论 -
Android Framework高级开发-修改的系统Window上模拟器运行
课程答疑和新课信息:QQ交流群:422901085进行课程讨论[FrameWork实战课系列视频链接:https://edu.csdn.net/combo/detail/2123或者点击这里专题博客系列:Android 8.1 zygote 启动过程源码Android Framework实战视频–Zygote的fork进程篇Android Framework实战视频–SystemServer启动篇Android Framework实战视频–SystemServer启动FallbackHome篇原创 2021-06-06 22:52:57 · 1874 阅读 · 6 评论 -
HAXM device is not found in Windows 7,Android Studio模拟器无法使用
环境Android Studio 版本及问题Android Studio 4.2.1Build #AI-202.7660.26.42.7351085, built on May 11, 2021Runtime version: 11.0.8+10-b944.6842174 amd64VM: OpenJDK 64-Bit Server VM by N/AWindows 7 6.1GC: G1 Young Generation, G1 Old GenerationMemory: 1280MCor原创 2021-06-04 00:29:09 · 1317 阅读 · 1 评论 -
Android Framework学习教程-BootAnimation开机动画启动流程源码分析
课程答疑和新课信息:QQ交流群:422901085进行课程讨论FrameWork入门课视频链接:https://edu.csdn.net/course/detail/30298FrameWork实战课1视频链接:https://edu.csdn.net/course/detail/30275专题博客系列:Android 8.1 zygote 启动过程源码Android Framework实战视频–Zygote的fork进程篇Android Framework实战视频–SystemServer启动原创 2021-05-22 23:10:01 · 1495 阅读 · 0 评论 -
精通Android面试-腾讯阿里Android高级开发面试官选拔标准
腾讯阿里Android高级开发面试官选拔标准课程答疑和新课信息:QQ交流群:422901085进行课程讨论FrameWork入门课视频链接:https://edu.csdn.net/course/detail/30298FrameWork实战课1视频链接:https://edu.csdn.net/course/detail/30275专题博客系列:Android 8.1 zygote 启动过程源码Android Framework实战视频–Zygote的fork进程篇Android Frame原创 2021-05-21 21:19:36 · 415 阅读 · 0 评论 -
Android高级Framework系统面试专题系列-认清楚自己的层次
Android高级系统面试之道系列-1课程答疑和新课信息:QQ交流群:422901085进行课程讨论FrameWork入门课视频链接:https://edu.csdn.net/course/detail/30298FrameWork实战课1视频链接:https://edu.csdn.net/course/detail/30275专题博客系列:Android 8.1 zygote 启动过程源码Android Framework实战视频–Zygote的fork进程篇Android F原创 2021-05-21 21:13:58 · 576 阅读 · 0 评论 -
Android Framework实战视频--FallbackHome结束启动Launcher篇
Android Framework实战视频–FallbackHome结束启动Launcher篇Android 8.1代码分析FallbackHome结束启动Launcher篇:1、FallbackHome的结束上一讲已经分析到了FallbackHome Activity的启动,但其实FallbackHome只是系统由未解密到解密过程的一个过度界面,只要用户把系统解锁过一次后,那么就一直会把系统的Home变成Launcher,这个时候FallbackHome的使命就已经完成,不会再出现了。所以经常用户会原创 2021-05-05 10:55:56 · 5286 阅读 · 4 评论 -
Android Framework实战视频--FallbackHome进程启动及Activity启动篇
Android Framework实战视频–FallbackHome进程启动及Activity启动篇android 8.1 源码中FallbackHome进程启动及Activity启动分析上一节课已经一步步分析到了Process.start了,那本节就是来分析Process的start方法具体是怎么一步步的把进程启动及进程启动后对应的Activity是怎么启动的1 应用进程的创建首先看Process.start的源码:public static final ProcessStartResult s原创 2021-05-04 23:25:24 · 4619 阅读 · 5 评论 -
Android Framework实战视频--SystemServer启动FallbackHome篇
Android Framework实战视频–SystemServer启动FallbackHome篇Android 8.1代码分析FallbackHome的启动:前面已经讲解到了在startOtherService里面不仅仅会start系统服务,等系统服务都启动完成后,还会调用各个Service的systemReady方法,这里需要分析首个Ativity的启动,即常见的“Launcher”,当然是从ActivityManagerService开始分析:public void systemReady(fi原创 2021-05-04 19:02:02 · 3144 阅读 · 2 评论 -
Android Framework实战视频--SystemServer启动篇
SystemServer启动篇上一讲已经讲了systemserver进程被fork出来了代码在ZygoteInit的main方法中的:Runnable r = forkSystemServer(abiList, socketName, zygoteServer);进入forkSystemServer方法后已经分析到: pid = Zygote.forkSystemServer即在Zygote中又调用了forkSystemServer方法一直到native层才调用了真正的linux的 fo原创 2021-05-01 23:34:22 · 2195 阅读 · 3 评论 -
Android Framework实战视频--Zygote的fork进程篇
Zygote的fork进程篇1、实战体验linux的fork直接上代码体验fork桌面创建新的子进程//fork.c#include <unistd.h>#include <stdio.h> int main(void){ int pid; int count2=0; printf("main current process pid == %d \n",getpid()); pid=fork(); if (pid == 0) {原创 2021-04-28 23:31:47 · 2114 阅读 · 2 评论 -
Android Framework实战视频--Zygote的启动
Android 8.1 zygote 启动过程源码1、Zygote 简单介绍在Android系统中,普通应用程序进程以及运行系统的服务system_server 进程都是由Zygote进程来fork的。也叫做孵化器。它通过linux中的fork形式创建应用程序进程和system_server 。由于zygote进程在启动的时候会创建java虚拟机环境,因此通过fork而创建的应用程序进程或者system_server进程可以在内部获得java虚拟机环境,不需要单独为每一个进程创建java虚拟机环境。2原创 2021-04-27 22:40:32 · 3576 阅读 · 0 评论 -
Android Framework实战视频系列
hi,广大android爱好者们好:自从去年业余时间发布了Android Framework实战开发入门篇的视频后,大家一直期待的千里马进行新的视频更新,哈哈,首先在这里和大家说一下抱歉哈,因为本人不是专业的讲师培训机构,是一个地道的实战Android 程序员,经验比较丰富些,在学习framework的路上走了很多的弯路,所以才打算出个视频让大家学习framework更加轻松,助力大家更加方便学习framework,不过我这里同时也告诉大家一个好消息,那就是,我们新的一期实战视频马上要与大家见面了。大家原创 2021-04-26 23:55:04 · 1563 阅读 · 0 评论 -
Android高级工程师必备技能
hi,大家好:进来有很多做android应用开发的朋友问我想要走向Android高级工程师应该向哪些方向进行努力希望我可以给他一个大概提纲。这里我说一下,一把做android应用开发时间超过2年后,你就可能会遇到一些瓶颈,比如目前你工作的需求基本比较稳定,你想变得更加强大,技术更加有竞争力,怎么办?到底该学习哪些,感觉android app自己好多都会,但是真正好多又不是非常熟悉。我给大家列出以下一些努力方向:1、复杂的自定义View,可以轻松玩转Canvas等2、View对多点触摸事件的处原创 2020-09-08 23:43:31 · 1242 阅读 · 0 评论 -
android高级工程师如何面对内卷
昨天面试了一个工作9年的安卓工程师,我这边大概说说过程吧。1.面试前,我拿到他长长简历看了大概有4页,各种项目经验,精通技能也包括了什么比较高级的应用端性能优化,内存优化,卡顿优化等,同时也具有什么了解Android framework 的ams,pms,binder等,从简历看确实觉得很不错,我这边都在想要问他具体哪些框架部分的原理和各种深入的问题,看看是否可以达到我们高级系统工程师水平2.面试中,基本开始对他写的性能优化内存优化开始问,他的回答基本停留在哪些情况会引起内存泄漏,和卡顿,把平时常见的引原创 2020-09-06 10:17:53 · 951 阅读 · 0 评论