1. SystemUI介绍

SystemUI是一个系统应用,主要功能有:
1)状态栏信息显示,比如电池,wifi信号,3G/4G等icon显示
2)通知面板,比如系统消息,第三方应用消息,都是在通知面板显示。
3)近期任务栏显示面板。比如长按主页或近期任务快捷键,可以显示近期使用的应用。
4)提供截图服务。比如电源+音量加可以截图。
5)提供壁纸服务。比如壁纸的显示。
6)提供屏保服务。
7)系统UI显示。比如系统事件到来时,显示系统UI提示用户。
SystemUI源码路径:
frameworks\base\packages\SystemUI

2.Android.mk介绍

frameworks\base\packages\SystemUI\Android.mk
SystemUI属于系统apk,由android编译生成,在学习SystemUI源码前,需要了解其Android.mk,便于进一步熟悉source code。
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := $(call all-java-files-under, src) \src/com/android/systemui/EventLogTags.logtagsLOCAL_STATIC_JAVA_LIBRARIES := Keyguard
LOCAL_JAVA_LIBRARIES := telephony-commonLOCAL_PACKAGE_NAME := SystemUI
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := trueLOCAL_PROGUARD_FLAG_FILES := proguard.flagsLOCAL_RESOURCE_DIR := \frameworks/base/packages/Keyguard/res \$(LOCAL_PATH)/res
LOCAL_AAPT_FLAGS := --auto-add-overlay --extra-packages com.android.keyguardifneq ($(SYSTEM_UI_INCREMENTAL_BUILDS),)LOCAL_PROGUARD_ENABLED := disabledLOCAL_JACK_ENABLED := incremental
endifinclude frameworks/base/packages/SettingsLib/common.mkinclude $(BUILD_PACKAGE)ifeq ($(EXCLUDE_SYSTEMUI_TESTS),)include $(call all-makefiles-under,$(LOCAL_PATH))
endif

从以上Android.mk可以看出:

1)应用编译后的名称:SysemUI
LOCAL_PACKAGE_NAME := SystemUI
2)应用编译后系统路径:/system/pri-app/SystemUI
LOCAL_PRIVILEGED_MODULE := true
说明:
不添加此属性,编译后的路径为/system/app/SystemUI
在同样具有系统权限情况下,/system/pri-app下的apk权限比/system/app下大
3)可以选择性使用JACK编译器
ifneq ($(SYSTEM_UI_INCREMENTAL_BUILDS),)
    LOCAL_PROGUARD_ENABLED := disabled
    LOCAL_JACK_ENABLED := incremental
endif
关于LOCAL_PROGUARD_ENABLED和LOCAL_JACK_ENABLED的解释,可以看下面这篇文章。(计划中@@)

3 AndroidManifest.xml介绍

分析完Android.mk后,接下来进一步分析AndroidManifest.xml。AndroidManifest.xml是apk的配置文件,apk需要的权限,特征以及四大组件,都在这里进行配置。
并且组件的层次结构,也可以大概看出来,便于我们对于源代码的分析。
从AndroidManifest.xml我们可以看出:
1)SystemUI属于系统apk
android:sharedUserId="android.uid.systemui"
2)SystemUI属于核心apk
coreApp="true"
3)SystemUI不会被KILL,即被KILL后会自动重启
android:persistent="true"
这里的KILL主要指不会被low memory killer杀掉
4)进程名是com.android.systemui
android:process="com.android.systemui"
5)对外开放的Service主要有:
<service android:name="SystemUIService"
            android:exported="true"
/>
<service android:name=".LoadAverageService"
                android:exported="true" />
<service android:name=".ImageWallpaper"
                android:permission="android.permission.BIND_WALLPAPER"
                android:exported="true" />
<service
            android:name=".keyguard.KeyguardService"
            android:exported="true"
            android:enabled="@bool/config_enableKeyguardService" />
