
杂项命令
文章平均质量分 84
千里马学框架
安卓架构师,安卓技术专家,android framework
展开
-
面试福利:安卓系统framework开发面试题目汇总
列出的面试题目大部分都是有答案的,答案可以vip群获取,有的是没有答案的,毕竟是去人家公司面试的,面试官也不是马哥,当然也就没有相关的答案,不过看到题目大家一般都可以有自己的答案,大家不确定的可以vip群中丢出来讨论。5、binder通信中不同进程的指向同一个Binder服务的客户端请求服务端时使用的handle是否是相等的呢?12、判断权限的时候,经常会传入一个uid,这个uid跟多用户的userId有什么联系吗?3、既然后黑屏冻屏的问题,你说说你分析的这个几个问题,是怎么分析的?原创 2025-05-16 12:58:24 · 337 阅读 · 0 评论 -
安卓陌生知识点:IntentFirewall组件启动“防火墙”实战方式
源码位置:组件IntentFirewall的作用IntentFirewall是Android框架中的一个组件,它可以根据XML文件中定义的规则来控制Intent的发送和接收。Intent是Android中用于组件间通信和启动的一种消息对象,它可以携带动作、数据、类别等信息。IntentFirewall可以根据Intent的属性和调用者的信息,决定是否允许或拒绝Intent的传递,从而增强系统的安全性和灵活性。原创 2025-05-02 01:14:38 · 821 阅读 · 0 评论 -
Android.mk必读的一些基础知识部分
(CLEAR_VARS):清除模块变量(如LOCAL_MODULE),需在每个模块开头使用。原创 2025-04-30 12:28:32 · 734 阅读 · 0 评论 -
干货笔记:安卓系统开发工程师必须掌握常用命令汇总(不断更新)
经常在做系统开发需要使用一些命令来查看某个模块相关的信息,根据这些信息来清楚了解模块当前状态,比如常用的dumpsys activity,dumpsys SurfaceFlinger等命令,这些命令其实用多了自然就熟悉了。属于非常高频命令,主要用来展示当前设备上展示的画面,图层信息,一般用于调试,定位一些显示异常等疑难问题,属于做系统窗口和显示开发必须会的命令。这个命令内容太多,一般在想要展示所有信息时候使用,但是因为输出内容太多,一般会用他的子命令,更有目标性。1、某个apk是否安装,apk的安装路径。原创 2025-04-27 13:16:01 · 997 阅读 · 0 评论 -
system.img无法打包非PRODUCT_PACKAGES目标解析
不过在文件查找发现并没有我们新编译的目标没有加入PRODUCT_PACKAGES的文件,所以基本上我们就可以断定,aosp15相比aosp14就是在打包img时候,多了这个file_list.txt文件作为过滤依据,在打包img文件时候就是只会打包只有在file_list.txt文件中的,不在文件中也就不会打包。明显多了了个文件file_list.txt和file_list.txt.rsp,这里其实主要就是看file_list.txt文件既可以,可以看看它的内容。c.通过前置过滤机制保障输入目录纯净度。原创 2025-04-25 10:10:19 · 753 阅读 · 0 评论 -
Android.mk和Android.bp同时需要定义一个目标怎么办?
如果Android.bp和Android.mk同时存在情况下,什么也修改,那么会怎么样呢?明显报错already defined ,这个其实完全可以理解,因为Android.bp和Android.mk都同时哟定义目标linux_thread。所以Android.mk和Android.bp要同时存在的话,必要考虑解决重复定义的问题,即一套代码只能允许一个生效,要么是Android.mk生效,要么Android.bp生效。原创 2025-04-14 12:50:55 · 800 阅读 · 0 评论 -
Android.bp中添加条件判断编译方式
面临上面要适配多个机型差异的问题,大家可能第一时间会想到用不同的代码分支不就行了么,但是大家注意如果用不同的代码分支同时意味着每个分支的代码你都需要进行维护,维护工作量极大,也就是经常可能修改了一个bug,做了一个新需求,你不得不同步一遍到多个分支,这样一旦机型多了,差异多了,你的维护成本会越来越多。情况2:代码编译依赖api或者库都有差异,即会有编译上的差别情况,那么这种就一定需要通过Android.mk,Android.bp中进行相关的条件判断才可以。案例1:使用不通过的依赖代码文件夹。原创 2025-04-11 12:42:15 · 941 阅读 · 0 评论 -
来看看文件监听的FileObserver的底层原理inotify实战demo
上面可以看出FileObserver本质都是调用的linux相关inotify接口,下面针对linux的inotify监听文件变化采用一个demo实战案例方便大家立即。1、自定义一个DataFileObserver继承FileObserver类,重写onEvent方法,一旦有文件相关变化时候就会回调这个方法。上面原理主要方法也有注释,这里可以看出ObserverThread主要还是一个线程类,主要核心业务方法都是调用到了native层面。在我们构造对应的FileObserver最后会调用到下面。原创 2025-04-09 10:11:19 · 536 阅读 · 0 评论 -
Ninja,Kati,Soong等知识深入扫盲
最开始,Ninja 是用于Chromium 浏览器中,Android 在7.0 中也引入了Ninja,因为随着Android系统和应用程序的增长,这种构建方式变得越来越慢,尤其是在大型项目中。为了解决这个问题,Google开始引入新的构建系统来提高编译速度和效率。Ninja是一个小型的、专注于速度的构建系统,最初由Google的程序员Chris Manson开发,最初用于加速Chrome浏览器的构建过程。Ninja的设计思路简化构建过程,通过精确指定输入和输出关系,实现快速增量构建。原创 2025-04-07 01:27:57 · 745 阅读 · 0 评论 -
Android.bp如何快速掌握经验分享
定位与作用:Android.bp 是 Android 构建系统(Soong)的核心配置文件,用于定义模块的构建规则及依赖关系。它替代了传统的 Android.mk 文件,语法类似 JSON,但更简洁高效,支持模块化管理。发展历程:从 Android 7.0 开始引入,Android 8.0 后成为默认配置,基于 Ninja 构建框架,通过 Blueprint 解析,最终生成 Ninja 文件执行编译。原创 2025-04-06 01:05:51 · 994 阅读 · 0 评论 -
自由开发者aosp源码修改部分如何提交保存上传服务器?-记录AI帮助我们实现过程
虽然AI无法完美满足你的实战需求代码,但是AI确实可以给你生成一个基本上可以用的成品代码,这个已经最少帮你节省了%70以上时间了,万事开头难,AI都帮助你开好了头,也帮你实现了一个基本可用的代码,你只需要在这个基础上改善完善他的功能,修复一些bug既可以,所以AI完全替代程序员这个事情是不太存在的,但是AI可以大大提升我们每个程序员的开发效率,让AI做出一些基本可用的模块类工作,节省我们大量的时间成本,我们程序员注意力集中在更高难度的一些AI无法实现需求和bug上。下面介绍2种常见方案来解决该痛点。原创 2025-04-01 11:25:58 · 1016 阅读 · 0 评论 -
android studio调试aosp手机userdebug版本无法查看局部变量和参数问题如何解决?
针对上面的问题,大家第一反应可能会说,既然eng版本没有问题,那么是否可以考虑编译一个整体eng的包不就行了?这种方法其实有条件情况下确实是一个最省事方法,但是很多时候出版本的不一定是自己,大家可能都是取公司编译好的版本用,然后修改自己模块push进去就行,所以很多时候不一定有完全eng的大版本可以使用。因为我们都是使用模拟器居多,模拟器编译的版本一般都是eng版本,所以没有这个同学问题,针对这样一类问题一般都是可能和自己的手机设备版本类型有关系,这个有问题版本确定是一个userdebug版本。原创 2025-03-28 13:37:56 · 601 阅读 · 0 评论 -
安卓15/aosp15/lineage21使用brunch编译老是报错OOM内存不足
原理:因为breakfast,brunch其实属于lineage os自定义的函数帮助我们包装了一些操作而已,本身aosp是没有的,lineage os本质还是基于aosp的,所以自然aosp的所有编译命令也可以正常使用。1、物理解决方法,直接增加内存条,把内存变成64G,这种方式可能最简单啥也不需要改变,不过很多同学可能也有条件限制不一定可以,比如内存插槽不够,或者是内存条贵。2、增加swap虚拟内存,这种方法也是可以的,但是也需要消耗相关的硬盘空间等,需要重新扩展swap。原创 2025-03-19 16:22:12 · 598 阅读 · 0 评论 -
看一看系统Task都为啥不显示的问题--学员作业
这个MyTaskOrganizer主要就是在构造时候有调用registerTaskListener,这个最后会调用到TaskOrganizer自带的registerOrganizer方法中去。其实从修改可以看出来,只是简单的构造了一个MyTaskOrganizer就会导致桌面Task无法显示,整个复现过程其实都属于程序员正常写代码行为,但是就是出现了个Task不显示问题。上面现象可以看到明显系统启动后桌面已经不显示了,那么就是针对这样一个桌面不显示问题作为学员作业布置给大家来进行探索。原创 2025-03-11 09:45:38 · 266 阅读 · 0 评论 -
sysprop变化通知native层面实现[验证通过]
整体非常非常简单,只需要调用add_sysprop_change_callback既可以,参数就是callback方法。2、prop变化回调部分,native其实本质就是放入了一个方法指针既可以,有prop变化通知后,会执行传递进来的方法。1、无论java还是native,通知prop变化其实都是通过跨进程通讯调用SYSPROPS_TRANSACTION。可以看到确实有相关的,不过这里会有连续两次回调打印,哈哈,这个你知道为啥吗?可以看到这里有调native_add_change_callback方法。原创 2025-02-09 09:30:00 · 725 阅读 · 0 评论 -
安卓prop/SystemProperties如何监听值变化
这里先来一个实战案例给大家展示一下具体如何对prop的值的进行监听变化及通知变化。1、监听方法/*** changes.* @hide*/这里监听比较简单,只需要添加一个callback既可以,也可以看出这里并没办法和settings那样针对某一个值进行监听,这里相当于是只要有prop变化通知发出,就会收到回调。2、通知prop变化的相关方法2.1 ActivityManager中的notifySystemPropertiesChanged方法/*** @hide*/@TestApi。原创 2025-02-07 11:25:54 · 1299 阅读 · 0 评论 -
lmk内存压力测试工具mem-pressure源码剖析
因为这种低内存问题本身就不属于一种功能操作类型的问题,属于一种系统当前可使用的内存少导致的问题,所以分析这类lmk低内存被杀的情况迫切需要一种可以帮助我们复现系统低内存的工具,今天马哥就给大家介绍一个内存压力工具mem-pressure详细使用和源码剖析。系统的mem-pressure并不是自带集成的,需要集成这个mem-pressure工具是需要自己进行额外编译的,所以要先进行编译mem-pressure的bin文件后再使用。3、子进程内存达到极限被杀了后会打印出申请的内存值。1、不断创建新的子进程。原创 2025-02-05 23:58:06 · 719 阅读 · 0 评论 -
跨进程高级玩法方案2-学员分享
大家明显可以看到这里的IDisplayManager.aidl文件被缩减成了只有两个方法,其实这个IDisplayManager.aidl文件属于原生系统的阉割版本,但是因为我们的需求就是获取的getDisplayIds,DisplayInfo.aidl是因为第一个接口getDisplayInfo需要的一个依赖,所以这个阉割的aidl也是完全可以满足的。缺点:需要针对每个跨进程的接口进行详细的细分,特别是组装和拆装parcel对象,这个每个接口都不一样,而且也比较容易出错。上一篇文章已经分享了相关的方案。原创 2025-01-19 23:20:10 · 543 阅读 · 0 评论 -
安卓java端service如何在native进程进行访问-跨进程通讯高端知识
因为跨进程通讯本质上都是需要通过native端,虽然服务端或者客户端是java端,那都是先经过了native端再jni调用到java的,所以完全是可以实现客户端和服务端不要求两个都属于native或者java,完全可以native和java互通。代码1处的intTRANSACTION_getDisplayIds=2,注意这里的2就是从aidl对应的java文件中获得的,所有这个就是为啥要一定要找一个aidl文件生成的参考代码。,相信大家只要实战过马哥跨进程通讯课程肯定就对这个题目有自己的思路和方案。原创 2025-01-18 22:48:30 · 1231 阅读 · 0 评论 -
aosp系统源码aidl文件如何查看对应生成的java文件-安卓系统开发实战小技巧分享
方案1、直接拿到aidl文件后,使用最aidl命令来手动生成对应的java,或者c++等代码,这种方式优点就是简单方便直接,只要有aidl文件既可以,但是因为系统的aidl文件可能依赖很多系统类和代码,所以这里针对系统的复杂aidl文件手动生成可能就不合适了,较为麻烦。上面发现根本找不到IDisplayManager.java文件,只能找到一堆的IDisplayManager.aidl.d文件,这个不是我们想要的,那么该怎么处理才可以有马哥上面的IDisplayManager.java。原创 2025-01-17 00:09:09 · 1013 阅读 · 0 评论 -
干货答疑分享记录:as导入问题,LSP含义,分屏进入SplashScreen
正确解答其实在ActivityManagerService类中本身有对这个LSP等进行解释,其实指的是锁的范围。学员疑问在正常情况下Splash窗口都是有Icon的,这里明显没有看到有Icon,只看到一个背景图,这个是为啥?3、学员询问分屏过程中请问到底有没有Splash Screen的画面展示,看到有图层,但是没有看到有Icon。对相关的android.iml进行了相关的修改,把sourceFolder放到最顶部了。正常打开App时候,展示的SplashScreenView的相关打印。原创 2025-01-15 13:52:58 · 1252 阅读 · 0 评论 -
分享你的安卓framework成长学习经验-千里马第二次社群学习
总体有以下几种情况1、认为做app门槛低,做的人太多,失业风险大,fw竞争力强,门槛较高,公司裁员时候fw开发者被猎头抢着要,app开发者有几年找不到工作2、大学社团就自带兴趣学习fw,因为自己对app开发只是画界面没意思,想要探索整个系统触摸3、校招进入小企业后发现做定制开发,技术太浅了,想要提高自己fw技术困难1:完全自学网络上一些零散fw技术blog,没办法成为完整模块知识体系,花了好多时间blog自学啥也没学会。原创 2025-01-12 11:16:35 · 1158 阅读 · 0 评论 -
千里马第二次社群学习-分享你的framework成长学习经验
相信每个成功上岸framework工程师岗位的学员和粉丝们都有自己的一套独特学习方法,每个人的方法可能各不相同,所以举行一次社群学习方便大家一起交流framework的快速学习和成长方法相关经验分享,也许人家的好方法你也可以尝试一下是否也适合你,相互交流学习经验一起更加高效的找到适合自己最快的framework学习方法。一个人学习某个知识可能认知和理解都会比较有限,一群志同道合的人在一起学习讨论某一个知识,分享各自的理解,观点和成果,这样可以大大扩宽知识面,提高学习效率等。对题目有自己的思考和方案思路。原创 2025-01-11 11:06:53 · 529 阅读 · 0 评论 -
千里马社群学习初次尝试-如何解决安卓偶现类黑屏,闪黑等问题
一旦这类偶现问题频繁出现会给造成很差的用户体验,但是这类问题又是偶现的,对于测试或者开发来说都是基本上束手无策,测试不知道这类偶现问题什么时候出现,无法抓取设备对应有效分析现场资料,开发无法得到偶现问题的资料,也无法进行有效的分析。社群学习是指一群有共同学习目标和兴趣的人,通过线上或线下的形式,进行知识分享、资源互助和共同进步的组织。一个人学习某个知识可能认知和理解都会比较有限,一群志同道合的人在一起学习讨论某一个知识,分享各自的理解,观点和成果,这样可以大大扩宽知识面,提高学习效率等。原创 2025-01-03 15:55:36 · 528 阅读 · 0 评论 -
千里马2024年终总结-android framework实战
心里焦虑加大了,需要调节好平常心面对创业以来最大感受就是“创业艰难”,原本预想的很美好,终于可以有勇气为了理想和兴趣奋斗了,一定是每天满怀激情的干。实际情况是:当自己的兴趣与谋生的收入挂钩时候,一切变得不那么理想和美好。每天还是会有担心自己课程的销售情况,必然就会有焦虑,这种心态和上班兼职搞完全不是一回事。所以心态上确实是相比以前有焦虑一些,这个部分做的不够好。时间不够用创业初期,也没有很多资金搞团队,大部分工作都落到我的头上,比如一些售前咨询,课程研发录制,答疑服务等。原创 2024-12-31 11:39:24 · 1559 阅读 · 0 评论 -
am trace-ipc使用小技巧之Binder服务端方法systrace打印剖析
大家都知道服务端执行一般是onTransact开始,这里面也可以看到有了相关的trace打印到systrace,但是实际上我们并没有看到有相关的trace有打印。代码中也可以看出线索,这里的Trace打印输出的tag是Trace.TRACE_TAG_AIDL,要这个可以打印出来那么必须要Trace.TRACE_TAG_AIDL是开放的状态。这里的systrace打印跨进程的方法,不是针对所有接口都有哈,一般针对aidl文件实现的接口才有,因为都是会通过aidl工具进行编译时候植入相关trace。原创 2024-12-30 10:47:23 · 807 阅读 · 0 评论 -
framework踩坑:aosp/lineageos系统apk签名导出到as进行使用
ps:这里最重要就是keytool使用的要和android studio对应的jre目录的一致,一定要注意这里的keytool要注意它对应的java版本,如果java版本不对会导致生成的platform.jks无法被android studio编译,会不断报错Invalid keystore format。经常做framework开发或者系统应用开发时候,都会有一个很熟悉的名词“系统签名”,因为有了系统签名才可以有比普通第三方应用更高的权限,很多核心函数才可以进行调用成功等。开发效率的提高,或者本身代码。原创 2024-12-26 20:23:02 · 911 阅读 · 0 评论 -
安卓app/framework开发中meta-data数据剖析作用及实战
meta-data其实无论在普通app开发还是系统开发过程中都是非常重要的,可以在app的AndroidManifest中配置相关的自定义数据,然后在代码中可以获取到AndroidManifest配置的meta-data数据,不仅仅app进程自己可以获取到这个数据,其他进程也可以获取到这个meta-data数据,这样对于系统识别一些Activity特性时候就提供了重要的依据。原创 2024-12-22 22:48:46 · 797 阅读 · 0 评论 -
aosp15上winscope离线html如何使用?
文章中也说明在aosp15如果直接使用编译好的离线html是有问题的,无法正常显示抓取的Winscope文件。针对这样一个问题对于有些同学来说还是很不友好,因为很可能他们不想搭建node相关的环境,那么针对 aosp15上Winscope离线的html是否真的不可以使用呢?不过我们可能不关心原因,因为这块毕竟属于前端的知识,我们更关心应该怎么解决。原创 2024-12-10 23:14:23 · 1012 阅读 · 1 评论 -
请收藏:如何确认uid对应的包名和进程-android系统必学小技巧干货分享
这里面就有这个from uid 10108,即看到uid = 10108,但是这个uid = 10108到底是谁呢?u0_a108 分为两部分,前面u0中的0代表就是userId = 0这个用户,除了0设备还有可能有其他用户比如常见的分身10,后面a108的108就是代表基于10000的累积是108,预先判断uid的值大小,一般普通的apk程序等,uid的值一般大于10000,这种uid大于10000情况确定可以使用直接计算法。那么就用这个108前面加上字符a,即a108去ps -A中进行搜索。原创 2024-12-10 11:36:42 · 849 阅读 · 0 评论 -
如何命令查看安卓设备上多核cpu的大小核情况
近来有学员朋友询问到了一个他做性能优化时候的一个疑问,那就是他不知道自己的手机设备上的一个cpu情况,他想要知道目前的平台哪些是cpu的大核哪些是cpu的小核,问马哥有没有啥命令或者方法进行查看,这样就可以不需要通过问其同事了,每次问都容易忘记,而且每个平台也不一样。一般平时常说的cpu大小核情况,其实说的是cpu一般情况下都是有多个核心的,和我们电脑上cpu是一个情况,但是多核心为了综合性能和功耗上都兼顾,就不能说所有核心都是大核或者小核,一般都是大小核都是共同存在的。cpu的4-7属于大核。原创 2024-12-05 10:28:49 · 1224 阅读 · 0 评论 -
被“边缘化”的程序员应该如何破局??
上面就是程序员在工作过程中遇到“边缘化”的一些情况及如何面对解决“边缘化”问题,总结就是:面对“边缘化”任何时候都不要自暴自弃,一定要积极面对工作,因为你其实为自己工作,你提升自己工作业务能力才是核心,让自己在市场变得更加值钱,自身能力和修为提高了,你才可以不需要担心焦虑在当前公司被“边缘化”。原创 2024-12-03 11:13:02 · 349 阅读 · 0 评论 -
CallStack相关的编译报错undefined symbol正面解决方案
可以看到这里确实在编译InputDispatcher.cpp:356时候发现引入ld不到libutilscallstack库,所以导致无法找到符号表报错,但是明明我们确实cpp编译的bp中加入了相关的libutilscallstack,那这种应该怎么解决呢?注意这里如果模拟器整编还是报错,只能回退再编译,但是可以保存单编译libgui.so覆盖回退的,然后再触发打包既可以。这些编译都不是在编译libgui.so时候报错的,都是编译media相关库才报错的,也就是说其实单独编译libgui是可以成功的。原创 2024-11-26 09:00:00 · 1274 阅读 · 0 评论 -
libgui中的BufferQueueProducer加入堆栈CallStack编译报错问题-大厂企业实战项目难题
这个也就是为啥会报错的原因,那么清楚了原来libstagefright_bufferqueue_helper,libstagefright_bufferqueue_helper_novndk对这个有依赖,那么是否可以直接在这个bp加入 libutilscallstack呢?针对调试和分析某个模块的源码时候,经常需要对某个方法进行堆栈的打印,java相关的代码都没啥问题,大家都可以很正常的打印出来,但是一些native的模块就不是那么顺利了。一看到这些报其实大家可能都一脸懵,不知道为啥会有这种错误。原创 2024-11-23 11:59:23 · 1038 阅读 · 0 评论 -
记录app多年老司机如何快速上岸framework系统工程师-学员投稿
今天特别感谢学员朋友小菜鸡的投稿,该学员朋友前一两个月才找到马哥报名的framework课程,前些天和我报喜说成功找到framework相关的工作,在这里再次恭喜他成果上岸framework工程师,马哥这边特别邀请他给大家分享一些学习framework的经验。下面开始学员朋友的学习framework的经验分享:-----------------------------------------------投稿开始--------------------------------------自己学习frame原创 2024-11-21 12:19:30 · 916 阅读 · 0 评论 -
分享其他简单GMS全家桶预制方案
这个包已经帮我们干了所有的事情,比如预制apk,预制权限xml等,对于我们只需要无脑调用这个目录下的gms-vendor.mk既可以实现gms等整个打包和权限预制。上,文章发布后还是有很多学员朋友纷纷提出更多的更简单的一些方案,在这里也给大家分享一下其他更加简单的两种方案。明显看到这里gms的应用更加多,根本不需要整体预制根本不需要挨个下载apk这种方式,所以这个方法相对更加简单。这种方案就是直接刷入相关人家做好的img,自己基本上没办法来定制,灵活性很差,只能说拿来用的方式。原创 2024-10-24 10:38:50 · 1242 阅读 · 0 评论 -
安卓高级系统工程师必备技能-技术大佬成长必备技能
简单说就是平时负责工作中经常会遇到一个全新的知识模块,这个全新的知识模块可能处于无资料,无人帮助的状态。无资料即互联网上搜索不到任何的内容,公司里面也没有任何文档等,属于全新的一个模块,这种情况其实还不少,比如google某个版本可能新增加了一个新模块,这种当然哪里都找不到资料。无人帮助因为很多时候公司里面就一个人负责一个模块,其他人也不会去深入研究你负责的相关模块,所以新出来的模块公司更不可能有其他人懂了。原创 2024-10-22 09:37:59 · 420 阅读 · 0 评论 -
aosp15上自由窗口入口无法显示aconfig等新知识剖析
这里最后只要可以通过getShortcuts走到底部的Collections.singletonList那就说明可以显示出来,所以这里显示不出来肯定是没有走到底部这个Collections.singletonList,说明是在前面的两个if返回了null,具体哪里返回了?哈哈,到这里大家是不是终于看到熟悉的Properties了,你是不是和马哥一样认为这里其实就是普通的prop,如果这样认为其实就是完全错误的哈,具体这里Properties是啥,这个就有需要了解新版本上使用的类似config机制。原创 2024-10-21 00:53:34 · 959 阅读 · 0 评论 -
android app执行shell命令视频课程补充android 10/11适配-千里马android
hi,有学员在学习跨进程通信专题课程时候,在实战app执行一个shell命令的项目时候,对课程本身的android 8.1平台没有什么问题,但是学员想要自己适配到android 11上,估计也是目前最新的android版本,因为普遍android S厂商都还没有发布,因为android 的大版本升级适配本身工作也不小,这里就对android app执行shell命令这一部分进行一个升级适配的补充,尽量让买课的学员可以直接用于最新的android版本。具体项目代码和详细视频讲解可以购买我的相关视频。原创 2024-10-16 14:39:30 · 991 阅读 · 0 评论 -
安卓系统属性persist类型prop深入剖析
近来学员朋友在群里问道了prop属性值进行持久化存储相关的问题,针对prop大部分情况下都是在代码端进行get获取读取操作,因为很多系统属性都是ro类型的,即不可以修改的,有一些debug可以修改的属性,但修改重启又变成了空,所以有是否可以持久化存储的prop,并且可读可写这种,那么就是今天要讲解的persist属性。可以看到只要是persist.sys. 开头的都是定义为了system_prop,所以system_server进程写入数据等都不需要额外编写,因为直接有的。2、selinux部分。原创 2024-10-09 14:35:10 · 1612 阅读 · 0 评论