![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android framework
文章平均质量分 72
Android framework
UI仔Coder
画画UI,吃吃烤串。
展开
-
Android,RPC原理,C语言实现Binder跨进程通信Demo
把编译出来的两个二进制文件push到设备中测试。看到hello已经被调用了说明跨进程通信成功了。把两个文件拷贝到我们的Demo下面。主要的数据结构是在这里。原创 2024-06-23 22:53:30 · 425 阅读 · 0 评论 -
Android模拟器linux内核的下载,编译,运行,驱动开发测试
新建一个目录存放内核源码查看源码编写脚本文件使用内核镜像启动模拟器。原创 2024-06-23 13:47:35 · 601 阅读 · 0 评论 -
Android framework的Zygote源码分析
进程,是Android系统上所有应用进程的父进程,我们系统上app的进程都是由这个zygote分裂出来的。zygote则是由Linux系统用户空间的第一个进程——init进程,通过fork的方式创建的。路径 system/core/rootdir/init.zygote32.rc,32位进程,64位进程,这是个二进制文件,Android中生成二进制文件一般是Android.mk或者Android.bp。编译执行,主进程号是5021,fork之后有个pid5022,意思就是有2个进程执行这段代码。原创 2024-06-13 23:16:03 · 759 阅读 · 0 评论 -
Android native层的线程分析(C++),以及堆栈打印调试
先执行readyToRun(),创建完成后,通过调用threadLoop()函数,线程请求退出方法,实现requestExit()函数。run()方法,可以看到它也是用的pthread那套线程api,Android的native层的线程就是基于linux的pthread方案进行封装的。综上所述,这个MK文件配置了两个C++/C语言编写的可执行模块的构建过程,一个是与Android系统紧密结合的。所在线程的堆栈调用打印出来。在安卓源码的根目录下创建一个文件夹,并写上mk文件,提供编译的脚本。原创 2024-06-12 22:51:49 · 1008 阅读 · 0 评论 -
Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)
c 无论如何都会执行完当前的这个part部分,保证动画的连续性,1 循环一次,只播放一次, 0 停留的帧数,把 bootanimation.zip 动画文件移动到 我们自定义的product 文件中。#ffee00代表颜色值,c c代表位置,横纵坐标,都是center居中。图片路径part0,表示图片文件夹,里面都是一张张的图片文件。他会去执行每一个part文件夹,一帧一帧的绘制图片纹理。首先要创建一个文件叫做desc.txt,这是规定的,如果我们预制了zip的文件,那么代码就会走movie。原创 2024-06-06 00:48:24 · 711 阅读 · 0 评论 -
Android framework修改,按power按键直接关机,不弹出对话框让客户还要选择
/这里false代表不显示关机提示框,true未显示关机提示框,通常这意味着执行一个直接的关机指令,而不是显示一个确认对话框给用户。如下图,正常情况下,长按关机键,都会弹出一个对话框,让用户选择Power off关机等操作,我们修改去掉这个弹框,直接长按关机。参数意味着这个反馈不需要明确的视图上下文(某些情况下反馈效果需要和特定视图关联,但这里不需要),,系统可以知道该操作已经得到了关注,会阻止此事件的默认处理流程或防止多次处理同一事件。这行代码触发了设备的触觉反馈(例如震动),模拟长按的效果。原创 2024-06-04 00:02:28 · 377 阅读 · 0 评论 -
Android开机动画,framework修改Bootanimation绘制文字。
yc是原本Android动画的一个坐标系,但是我们不能覆盖他,所以要比他高,放到原生Android动画的上边+ mAndroid[0].h。我们新增代码在这里TEXT_CENTER_VALUE居中显示, yc + mAndroid[0].h计算绘制的y坐标系。opengl只是支持图片纹理,所以文件是一张图片。来到android()的initFont()然后会把这个图片加载进来,设置宽高等等。声明一个成员变量Font。这是一个文件名字符串。原创 2024-06-02 00:27:26 · 652 阅读 · 0 评论 -
Android开机动画的结束过程BootAnimation(基于Android10.0.0-r41)
启动一个线程池,用来初始化一些binder跨进程通信的一些属性,绘制图形都需要依赖waitForSurfaceFlinger();,要等SurfaceFlinger进程启动了开机动画才有用,binder调用的一个代理对象,主要是跨进程通信和 SurfaceFinger,sp是一个智能指针,如果有sp这个东西就会有对应的下面的这个类,,就会执行这个类。init进程把我们的BootAnimation的二进制文件拉起来了,设置一个开机动画退出的属性,值为1就是退出。我们的开机动画主要走这个方法。原创 2024-06-01 16:21:24 · 711 阅读 · 0 评论 -
Android 开机动画的启动过程BootAnimation(基于Android10.0.0-r41)
下面就是BootAnimation的重要部分。开机动画主要跟三个东西有关系查看下Android.bp编译文件,cc_binary就是我们编译出来的可执行文件最终的输出路径是在系统启动的第一个进程是init,init进程会根据init.rc配置启动surfaceflinger进程。就是下面这个.rc进程但是此时的Bootanim.rc不会启动。是disabled。一般一个进程启动了,都会有一个对应的main方法。原创 2024-05-31 00:02:47 · 817 阅读 · 0 评论 -
Android framework修改,禁止指定包名的apk安装到设备上(基于Android10.0.0-r41)
pms就是负责apk的安装和卸载,从pms入手自定义两个接口在aidl文件中,pmList主要设置要禁止安装的包名的列表,getPackageInfoList是获取包名列表。原创 2024-05-23 00:10:45 · 545 阅读 · 2 评论 -
堆栈打印跟踪Activity的启动过程(基于Android10.0.0-r41),framework修改,去除第三方app的倒计时页面
framework中修改,一般都是lanucher界面启动我们的第三方app。查看位于最上层的activity,想办法去掉这个倒计时页面直接进入主页面。那系统又是怎么调用handleLaunchActivity的?跟踪堆栈调试发现,onCreate的回调大致从这里开始。,查看Activity的onCreate如何回调的。这样就可以拦截我们想要拦截的Activity了。logcat -s qfh过滤tag。logcat -c清除日志缓存。这样模拟点击事件跳过也可以的。进到倒计时的下一个页面。原创 2024-05-04 00:49:17 · 632 阅读 · 1 评论 -
Android系统app开发,aosp中内置客户第三方apk
系统app阔以使用很多系统源码中隐藏的api首先先编译出jar包整编源码后,在这个目录下,这个就是包含系统源码隐藏api的jar包系统app的标志拷贝jar文件到app模块下在编译之前把这个jar添加到classpath路径里面去,这样才能使用里面的apiapp模块下,complieOnly,只在编译的时候需要,不需要把它打包到apk包里面去制作系统签名文件Androidstudio配置签名。原创 2024-02-18 20:30:09 · 667 阅读 · 0 评论 -
Android跨进程通信,binder,native层,服务端在servicemanager注册服务
服务端代码binder_open利用系统调用函数打开驱动,然后调用svcmgr_publish组装binder_io数据结构体,binder_call去调用驱动,在这个过程中,binder_io结构体会转换为binder_write_read给binder驱动,然后servicemanager进程也会通过binder_write_read读取服务端传递过来的数据,binder_loop,servicemanager启动后,收到服务注册的通知,binder_call远程调用。//给上面的结构体赋值数据。原创 2023-12-03 22:34:12 · 348 阅读 · 0 评论 -
Android跨进程通信Binder,native代码,C语言分析,ServiceManager如何启动?做了什么?
系统启动的时候会先启动一个ServiceManager的一个进程,用于binder服务的管理,写程序先在服务端定义我们的服务,也就是一系列的函数方法,注册服务,客户端就可以获取到服务,拿到服务之后就可以发起远程调用。c函数库,封装了一些底层函数给我们使用,对外给我们提供的一些接口,不用关心这些接口是如何实现的,比如open,ioctl,mmap,close。binder_io,包含了一系列的数据,客户端把数据赋值给这个结构体,接收端接收,用于存数据的一个集合,占有一段内存。binder_write分析。原创 2023-12-02 23:49:00 · 105 阅读 · 0 评论 -
Android系统源码中添加可编译运行执行程序,java
在这个文件夹目录下新建一个Android.bp文件,对这个模块指定编译的方式。在自定义的mk文件中,加上这个模块的名字,才能在编译系统的时候打包到系统里面。运行模拟器,进入shell环境,来执行我们的java程序。新建一个文件夹,以及Java类的包路径。就拿我们刚刚的jar包来测试,java程序都要配置类路径。在out目录中自己找一下。Android.bp中。发现有我们的jar包。原创 2023-11-30 21:37:37 · 324 阅读 · 0 评论 -
Android系统源码中,将编译好的二进制可执行文件放入系统中
在Android.bp文件中,然后整编系统即可。在对应product的mk文件中。原创 2023-11-28 00:11:57 · 550 阅读 · 0 评论 -
Android系统源码中添加可编译运行执行程序,C,C++
打包出来的系统镜像文件才会包含我们刚刚自定义的test文件模块才会被添加到我们的编译后的系统镜像文件中,成为product的一部分,Android.bp,bp文件就是指定这个模块的编译脚本方式,指定test.cpp编译方式。格式就是json字符串。然后启动模拟器看看是否被预置到product分区目录下,编译它,单编,mm命令,进入到需要编译的目录下。新建一个文件夹,以及一个test.cpp文件。我们执行一下这个程序,输出即可。整编命令make -j12。原创 2023-11-27 23:37:56 · 380 阅读 · 0 评论 -
Android跨进程通信,IPC,RPC,Binder系统,C语言应用层调用
RPC,远程调用,a进程想打开led,点亮led,调用led_open函数,通过IPC发送数据给b进程,b取出数据,然后调用b进程的led_open函数,看似a进程来直接操作led_open函数一样,实际上是a发送数据给b,b操作硬件。b进程服务端程序要先向servicemanager注册服务,a进程查询led_服务,得到一个handle,指向进程b。在头文件中定义,句柄是0,进程间通信,0就是servicemanager进程,IPC,进程间通信,a进程发送数据给b进程,就是跨进程通信。原创 2023-11-18 15:41:41 · 1614 阅读 · 0 评论 -
Android framework添加自定义的Product项目,lunch目标项目
源码目录下输入lunch命令之后,简单理解下面这些列表就是product。用于把系统编译成不同的镜像文件,比如我们一般选择这个lunch的product这个文件夹就是我们编译源码的时候lunch的很多菜单选项在devices目录下,搞几个文件夹# Wifi.test1.mk#endiftest1-eng\test1-user测试一下这样子就是成功了,lunch试一下没毛病。原创 2023-11-14 00:09:16 · 352 阅读 · 0 评论 -
基于AOSP源码Android-10.0.0_r41分支编译,framework开发,修改系统默认字体大小
主要修改一个地方就行。原创 2023-11-05 19:18:06 · 406 阅读 · 1 评论 -
Android系统跨进程通信--Messenger实际客户端,服务端通信测试
跨进程通信的方式之一,简化AIDL的繁琐,提升开发效率。原创 2023-10-16 23:33:17 · 891 阅读 · 0 评论 -
Android系统Binder跨进程通信,Client,Server互通信调用测试
运行一把看看,我们看到我们的客户端收到了来自服务端的回调日志,说明服务端也成功的调用了客户端的方法,。假设我们需要客户端调用了我们的textInOut方法然后回调给客户端信息。binderservice之后,客户端是可以感知服务端是否还运行的状态。在服务端设置一个监听接口,就可以使用客户端传递过来的接口实现对象了。在客户端搞一个实现类,也就是说在客户端这个接口给服务端调用。多搞一个接口测试用于测试服务端调用客户端的接口。输出日志,说明客户端挂掉之后,服务端可以感知。测试一下,故意搞个空指针测试客户端挂掉。原创 2023-10-15 21:27:39 · 831 阅读 · 2 评论 -
Android跨进程aidl文件关键字研究学习
运行观察现象,说明in关键字生效,我们调用完下面这个方法,name并没有发生改变还是我们原来设置的qfhqfh,而不是 info.name = “textIn”;out关键字是不能感知客户端传递过来的对象数据的,只能在服务端修改数据。oneway修饰的方法是立即返回,不会管服务端到底有没有执行,异步执行,触发调用就完事了,不能有返回值。这个是服务端打印的客户端传递过来的数据是null说明out关键字不会接收客户端传递的数据过来。下面这行日志是我们客户端打印的数据,已经被服务端修改了的数据。原创 2023-10-14 20:29:16 · 829 阅读 · 0 评论 -
Android跨进程通信的AIDL生成的文件代码解析,asInterface,Stub,Proxy
主要是客户端调用,把远程的IBinder实现类对象转换成客户端本地的一个接口引用,这样在客户端就能调用服务端定义好的方法。stub是抽象类,意味着我们定义在aidl里面的接口都需要实现,生成的文件源码中并没有去实现我们定义的接口方法。在onTransact中,匹配上了TRANSACTION_request这个code就可以执行对应的远程方法。做一些判断,有的话就直接返回这个Ibinder对象,没有的话就new一个新的。调用远程的方法实际上是调用下面的这个Proxy中的方法。匹配我们对应的要调用的方法。原创 2023-10-10 23:23:35 · 917 阅读 · 0 评论 -
Android Binder跨进程通信,servicemanager.getService方法获取binder对象
主要是Android系统借助servicemanager的AMSt通过一些方法传递binder对象。原创 2023-10-10 22:15:28 · 866 阅读 · 0 评论 -
Android Binder常用案例使用分析,跨进程通信aidl,binder的java层流程,服务注册过程(java层)
客户端:使用intent,启动服务端的service,使用binderservice,在onServiceConnected回调方法中获取服务端的实际binder对象。使用aidl中的接口调用服务端的方法即可。服务端:定义接口aidl,使用Service组件,对aidl文件中的Stub抽象方法的实现,通过重写onBinder方法返回给客户端。服务端实现onBinder方法,客户端绑定这个service的时候这个方法会被回调。service组件的binderService获取binder通信。原创 2023-10-09 23:24:08 · 1310 阅读 · 0 评论