比较意外的是截图服务居然没有对外开放,看来只有系统进程才可以启动并使用这个服务
<!-- started from PhoneWindowManager
             TODO: Should have an android:permission attribute -->
        <service android:name=".screenshot.TakeScreenshotService"
            android:process=":screenshot"
            android:exported="false" />
6)主要的Activity有:
近期任务栏:
<!-- Alternate Recents -->
        <activity android:name=".recents.RecentsActivity"
                  android:label="@string/accessibility_desc_recent_apps"
                  android:exported="false"
                  android:launchMode="singleInstance"
                  android:excludeFromRecents="true"
                  android:stateNotNeeded="true"
                  android:resumeWhilePausing="true"
                  android:screenOrientation="behind"
                  android:theme="@style/config_recents_activity_theme">
            <intent-filter>
                <action android:name="com.android.systemui.recents.TOGGLE_RECENTS" />
            </intent-filter>
        </activity>
usb debug相关的Activity,比如手机在电脑上插入,手机上的提示框;adb connect到手机,手机授权提示框等。
<!-- started from UsbDeviceSettingsManager -->
        <activity android:name=".usb.UsbConfirmActivity"
            android:exported="true"
            android:permission="android.permission.MANAGE_USB"
            android:theme="@style/Theme.SystemUI.Dialog.Alert"
            android:finishOnCloseSystemDialogs="true"
            android:excludeFromRecents="true">
        </activity>

<!-- started from UsbDeviceSettingsManager -->
        <activity android:name=".usb.UsbPermissionActivity"
            android:exported="true"
            android:permission="android.permission.MANAGE_USB"
            android:theme="@style/Theme.SystemUI.Dialog.Alert"
            android:finishOnCloseSystemDialogs="true"
            android:excludeFromRecents="true">
        </activity>

<!-- started from UsbDeviceSettingsManager -->
        <activity android:name=".usb.UsbResolverActivity"
            android:exported="true"
            android:permission="android.permission.MANAGE_USB"
            android:theme="@style/Theme.SystemUI.Dialog.Alert"
            android:finishOnCloseSystemDialogs="true"
            android:excludeFromRecents="true">
        </activity>

<!-- started from UsbDeviceSettingsManager -->
        <activity android:name=".usb.UsbAccessoryUriActivity"
            android:exported="true"
            android:permission="android.permission.MANAGE_USB"
            android:theme="@style/Theme.SystemUI.Dialog.Alert"
            android:finishOnCloseSystemDialogs="true"
            android:excludeFromRecents="true">
        </activity>

<!-- started from UsbDebuggingManager -->
        <activity android:name=".usb.UsbDebuggingActivity"
            android:permission="android.permission.MANAGE_USB"
            android:theme="@style/Theme.SystemUI.Dialog.Alert"
            android:finishOnCloseSystemDialogs="true"
            android:excludeFromRecents="true">
        </activity>
        <activity android:name=".usb.UsbDebuggingSecondaryUserActivity"
            android:theme="@style/Theme.SystemUI.Dialog.Alert"
            android:finishOnCloseSystemDialogs="true"
            android:excludeFromRecents="true">
        </activity>

亮度调节Activity:
<activity
            android:name=".settings.BrightnessDialog"
            android:label="@string/quick_settings_brightness_dialog_title"
            android:theme="@android:style/Theme.DeviceDefault.Dialog"
            android:finishOnCloseSystemDialogs="true"
            android:launchMode="singleInstance"
            android:excludeFromRecents="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.SHOW_BRIGHTNESS_DIALOG" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
上面大概介绍了SystemUI一些基本的东西,我们阅读源码,也是对SystemUI的主要功能,以及主要的service以及Activity进行分析,熟悉Google的设计思想以及代码架构。

