`
quanminchaoren
  • 浏览: 923074 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android SafeMode 解析

阅读更多
android系统,通常按住MENU键开机,会安全模式进入系统。安全模式下,所有的第三方应用服务,不会自动运行,也不会收到广播。如果明确指定第三方的component name 还是可以运行的。


2.1代码位置:

frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java

收索SAFE MODE 这个tag会看到相关代码。


现分析如下:

步骤:在开机动画时,按住MENU键(或者字母S键,方向键的中间键,轨迹球按键中的一个)直到开机,会进入安全模式。

得到log如下:

I/WindowManager(  101): SAFE MODE ENABLED (menu=1 s=-1 dpad=-1 trackball=-1)

现象:在机器左小脚显示“安全模式”。

源码

2.3版本:frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

2291     public boolean detectSafeMode() {
2292         try {
2293             int menuState = mWindowManager.getKeycodeState(KeyEvent.KEYCODE_MENU);
2294             int sState = mWindowManager.getKeycodeState(KeyEvent.KEYCODE_S);
2295             int dpadState = mWindowManager.getDPadKeycodeState(KeyEvent.KEYCODE_DPAD_CENTER);
2296             int trackballState = mWindowManager.getTrackballScancodeState(BTN_MOUSE);
2297             mSafeMode = menuState > 0 || sState > 0 || dpadState > 0 || trackballState > 0;
2298             performHapticFeedbackLw(null, mSafeMode
2299                     ? HapticFeedbackConstants.SAFE_MODE_ENABLED
2300                     : HapticFeedbackConstants.SAFE_MODE_DISABLED, true);
2301             if (mSafeMode) {
2302                 Log.i(TAG, "SAFE MODE ENABLED (menu=" + menuState + " s=" + sState
2303                         + " dpad=" + dpadState + " trackball=" + trackballState + ")");
2304             } else {
2305                 Log.i(TAG, "SAFE MODE not enabled");
2306             }
2307             return mSafeMode;
2308         } catch (RemoteException e) {
2309             // Doom! (it's also local)
2310             throw new RuntimeException("window manager dead");
2311         }
2312     }

要把safe mode禁止掉,把mSafeMode赋值为false即可。

SystemServer 会在启动过程中,启动所有服务,然后检测是否是安全模式,如果是则通知ActivityManagerService进入安全模式,ActivityManagerService又通知PackageManagerService进入安全模式,然后在左下角显示一个“安全模式”的文字。PackageManagerService进入安全模式,仅仅是设置了mSafeMode这个局部变量。
安全模式对PackageManagerService的影响:
在获得Persistent应用的时候如果是安全模式,则只返回SystemApp。
在解析ContentProvider的时候,如果是安全模式,只有制定的provider是系统自带的才能解析。
总的来说,如果PackageManagerService处于安全模式下,只有ApplicationInfo.FLAG_SYSTEM的组件才会返回。

设置了persistent标志的应用会在ActivityManagerService执行systemReady的时候,由AM来启动。
如果进入了安全模式,即使设置类persistent标志的第三方应用也不会启动。


launcher在加载桌面的时候,会通过AMS来获得判断是否是SafeMode。

安全模式对广播的影响,AMS最终会通过PM来获得广播的接收着,AppGlobals.getPackageManager().queryIntentReceivers
mReceivers.queryIntent()
mReceivers的类型是ActivityIntentResolver
这个类在解析receivers的最后,会调用newResult,这个函数会判断安全模式下,如果不是系统的应用,会排除在外。


按键值参考:

参考:

http://developer.android.com/reference/android/view/KeyEvent.html
分享到:
评论

相关推荐

    安全模式修复文件safemode

    安全模式修复文件,通过注册表。安全模式修复文件,通过注册表。

    safemode.slog

    safemode.slog

    2015Sample Source Code 1D SAFE_半解析有限元_各向异性波_波有限元法_半解析_有限元波_源码.zi

    标题中的“2015Sample Source Code 1D SAFE”表明这是一个2015年的示例源代码,可能是一个教学或研究项目,专注于一维安全分析。关键词“半解析有限元”、“各向异性波”、“波有限元法”以及“源码”揭示了这个项目...

    ipad提示“exit safe mode”怎么办.docx

    iPad提示“exit safe mode”是用户在使用iPad时可能会遇到的一种情况。这通常意味着设备进入了安全模式,一种专为解决软件冲突或系统问题而设计的特殊运行状态。下面我们将详细探讨这个问题的原因以及如何解决。 一...

    2015Sample Source Code 1D SAFE_半解析有限元_各向异性波_波有限元法_半解析_有限元波

    标题 "2015Sample Source Code 1D SAFE_半解析有限元_各向异性波_波有限元法_半解析_有限元波" 涉及的是一个关于使用半解析有限元法来处理各向异性介质中波动力学问题的示例源代码。这个项目可能是一个研究或教学...

    嵌入式Linux 的safe mode 设计与实现

    在嵌入式Linux系统设计中,`safe mode`(安全模式)是一个至关重要的特性,它允许设备在遇到问题时能够以一种受控的方式启动,从而帮助用户或维护人员诊断和修复系统故障。本文以一个嵌入式Linux网络播放器为例,...

    安全模式

    “工具”标签可能指的是用于进入或处理安全模式的相关工具,比如ADB(Android Debug Bridge),这是一个开发者工具,可以用来与Android设备进行通信,包括在安全模式下进行调试或操作。 【详细知识点】: 1. 安全...

    网页防火墙 SafeMode

    相信很多上网的人,都有过这样的经历: 装了 杀毒软件, 防火墙,但在浏览网页时,还是会经常卡在某个网站上,网页一片空白,成为假死状态,这些8 0%都是恶意网站造成! 安全浏览,完全可以解决这些问题,上网不会再卡,...

    android 日常总结

    在"android rilj sms safe mode"这个主题中,我们主要探讨的是Android系统中如何在安全模式下处理rilj和sms相关的问题。首先,让我们深入了解rilj的工作原理。rilj是Android与基带之间的桥梁,它实现了操作系统与...

    Tumblr | Safe Mode Off-crx插件

    跳过所有“安全模式”警告并全屏显示博客 自动跳过所有“可能包含敏感媒体”的Tumblr博客警告-并全屏显示博客(而不是默认的半屏)。 支持语言:English

    Safe-source-1.2.9.zip_android_android encryption_android private

    针对这一需求,Android平台推出了一款名为"Safe-source-1.2.9"的程序,旨在为用户提供安全的敏感数据加密服务,保护用户的隐私信息不被非法获取。 该程序专为Android手机设计,其核心功能是数据加密,主要服务于...

    fastJson依赖jar包

    7. **兼容性**:Fastjson兼容Java SE和Java EE环境,同时也支持Android平台,为移动开发提供便利。 在实际应用中,开发人员通常会将`fastjson.jar`包添加到项目的类路径中,以便在项目中直接调用其提供的API。例如...

    阿里技术分享 Android中的应用程序沙箱 共30页.pptx

    Android 平台还提供了多种安全机制,如 System Partition and Safe Mode、Filesystem Permissions、Filesystem Encryption、Password Protection、Device Administration、Memory Management Security Enhancements...

    VR_specializp_java_safe9fi_android_Android编程vr_

    "safe9fi"可能是一个拼写错误或者是项目中的特定术语,但在常规语境下,"safe"可能代表安全性,强调了程序在处理敏感数据或操作时的安全措施。在Android开发中,确保用户数据安全和防止内存泄漏等安全问题是至关重要...

    PHP safe_mode开启对于PHP系统函数有什么影响

    safe_mode是提供一个基本安全的共享环境。 在一个多用户共享的phpweb服务器上,当这台服务器开启了safe_mode模式,有以下函数将会受到影响。 首先,以下尝试访问文件系统的函数将会被限制,运行服务器的用户id,如果...

Global site tag (gtag.js) - Google Analytics