- 博客(358)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
转载 汇总binder相关一些常见面试题-安卓系统常见面试题
跨进程通讯一般都需要通过ServiceManager进行getService获取bpbinder,但普通app经常使用系统组件Service的bindService进行跨进程通讯也可以获取bpbinder,这个是啥原理?binder中有多个进程作为客户端通过servicemanager获取service的bpbinder,bpbinder都会有一个handle,那么多个进程获取同一个service对应的handle一样么?请描述一下binder通讯起来后,需要新开binder线程的创建是怎么一个过程?
2024-11-07 14:11:03
41
转载 安卓系统常见问题如native crash,卡顿卡死定位工具命令技巧-android framework实战开发
有学员朋友近来有问到一些安卓系统开发过程中的一些核心小技能小技巧等,比如native crash在企业里面该如何准确定位具体代码函数,程序卡住,或者长时间没反应,想要看看卡在代码的哪里。针对以上的一些问题,我这边分享一些工作中常用积极该类问题的一些辅助工具命令技巧,帮助大家更好的在工作中定位这类问题。经常调试偶尔发现app可能卡住,没反应的情况,这个时候就很希望知道卡住这时候的进程的一个运行情况,希望可以得到一个和anr trace一样的文件来方便分析定位线程状态,即想要获取进程的backtrace。
2024-10-30 10:35:27
70
转载 android12/13/14版本wms最新面试题:dumpsys window和sf一定会一致么?
针对这个问题,其实就是说window结构树顺序依赖关系和sf的Layer结构树依赖关系居然不同,大家也知道正常情况下肯定要一模一样,因为Layer虽然可以新加入,但是不能说原来的window对应的Layer结构树顺序都乱了,这样可能会造成显示类的bug。基于上面这个2个面试题,其实本质上是对wms还有surfaceflinger相关知识的深入考察,而且问题属于难度等级层次分明,慢慢变大的情况,所以要完全可以拿捏对这问题,基本上wms部分的知识考察就可以得到面试官的高度认可打高分。
2024-10-30 09:59:29
87
转载 android锁屏界面userActivity自动息屏深入剖析
一旦亮屏时候有用户触摸手机屏幕,那么肯定进入息屏的时间就需要从手机最后触摸时间开始计算,这里手机触摸后就会触发userActivity方法,跨进程到pms中进行统计时间的更新。、锁屏画面不停的点击触摸发现锁屏画面会一直常亮,这里他知道锁屏这个window比较特殊,正常其他window在InputDispatcher进行事件传递时候都会进行userActivity时间的更新,但是锁屏画面是有屏蔽userActivity操作,所以认为锁屏画面哪怕一直点击也不应该阻止息屏。这里的对于手机自动息屏部分有啥差异呢?
2024-10-30 09:53:47
105
转载 安卓桌面Launcher负一屏如何实现各种方案比较设计
有了第一部分解耦,独立性,但是毕竟负一屏的相关滑出,滑入操作都是需要与桌面强相关的,那么就需要考虑与桌面交互的方式。负一屏展示的那些卡片,控件内容等,都设计成和桌面widget一样的ui,由一个专门app来控制这些widget的显示情况,负一屏直接也是桌面的一个容器View,和其他正常的主页没啥差别。1、松耦合,因为属于独立的window,这个window可以launcher自己创建,也可以其他app创建,负一屏的画面内容完全不要桌面管,完全自己控制内容情况。
2024-10-30 09:50:57
71
转载 如何基于scrcpy改造实现大厂一键连招/触摸宏功能(带java源码)-千里马安卓framework实战
已经分享过如何实现这种大厂里面一键连招,触摸宏的功能,原理本身是对dev/input下面的节点进行读取保存文件,然后在读取文件进行写入dev/input下面的节点,从而实现了触摸事件的读取和写入,不过这个一定要root的手机版本。很多同学就提出是否可以考虑参考scrcpy的事件注入,即已经实现了触摸注入了,只需要再额外补充一个事件的录制保存文件既可以。可以看的出这里重点的方案就是scrcpy如何获取用户的触摸事件,即要监听到全局的触摸事件。通过上面几步骤就完成了监听触摸事件保存到文件的操作。
2024-10-30 09:43:03
51
转载 android编译make详细过程日志查看showcommands/verbose.log
这里注意verbose.log.gz是在out的根目录查看既可以,但这里需要注意一下,它一般是编译几次就有几个这种verbose.log.gz,末尾加了数字,比如verbose.log.1.gz,verbose.log.2.gz的方式。这样就直接有对应的apk,或者bin文件了,具体这些apk或者bin文件是如果生成的其实一点都不清楚,那么有没有什么方法可以看到这些bin文件或者apk的是如何生成的呢?第二步:处理AIDL文件,生成对应的.java文件(工程没有用到AIDL,那这个过程就可以省了)
2024-10-30 09:38:59
78
转载 安卓Settings值原理源码剖析存储最大的字符数量是多少?
1、settings相关的数据最后是存在xml中,app层面都是通过SettingProvider调用到systemserver进程进行保存2、xml中写入相关字符时候,对字符长度有限制,是65535,一旦比这个大则会写入异常更多framework详细代码和资料参考如下链接其他课程七件套专题:点击这里。
2024-10-30 09:36:25
49
转载 android 14分屏实战之小米su7的3分屏实现方案讨论及线索征集
调研竞品是如何实现的方案,那当然需要有竞品的设备,可以进行相关的dumpsys,这里因为手上没有su7的车机和汽车可以进行dump,所以暂时没办法进行实际的dump设备查看,即无法分析出小米su7是如何实现的这个3分屏。好了暂时想到就是上面3个方案,其实还是比较推荐方案1,毕竟交互动画体验可以较多的复用2分屏,但是复用也意味着修改较多原来的逻辑,这个暂时还没有时间实战实现这个功能,各位学员们有兴趣可以去尝试实现一下。彻底不使用原来的分屏方案,使用自由窗口方案,整体的3分屏,其实就是3个自由窗口显示着。
2024-10-30 09:28:33
106
转载 InputDispatcher的调试日志isLoggable动态开放logcat实战使用
就是检测一下log.tag.InputDispatcherDispatchCycle这个属性设置的log输出级别,如果没有设置默认就是有INFO,那么__android_log_is_loggable就会返回false,如果log.tag.InputDispatcherDispatchCycle有设置为DEBUG,则返回true。注释其实很详细了,简单说这个方法检测指定的tag是可以在这个level进行打印,默认等级是INFO,而且是可以通过setprop来进行控制的这个tag的输出level。
2024-10-30 09:26:08
193
转载 aosp14上SystemUI相关的调试堆栈乱码无法对应行号,logcat无法输出
首先只是在SystemUI进程里面打印堆栈才会出现堆栈是乱的一堆hash码一样的,但是SystemUI是可以正常运行的,系统进程和其他apk是正常的,说明这个可能这个apk是被优化了,那么控制apk优化一般是在编译的Android.bp里面控制。正常情况下一个普通app直接调用Log.v肯定是可以输出日志的,所以Log.v无法打印,那么第一怀疑是不是有源码中针对systemui进程有单独的过滤拦截。那么怀疑点就得回到SystemUI代码,这里也可以对apk进行反编译看看,是不是被编译时候混淆去除了呢?
2024-10-30 09:23:49
49
转载 安卓14剖析SystemUI的ShadeLogger/LogBuffer日志动态控制输出dumpsy机制
看SystemUI的锁屏相关代码时候发现SystemUI有一个日志打印相关的方法调用,相比于常规的Log.i直接可以logcat查看方式还是比较新颖。具体日志打印代码如下:下面就来介绍一下这个ShadeLogger到底是如何打印的。源码位置:frameworks/base/packages/SystemUI/src/com/android/systemui/shade/ShadeLogger.kt明显是一个kt类,这里就只拿一个logEndMotionEvent方法来进行源码分析可以看到这里看到实际
2024-10-30 09:19:58
36
转载 Miracast/WifiDisplay开发相关的深入调研分析-android投屏实战开发
MiracastMiracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准。支持此标准的消费性电子产品(又称3C设备)可透过无线方式分享视频画面,例如手机可透过Miracast将影片或照片直接在电视或其他设备播放而无需任何连接线,也不需透过无线热点(AP,Access Point)。
2024-10-30 09:17:49
78
转载 android14多屏幕帧率刷新率统计显示开发及成果展示
但是近来有学员提到一个疑问,那就是如果是存在多屏的情况下,而且多屏都在刷新的情况下,那么帧率显示起来就比较乱,因为原来方案基本上都是有layer显示就会累计,根本不管到底是哪个屏幕的。4、在computFps时候,针对拿layer的dispkayID和prop获取的displayID进行比较,相等则可以统计。有做了一个帧率显示的工具,大部分在当时的代码大部分在SurfaceFlinger层面实现的。1、针对layer需要获取每个layer的对应的displayID。
2024-10-26 15:40:37
55
转载 投屏开发调试技能-pcm数据转wav格式文件源码实战分享
Wav简单介绍WAV即波形声音文件格式 (Waveform Audio File Format,简称WAVE,因后缀为*.wav故简称WAV文件),其采用RIFF(Resource Interchange File Format,资源互换文件格式)结构,并符合(RIFF)规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持。
2024-10-26 15:37:28
38
转载 systrace/perfetto第三方app的Trace.beginSection方法无效问题和TAG开放剖析
有针对native的c++代码,也有系统app的java代码,但是缺少了普通第三方app如何打印trace,有学员朋友在第三方app尝试打印trace时候发现了一些问题,那就是使用perfetto抓取的trace死活没有自己打印的trace,马哥这边经过验证也确实有存在相关的问题,下面针对第三方app没办法打印trace问题来进行详细的分析。下面分别分析一下普通tag和ATRACE_TAG_APP是如何进行设置的,这里为了简单方便拿atrace代码来分析。//trace代表结束,与上面方法成对出现。
2024-10-26 15:35:23
88
转载 android framework工程师遇到成长瓶颈迷茫怎么办?千里马经验分享
上面提到的几点就是我这边给一些framework的老工程师在公司工作过程中遇到瓶颈如何提高的方法,相信按上面的方法做了以后你一定可以突破瓶颈,找出新的方向,技术上升一个档次哈。
2024-10-26 15:30:58
52
转载 安卓framework单屏幕Display秒双/多屏互动相关需求改进-wms实战开发
一些vip学员朋友也纷纷求助马哥的实现patch代码,想用于公司的实战项目实现。但是在公司需求实现要求和马哥这边的实现还是会有一些需求上的变更和设备环境差异,所以使用过程中学员朋友们也提出了一些额外的问题。这个问题其实在马哥自己设备上从来没有发现过,但是有的vip学员朋友和我反馈有这种黑屏不显示情况,针对这个问题第一时间进行了分析,主要通过提供的dumpsys SurfaceFlinger来查看。2、因为上下结构已经实现,如果左右结构,针对触摸部分,如果左右结构需要更改触摸区域的宽度变宽。
2024-10-26 15:28:02
47
转载 安卓aosp14上自由窗口划线边框Freeform Caption实战开发-千里马framework实战
因为Caption是属于单独的图层,和Activity的图层都不在一个,而且Caption图层是显示在Activity图层的顶部,而DecorView等明显是Activity图层的一个View,边框红线自然就被Caption栏给遮挡了。即新建一个划线图层处于Caption图层的上面,这样划线图层就可以在自由窗口最顶部进行显示,不会被遮盖,具体实现其实就可以同样参考Caption实现 ,搞一个Windowless的窗口进行绘制。即自由窗口在被触摸放大缩小时候,边框要被画成红色的线条,表示选中。
2024-10-26 15:26:25
72
转载 如何实现对窗口window的viewtree进行dump Hierarchy-安卓framework实战开发
可以看到确实只有Activity的dumpInner里面才有调用这个ViewRootImpl的dump方法,没有看到有其他普通window啥的对这个ViewRootImpl进行调用,并没有发现在window相关的地方有调用这个ViewRootImpl的dump方法。有学员粉丝朋友在群里面问到一个如何针对普通的window进行dumpsys相关的viewtree问题,即展示每个window的view的层级树。但是针对普通window却没有发现有和activity一样好用的命令,可以直接dump。
2024-10-26 15:21:51
28
转载 aosp13/14上自由窗口实战开发之CaptionWindow原理差异分析
近来有学员朋友在做自由窗口升级aosp14时候,虽然马哥已经给大家提供了aosp14的适配patch,但是那个值实现了基本功能,没有和aosp13那么全面,发现自由窗口的顶部操作栏这部分内容和以前aosp13有较大的差异,于是和马哥这边进行了相关的讨论交流,确实发现这块差异比aosp13大了不少,这里进行一下相关记录总结方便后续学员观看。aosp13时候,课程也分析过,在进入自由窗口后主要是变成DecorCaptionView这个layout容器安卓14版本已经看不到有相关的DecorCaptionVie
2024-10-26 15:18:54
71
转载 aosp13自由窗口项目出现图库app划线不全bug修改-安卓framework实战项目
上面已经分析清楚了本质是因为有了SurfaceView以后,系统会设置对应的TransparentRegionHint导致最后的Activity的Layer只显示在非SurfaceView部分,SurfaceView部分区域直接不会被绘制。图库的Activity因为有一个SurfaceView,这里的SurfaceView会导致有单独的Layer,真正显示红框部分属于非SurfaceView部分,但是SurfaceView部分的就完全没有显示出来。那么上面的HWC的输出中为啥Layer又确实被切割了呢?
2024-10-26 15:17:11
35
转载 android 14版本的winscope编译使用-手把手教你编译成功不报错
可以看到报出很多Module not found: Error: Can’t resolve ‘flicker’,Module not found: Can’t resolve 'fs’或者是Module not found: Can’t resolve 'path’等错误,各自缺少库啥的错误,这类问题就是将所以粉丝们卡住的关键啦,这类靠百度一个个改基本不可能哈,还有我们做android的对这块npm报错其实不是那么擅长,修改确实只靠百度。2、npm run build:prod 编译时候也有一堆的报错。
2024-10-09 14:57:19
92
转载 android cpp源码中ifdef定义变量如何在Android.mk中进行控制-手把手实战成功
添加路径添加了USE_TEST_MK :=true这个flag。
2024-10-09 14:55:19
216
转载 live555编译运行笔记
学习rtsp协议实战时候,一般需要有一个rstp的服务进行测试和验证,这个rtsp服务器最好是大家可以手写一个,但是这样可能比较耗费时间,初学者建议可以先拿开源的rtsp服务进行验证抓包学习流程等。 一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。
2024-10-09 14:53:20
154
转载 如何解决错误Given calling package android does not match caller‘s uid-学员提问
可以看到这里的uid明显是通过 Binder.getCallingUid(),即谁发起的跨进程调用获取的就是谁的uid,所以这个uid明显就是我们app包名为com.example.injectmotion的uid,但是这里的callingPackage明显是android即我们的systemserver,因为这个获取Provider明显是在systemserver进程发起的,不是在app端发起的。更多framework假威风耗:androidframework007。先看看这个源码是怎么写的。
2024-10-09 14:51:07
143
转载 Miracast通用投屏与厂商自定义投屏优缺点对比分析
下面就来讲解为啥有了这个通用Miracast投屏还需要自定义投屏?它们各自有啥优缺点?优点:1、可以丰富定制各种用户的投屏需求,比如车载多屏幕投屏,游戏扩展投屏,平行空间等。因为source和sink端都属于自己开发功能,所以想要怎么定制功能就可以怎么定制,灵活性非常高,这也才可以方便的满足用户各种各样不同的需求。2、因为sink和source两端都是自己开发的功能,所以使用体验和性能方面有比较好的保证,毕竟二者属于一个厂商的产品,所以测试也是比较全面的。
2024-10-09 14:49:05
155
转载 安卓窗口window无法移除屏幕外超过屏幕边界?-wms源码层面深入剖析
这里看看是不是应用层面还是哪里限制了,可以通过wms的Relayout的Attribute属性看看,明显看到有负数坐标,即app层面已经把移除屏幕的x坐标传递到了wms,但是最后wms并没有让这个传递来的坐标生效。已经尽力把窗口想要拖到屏幕外面,但是一直拖到不生效,只能在屏幕内部进行移动,这个到其实很奇怪,因为对于LayoutParam的x,y坐标是有进行设置的,为啥设置了就不生效呢?这里再查阅代码发现有个二fitToDisplay,即这里看着有个适配屏幕操作,也会改变这个坐标,这里也加入一下打印。
2024-10-09 14:46:48
90
转载 安卓WMS层面分析窗口的位置变化-安卓framework实战开发
这里有attrs里面带了relayout传递来的值,在computeFrames会使用它进行计算最后影响mWindowFrames.mFrame值,computeFrames方法就不展开了,可以去frameworks/base/core/java/android/view/WindowLayout.java查看。上面就得出了window移动实际就是sf的layer中matrix有位移的变化,从而可以移动窗口,本质就是对surfacecontrol进行了位移设置。可以看到这里的mAttrs的Y值都变大的。
2024-10-09 14:44:46
114
转载 aosp源码导入android studio无法跳转-学员答疑
1、针对导入后要加载代码很久,卡顿等问题,减少导入的sourceFolder,加大内存2、针对源码无法跳转问题,就是需要修改依赖,让orderEntry只剩下sourceFolder,不要其他jar更多framework详细代码和资料参考如下链接其他课程七件套专题:点击这里参考相关链接:更多framework假威风耗:androidframework007。
2024-09-30 14:39:17
207
转载 AAOS上桌面CarLauncher车载开法显示壁纸Wallpaper
1、其实没有壁纸服务和显示本质是因为config_enableWallpaperService这个是false,所以手动改成true2、对壁纸服务已经启动了,那么还看不到就需要修改CarLauncher让背景变成透明,隐藏相关的Card既可以看到壁纸。更多framework详细代码和资料参考如下链接其他课程七件套专题:点击这里参考相关链接:更多framework假威风耗:androidframework007。
2024-09-30 14:37:02
158
转载 android framework Display屏幕相关实战作业探讨
这个比较常见一些,比如在一些背景大屏幕上,其实厂家一般没办法直接做出一个巨大屏幕的背景,主要原因还是因为面板尺寸太大,成本太高,而且也不是很常用,只是在很小一部分景使用。这个需求其实嵌入式相关很多有现成的方案,我们这里实现方式就不是说嵌入式层面方案,而是让大家考虑一下在framework层面,应该如何实现?近来学员vip群里讨论屏幕相关的需求比较多,有2个需求属于粉丝朋友都比较感兴趣一起讨论的,这里刚好做一个记录,方便其他粉丝朋友看看。2、车载多屏互动相关知识。3、input相关知识。
2024-09-30 14:34:14
114
转载 android车载手机互联投屏新专题-实战作业布置
即已经实现了手机和车机投屏互动,车机上手机画面屏幕可以与手机实体屏幕一样就是常见的Mirror模式,如果不一样就是课程里面讲的扩展投屏,平行空间,多屏异显。上面需求是课程手把手带大家讲解实战的,相信大家做出来完全没啥问题,但有同学提出马哥课程都做出来了,有没有更有难度挑战的项目布置过来呢?即画面可以看出来,车机上展示了手机的3个画面,而且3个画面还是内容都不一样,其实就是有3个扩展虚拟屏幕可以展示各自不一样内容。2、实现3个虚拟屏幕的车载手机互联投屏且3个画面各不一样。刚好有一个如下的需求亮点功能。
2024-09-30 14:31:49
101
转载 aosp13/aosp14编译模拟器emulator的kernel源码(保证通过运行,拒绝水文)
但是学员一直反馈不成功,我这边也按他的给链接(其实就是参考水文章的锅)等进行了尝试确实不行,而且这块模拟器kernel文章说实话都是些老版本,基本上网络找一了一遍没有一篇是新版本而且可以成功。明显看到分区无法加载等,这个就是只编译kernel想只替换kernel既可以的情况,就是virtio_blk.ko的报错,无法进入android,主要原因还是模拟器自带的virtio_blk与我们编译kernel是不兼容的,这个接下来还需要编译相关Virtual的ko。
2024-09-30 14:29:52
181
转载 aosp12/13/14模拟器如何进行单模块更新-安卓Framework开发实战小技巧
1、单模块编译更新,需要我们对自己模块修改后编译生成对应的so,apk,jar很熟悉,这样我们才可以考虑单模块编译push,如果不清楚的话请大家还是整编最为保险,以防出现不生效啥的情况2、每次启动模拟器要带上emulator -writable-system,而且第一次adb remount要进行重启生效更多framework详细代码和资料参考如下链接其他课程七件套专题:点击这里更多framework假威风耗:androidframework007。
2024-09-30 14:27:55
152
转载 安卓xml乱码/加密转换:abx2xml和xml2abx使用及源码介绍
转换前属于二进制乱码转化后的./system/users/0/appwidgets-read.xml变成我们常见的普通xml同样普通xml也可以转成二进制xml,转化命令然后看看./system/users/0/appwidgets-binary.xml是不是变得二进制不可读了。
2024-09-30 14:25:55
123
转载 android系统中data下的xml乱码无法查看问题剖析及解决方法
高版本安卓主要是考虑到使用二进制xml1、二进制xml的性能方面速度比传统xml快2、占用数据体积比传统xml要小以上两个优势就是使用二进制xml根本原因,系统默认二进制xml也是可以通过标志位修改变成普通xml,但是要清除数据重新生成,想要二进制xml直接变成普通xml需要对原来的二进制xml进行解析后重新写入新的普通xml更多framework详细代码和资料参考如下链接其他课程七件套专题:点击这里更多framework假威风耗:androidframework007。
2024-09-30 14:23:59
125
转载 导航手势导航键在input部分的差别
简单说就是在多屏互动过程中,需要把Activity从这个屏幕移动到另一个屏幕,必然就导致原来屏幕的Activity相关会有移除,体现在input端就是相关的InputWindow会被remove,这个时候input派发事件发现根本没有可以用的window了,所以自然就无法派发事件了,因为不知道派发给谁。这个其实就需要对相关的InputDispatch代码进行详细的分析了。只能拖到一小段,然后在接收事件的部分就收到了一个CANCEL事件,但是在导航手势模式下却没有该问题。
2024-09-30 14:21:32
69
转载 安卓车载多屏互动副屏底部有黑线条NavigationBar分析
确实看到创建副屏满足上面条件,到此整个副屏显示一条黑线就清楚,本质就是显示了一个NavigationBar盖在上面,为啥显示NavigationBar是因为副屏创建时候有相关的FLAG让显示及是相关的Trust屏幕。其实初略来看这个成果已经完成一个多屏互动项目大部分功能,但是其实还是有一些bug的存在,今天我们就来分析一下多屏互动相关的bug补充哈。明显第二屏幕的底部黑线看起来很诡异,下面这个黑线条其实是我们不需要的,这里就需要分析一下为啥会有这个黑线条。dumpsys SurfaceFlinger分析。
2024-09-30 14:19:39
131
转载 视频逐帧播放查看神器-android闪黑闪白等分析辅助工具
这类问题要分析的话就不得不需要对设备录屏,然后对录屏进行逐帧播放查看现象,看看到底是怎么回事,比如闪黑,闪白看肯定就是中间有一帧黑了,或者白了,导致前后帧的视觉差异太大,但是这个又是一瞬间的现象,导致给人就是闪黑,闪白现象。所以就不得不先拿录制的视频来进行分析,分析就需要对视频进行逐帧进行播放,那么下面马哥就给大家推荐几个工作中可以逐帧播放的视频播放器。这个是个完全命令行的播放器,不可以鼠标操作,具体逐帧播放其实是有按键可以控制的,这个按键就是“s”这个按键。点击 “工具”进入“自定义界面”
2024-09-04 09:29:17
560
android framework高级实战视频课程相关课件
2022-05-21
Android Framework最好的学习视频
2021-05-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