android 6.0 SystemUI源码分析(1)-SystemUI介绍相关推荐

  1. Android 11.0 Settings源码分析 - 主界面加载

    Android 11.0 Settings源码分析 - 主界面加载 本篇主要记录AndroidR Settings源码主界面加载流程,方便后续工作调试其流程. Settings代码路径: packag ...

  2. Android 8.0系统源码分析--Camera processCaptureResult结果回传源码分析

    相机,从上到下概览一下,真是太大了,上面的APP->Framework->CameraServer->CameraHAL,HAL进程中Pipeline.接各种算法的Node.再往下的 ...

  3. Android 8.0系统源码分析--开篇

    个人分类: Android框架总结Android源码解析android framework 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sinat ...

  4. android 8.0 ril.java,Android 8.0 RIL源码分析(一)

    1.去电流程三中跟踪到最后的时候可以看到其调用了RIL的dail方法 这里继续以此分析其从RIL到Modem的流程 @Override public void dial(String address, ...

  5. Android 4.0 Launcher源码分析系列(二)

    原文:http://mobile.51cto.com/hot-314700.htm 上一节我们研究了Launcher的整体结构,这一节我们看看整个Laucher的入口点,同时Laucher在加载了它的 ...

  6. android 8 ril,Android 8.0 RIL源码分析(二)

    非URC消息处理 之前分析到在at_send_command_full_nolock调用后会先发送消息给modem,然后阻塞当前线程等待modem返回消息. 因此也是在readerLoop的消息处理中 ...

  7. android 蓝牙扫描流程,Android 9.0 Bluetooth源码分析(二)蓝牙扫描流程

    1 UI 蓝牙开始扫描位于setting的 /packages/apps/Settings/src/com/android/settings/bluetooth/BluetoothPairingDet ...

  8. Android 系统(78)---《android framework常用api源码分析》之 app应用安装流程

    <android framework常用api源码分析>之 app应用安装流程 <android framework常用api源码分析>android生态在中国已经发展非常庞大 ...

  9. Android录音下————AudioRecord源码分析

    Android录音下----AudioRecord源码分析 文章目录 Android录音下----AudioRecord源码分析 一.概述 1.主要分析点 2.储备知识 二.getMinBufferS ...

最新文章

  1. 安卓自动化测试(1)安卓自动化测试原理概念
  2. noip模拟赛 Chtholly Nota Seniorious
  3. c++ list容器获取第n给元素_深入Python(17)-List 的 append 和 pop
  4. idea pom依赖失败_IDEA中Maven依赖下载失败的完美解决方案
  5. oracle 取英文排序,Oracle中中文、数字,英文混杂形式的字段进行排序的方法
  6. Flutter Duration详细概述
  7. 苹果6换屏多钱_iphone12换屏多少钱 苹果12/12pro换屏幕官方价格报价
  8. 阶段3 1.Mybatis_03.自定义Mybatis框架_5.自定义Mybatis的编码-创建两个默认实现类并分析类之间的关系...
  9. 网件R6220路由器刷机失败 路由器变砖恢复
  10. 初高级分析师的能力和工具体系,指标雷达图!
  11. grep 多条件并行满足_grep多个条件
  12. 哪些业务需要使用CDN加速服务?
  13. 椭圆是一个凸集的证明
  14. AD19-DRC检查
  15. Android12之OpenSL ES中IObject_GetInterface获取引擎接口(十五)
  16. 免费使用GPU服务器
  17. vue 后台翻译_vue国际化 自动百度翻译,优先本地语言库
  18. iOS微信聊天记录迁移时报错:当前网络状况复杂
  19. 工控服务器什么作用,服务器与工控机的用处和区别在哪?
  20. Github初使用 (简单项目搜索;watch、star、fork)

热门文章

  1. 干货!Python操作PDF的神器——PyMuPDF
  2. 服务器重启django项目
  3. 诚信迎考 计算机考试主题班会策划,诚信考试主题班会策划书
  4. STM32_3 时钟初始化分析
  5. Linux磁盘分区并永久挂载
  6. 美国J1签证面签需要准备哪些材料?
  7. 判断英伟达显卡计算力及是否支持FP16和INT8
  8. [Render] Arm Graphics Analyzer 用户指南 [4] - 分析你的捕获
  9. 自适应滤波器设计及matlab实现,自适应滤波器设计及Matlab实现附程序代码
  10. 北京CBD核心区有哪些值得加入的科技公司