更新时间:2025 09 04 16:21:38 作者 :庆美网 围观 : 39次
很多朋友对于activitymanager(activitymanagerservice 启动进程(3))和不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
Root虽然给用户带来更多自由,却也让设备的安全性大幅下降。Root设备存在诸多潜在风险:黑客可能利用Root设备的漏洞提升权限,实现对设备的全面控制;设备可能绕过操作系统或第三方应用的安全措施,禁用安全功能,逃避检测;攻击者还能修改系统文件,导致设备崩溃或出现异常行为。
对于开发者而言,Root检测是一场与黑客的持续博弈。黑客们不断研发工具,通过注入恶意代码来绕过特定应用的Root检测机制。而安全专家们则需不断更新Root检测技术,这是对抗Root绕过工具的关键。通过持续提升Root检测技术和完善安全策略,我们才能更好地保护用户,构建安全可信的数字环境。
Root检测技术手段
1. 检查已安装的APK包:SuperSU应用程序、一键root程序(如One Click Root、iRoot、360一键root、kingroot )等,这些常用于获取Root权限的程序是检测重点。还有需要root权限才能使用功能的应用程序,如busybox 、SetCPU、Titanium Backup;以及隐藏设备是否已Root的应用程序,像Root Cloaker、Root Cloaker Plus ;提供API挂钩功能的库,例如Cydia Substrate、Xpose Framework ,这些都可能成为检测已安装APK包时的判断依据。
2. 检查已安装的文件:静态路径方面,/ system / xbin / su,/ system / bin / su或/system/xbin/…/xbin/su等路径下的文件,以及/ system / xbin / busybox和BusyBox创建的命令的所有符号链接都在检查范围内。同时,生根期间或生根后安装的热门应用程序包在/ data / app / 或/ system / app / 下的文件也会被检查。动态路径检查则是解析PATH变量,在每个条目后附加“/ su”,然后在循环中打开每一个进行查看。此外,检查BUILD标签,来自Google的股票Android图像使用“release-keys”标签构建,若出现“测试密钥”,则可能意味着Android映像是开发人员构建或非官方构建,该值来自“ro.build.tags” 。
3. 检查目录权限:Root会使某些根文件夹可读(如/ data)或可写(如/ etc,/ system / xbin,/ system,/ proc,/ vendor / bin等)。检测时可以运行mount命令检查是否有设备使用“rw”挂载标记,或者尝试在“/ system”或“/ data”文件夹下创建文件。也可以尝试使用命令“ mount -o remount,rw / system ” 挂载“/ system”分区,然后检查返回码来判断。
4. 检查流程/服务/任务:利用ActivityManager.getRunningAppProcesses方法返回的当前正在运行的应用程序进程列表,判断是否有需要root权限的应用程序正在运行。还可以通过getRunningServices或getRunningTasks获取当前正在运行的服务或任务进行分析。另外,使用Shell命令也是常见手段,例如ps | grep 列出当前正在运行的进程;ls – 检查文件系统中是否存在文件;pm path输出目标包的完整路径;cat /system/build.prop或grep ro.build.tags检查是否= release-keys(该测试仅作参考指标);通过“ ro.modversion ”识别某些自定义Android ROM(如CyanogenMod) 。
5. 检查系统属性:若ro.secure = 0 ,意味着adb shell将以root用户身份运行,而非shell用户;当ro.debuggable = 1或service.adb.root = 1时,adb也将以root身份运行。开源工具rootbeer可用于查看是否运行在root环境。
尽管有这些检测技术,但它们也并非无懈可击,黑客们可以通过功能挂钩或自定义构建Android ROM等方式绕过检测。在这场安全与破解的较量中,Root检测技术的发展至关重要,关乎着每一位用户的信息安全和设备稳定。大家在享受手机便捷的同时,也要时刻警惕Root带来的风险,守护好自己的数字生活。
上篇文章写到 Service 的启动过程;相对来说Activity的启动过程比Service的启动过程更为复杂,其一Activity的生命周期方法比Service多,其二Activity具有启动模式和返回栈;写本文的目的在于更清晰的梳理Activity的启动过程,加强自己的内功修炼,博客粉丝日益增多,力在以最简单的方式让大家理解,跟大家一起学习
Activity的启动有多次IPC过程,所以Binder属于预备知识,帮助我们更好理解系统的C/S的这种架构模式
一般Android各个应用进程的启动都以这样一条路线,init进程 –>Zygote进程 –>SystemServer进程 –>各种应用进程
由此可知应用的第一个Activity的启动是多个进程相互配合的结果,多个进程相互配合就少不了使用Binder进行IPC了,现在看一次IPC调用的过程是怎样的。
上图大概说明了一次IPC的过程,或许你现在对里面各个类还不是很清楚,没关系,大致了解一下
ActivityManagerService(下文简称AMS),AMS是Android中最核心的服务,实现了ActivityManager,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,AMS提供了一个ArrayList mHistory来管理所有的Activity,Activity在AMS中的形式是ActivityRecord,Task在AMS中的形式为TaskRecord,进程在AMS中的管理形式为ProcessRecord,它在Android中特别重要
ActivityManagerNative(下文简称AMN):由于AMS是系统核心服务在SystemServer进程里面,很多API不能直接开放供客户端使用,所以需要通过IPC的方式,具体是这样的,ActivityManager类内部调用AMN的getDefault函数得到一个ActivityManagerProxy对象,通过它可与AMS通信
ActivityManagerProxy(下文简称AMP):AMP是AMS在客户端进程的一个代理,通过AMP里面的方法请求AMS
Instrumentation: Instrumentaion是一个工具类,一个大管家。当它被启用时,系统先创建它,再通过它来创建其他组件;另外,系统和组件之间的交互也将通过Instrumentation来传递,这样,Instrumentation就能监测系统和这些组件的交互情况了。在实际使用中,我们可以创建Instrumentation的派生类来进行相应的处理。Android中Junit的使用到了Intrstrumentation
OK,现在我们知道,Activity是如何向AMS发出startActivity这个请求了,这意味着Activity可以与AMS进行通信,但是AMS却不能与Activity通信,Binder是单向的,所以在Activity发出请求之后,AMS需要通知Activity发生状态改变,要做到这一点,自然就在AMS到Activity这个过程建立一个Binder,如下:
大致过程就是,SystemServer进程在收到请求后,再通过IPC向应用进程发送scheduleLaunchActivity请求,应用进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息,主线程在收到Message后,创建目标Activity,并回调Activity.onCreate()等方法
对上面的理解不是太明白,在看下面这张图,简单多了;AMS到Activity这个过程建立了一个Binder,Activity到AMS这个过程也建立了一个Binder,这就能相互通信了
上图就是Activity与AMS之间的双向Binder连接,(备注:这个就是理解Activity启动流程的指南针,不记住这个,复杂的启动流程会让你晕头转向);Activity用IActivityManager提供的API向AMS提出执行某个动作的请求(本例中是启动RemoteService),AMS通过IApplicationThread提供的API来控制Activity所在的应用程序,这些API包括schedulePauseActivity()、scheduleStopActivity()等
IActivityManager接口定义的API,启动四大组件的等多种请求都在里面
IApplicationThread接口定义的API,一看就比IActivityManager高一点,IActivityManager好多方法是start开头,表示去AMS请求,IApplicationThread以schedule开头,表示对Activity进行调度
分析到这里,我们不知不觉间忽略了两个问题,那就是启动Activity至少需要两个前提
第一是,应用进程存在,第二AMS已经初始化完毕;在调用startActivity方法时候,如果我们的应用进程不存在,Activity能启动吗,当然是不能的,比如点击桌面图标的时候,这个时候需要先创建进程。关于Zygote孵化应用进程,这个暂时不说,先看看AMS服务注册
先忽略 Activity调用ActivityManagerService启动应用,直接从SystemServer的main方法说起
run方法中,调用了startBootstrapServices
继续
回到 startBootstrapServices里面调用的 mActivityManagerService.setSystemProcess();
ServiceManager这里面注册了很多的服务,可通过dumpsys<服务名>命令查看。比如查看CPU信息命令dumpsys cpuinfo,查看graphics信息命令dumpsys gfxinfo
在Android中所有的核心服务,并不是直接给上层使用,都先交给ServiceManager管理,上层使用的时候可以从ServiceManager获取,ServiceManager相当于一个路由作用。现在来看一张经典的图。其中注册服务,获取服务以及使用服务,每一次都是一个完整的Binder IPC过程,可见理解Binder是多么的重要啊。关于AMS启动得深入了解
有需要文章中完整代码的同学:现在私信发送 “底层源码” 即可免费获取
现在私信发送 “进阶” 还可以获取《更多 Android 源码解析+核心笔记+面试真题》
最后我想说:
学习没有捷径可言,我们要注意记学习,不仅要记,还要写心得体会,文字笔记、画图、总结等,方式很多,但是一定要自己认真去做,不要太相信自己的记忆,只有反复记忆,加深理解才行
同时,对于程序员而言,不单单是死记硬背,我们有更好的方式去学习,比如写demo去验证。复习知识点时,要及时跟你做过的项目结合起来,这样在面试时就知道怎么聊了,由项目讲到知识点,由一个知识点串联到另一个知识点。复习到一定阶段,可以尝试着去把这些东西串联起来,由点及面,形成知识体系
对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们
技术是无止境的,你需要对自己提交的每一行代码、使用的每一个工具负责,不断挖掘其底层原理,才能使自己的技术升华到更高的层面
Android 架构师之路还很漫长,与君共勉
本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:值友已删除
大家好,我是热爱分享的值友已删除,作为一个有一丢丢强迫症的人,我平时特别讨厌看到各种开机、弹窗广告,所以对自己的手机、电脑、投影仪等设备都进行了设置,用起来舒服多了。今天就给大家分享一下具体的操作思路,有时间折腾的可以参考一下,一个是电视端关闭广告,还有一个是直接从路由器端屏蔽弹窗。
这个方法适合大多数电视,可以有效管理内置广告,需要借助ADB工具,不过操作不难。
首先我们需要进入电视的开发者选项,开启电视的ADB调试。不同电视的进入方法不同,大部分电视都是选中关于电视的版本号,持续按遥控器的OK键就可出现开发者选项,也可以根据电视的品牌型号在网上搜索方法。
开启ADB调试后,在电视端安装\”WiFiADB\”和“包名查看”,这两个当贝应用市场里面就有,很方便。
打开WiFiABD之后电视会显示连接命令,先记住电视的IP,后面要用。
继续打开“包名查看”,记下广告app的名字,还有自动更新的app,还可以顺便把机器自带的垃圾app也顺便记住,一起处理。
判别广告应用的方法是名字里有广告或者“ad”的,开头都是“com”。
接着在电脑上安装ADB工具,网上有很多下载途径,直接搜“ADB工具即可”。
安装成功后按win+r输入cmd打开命令行,切换到ADB的目录,CD 你的abd目录路径,比如:CD C:xiaomiadb.
继续通过ADB命令连接电视,方法是在命令行里输入:abd connect 电视IP。如果显示connected to ……就是你已经连上了。
连接成功就可以通过ADB命令删除记录的广告包名。需要输入指令:
abd uninstall XXXXX(即包名),删除成功会显示“succuss”。
完成之后断开连接,然后重启电视即可。看着复杂实际很简单,关键在于识别广告包名。下面是一些常用ADB命令,也可以在网上找更全面的,直接复制就行。
adb devices查看连接计算机的设备
adb install
adb install-r
adb install-s
adb uninstall
adb uninstall-k
adb logcat查看logadb logcat-c清空日志
adb logcat*:E>D:log.txt输出到某文件
adb logcat ActivityManager:l*:s查看应用包名
除了通过电脑清理电视的广告包,还可以直接通过路由器屏蔽广告,不再像电脑安装插件,只对单台设备有用,连接这个路由器的所有设备都有效。
这个方法稍微有些复杂,需要用到OpenWrt路由器和AdGuard Home。
OpenWrt是一个开源的路由器系统,支持第三方插件安装,智能路由器都是基于OpenWrt进行开发,功能相当强大。
AdGuard Home能够运行在 Windows,macOS,Android,iOS 设备上,并且还支持浏览器插件安装,非常方便,直接安装在路由器里就不必再单台设备逐一安装了。
首先我们需要给路由器刷OpenWrt系统,或者直接买一台OpenWrt路由器也行。
在刷机之前我们需要检测路由器是否支持刷机,不同路由器的刷机方式略有不同,可以直接在网上找详细教程,这里就不进行说明了。
如果是第一次刷机,可以看看是否有对应的已经内置了AdGuard Home的OpenWrt刷机包,有的话可以直接刷,如果没有的话可以另外安装,只是步骤会多一些。
先下载AdGuard Home luci插件(网上可以找)。
下载完成后我们需要将ipk文件上传到路由器进行安装,可以用opkg命令行安装,也可以通过web页面进行安装,web页面要简单一点,点击菜单系统找到文件传输选择ipk文件上传,上传成功后直接安装即可。
安装成功后就可以在菜单的服务中看到AdGuard Home了,然后在页面上点击\”更新核心版本\”进行更新,如果更新不成功或者很久没反应,可以尝试强制更新,在安装过程中确保路由器联网
更新完成后刷新页面,然后进行最后一步,配置AdGuard Home页面的管理密码。
在最下方的下拉框中选择 “改变网页登陆密码“ 并点击添加,这样页面中会出现密码计算工具,用于生成密码串,该密码串需要写入到AdGuard Home配置文件中,用于web登陆。
输入密码为password,点击计算,复制生成加密的密码串。
继续点击手动设置, 找到配置中的password,替换值为上面复制的内容(加密密码)
点击启用,并选择5553重定向模式为 “作为dnsmasq的上游服务器”模式,然后保存并应用。
接着在lean的openwrt固件中删掉iptables自定义规则,防止规则AdGuard Home的影响。
以上就是屏蔽电视广告的两个方法,大家可以根据自己的需要选择用哪一种,第二个路由器屏蔽广告覆盖范围更大,不过刷固件会比较麻烦,需要花点时间折腾。
以上就是关闭广告的操作,我自己也是参考了很多教程的,这篇文章对相关步骤进行了梳理,希望对大家有所帮助,如果想获取更多实用干货,可以点击值友已删除关注我,我会持续为大家创作优质内容,感谢支持
作者声明本文无利益相关,欢迎值友理流,和谐讨论~
如果你还想了解更多这方面的信息,记得收藏关注本站。
据消息人士称,该出售程序由高盛集团管理,有包括VistaEquityPartnersManagementLLC(以下简称“VistaEquity”)、凯雷投资集
大多数智能手机,无论是Android还是iOS,都具有内置的画廊应用程序。对于Android用户,画廊应用程序通常位于手机的主屏幕或应用程序抽屉中。图标上经常有
Root虽然给用户带来更多自由,却也让设备的安全性大幅下降。Root设备存在诸多潜在风险:黑客可能利用Root设备的漏洞提升权限,实现对设备的全面控制;设备可能
该广告出现于Snapchat的“黑色星期五”主题Story合集,该Story汇集了用户发布的与该购物节相关的照片和视频。Snapchat目前也为其它的活动(演唱
首先,您需要检查路由器的位置。如果将路由器放置在房间的角落或墙壁附近,则可能会影响信号的传输。尝试将路由器放置在房间的中心或更高位置,以便可以更好地传输到整个房
一、国家外汇管理局及其分支局(以下简称外汇局)通过国家外汇管理局应用服务平台外汇局端(http://100.1.48.51:9101/asone)访问系统,各托
用户评论
这篇文章说得真到位!我一直在困扰这个问题,终于找到了答案。学习了ActivityManagerService的启动机制,感觉对Android的底层原理理解更深了。
有8位网友表示赞同!
我也遇到过类似问题,有时候一个 ऐप重启了又莫名其妙地被杀死,现在明白原来是和activity manager有关!
有12位网友表示赞同!
写的详细 banget! 以前就听说过ActivityMangerService这个东西,但没有深入了解,现在看了这篇博客文章,终于明白了它的工作原理。非常感谢作者!
有20位网友表示赞同!
我感觉这篇文章有点过于专业,对于入门者来说不太容易理解。<br> 希望能提供一些更通俗易懂的解释或示例。
有15位网友表示赞同!
启动进程?这个设定听起来很复杂的样子... 我还是比较喜欢简单直接的操作方式,希望还有文章介绍更直观的管理方式!
有7位网友表示赞同!
对于Android系统开发人员来说,理解ActivityManagerService非常重要,这篇文章讲解得很好,很有帮助!
有9位网友表示赞同!
之前一直不知道activitymanagerservice启动进程这个细节,读完这篇文章后对Android的底层机制有了更清晰的认知。感谢作者分享!
有12位网友表示赞同!
这篇文章内容很干货,但缺少一些实践案例,希望能提供更多代码示例帮助理解。
有17位网友表示赞同!
我感觉文章没有重点突显,很多地方都只是简单的介绍,并没有深入分析activitymanagerservice启动进程背后的原因和机制。
有16位网友表示赞同!
对于学习Android开发的人来说,这篇文章是一份宝贵的信息!让我对ActivityManagerService有了更全面的认识!
有11位网友表示赞同!
这个文章的标题有点吓人啊... 感觉自己要进军战场一样... 希望后续可以介绍一些实用的技巧和案例。
有11位网友表示赞同!
我需要快速了解activitymanagerservice怎么运作! 这篇文章虽然是基础知识,但对我来说足够了,感谢作者!
有14位网友表示赞同!
希望以后能看到关于如何调试和优化ActivityManagerService的文章,可以帮助我们更好地控制Android应用的资源消耗!
有17位网友表示赞同!
这篇文章让我对ActivityManagerService有了基本的了解,接下来我会继续深 Dive 这个领域!
有15位网友表示赞同!
我刚开始学习Android开发,这篇博客文章对我的理解非常有帮助,特别是关于启动进程的部分,之前一直不懂为什么会有这种情况。
有8位网友表示赞同!
文章写的很详细和全面,把ActivityManagerService的各个方面都涵盖了,非常值得一读!不过,对于一些高级的概念还是需要搭配其他的资料学习才能完全理解。
有7位网友表示赞同!
感觉这个标题有点绕,如果能改成更直观的表达会更好吸引读者,比如“Android进程管理基础:ActivityManagerService”。
有12位网友表示赞同!
我更喜欢用工具来管理进程,希望文章可以介绍一些常用的管理工具,以及如何使用它们来查看和控制 ActivityManagerService 的行为。
有12位网友表示赞同!
感谢作者分享这篇干货满满的文章!学习了之后感觉自己对Android系统有了更深入的理解,希望能看到更多类似的文章!
有16位网友表示赞同!