Keyguard 和 SystemUI
来源:互联网 发布:淘宝无法用网银支付 编辑:程序博客网 时间:2024/06/05 02:15
Keyguard的代码路径如下: \frameworks\base\packages\Keyguard
Android系统中的各个功能模块、应用,都是根据各个模块下的Android.mk文件中的内容,在Android的编译环境下生成指定的静态库、动态库、APK文件等,那Keyguard模块下的Android.mk文件又是怎样的呢?到底会生成怎样的文件类型呢?那我们就看看Keyguard中的Android.mk文件吧
Keyguard中的Android.mk文件
- LOCAL_PATH:= $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-subdir-Iaidl-files)
- LOCAL_MODULE := Keyguard
- LOCAL_CERTIFICATE := platform
- LOCAL_JAVA_LIBRARIES := SettingsLib
- LOCAL_PRIVILEGED_MODULE := true
- LOCAL_PROGUARD_FLAG_FILES := proguard.flags
- LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
- include $(BUILD_STATIC_JAVA_LIBRARY)
- #include $(call all-makefiles-under,$(LOCAL_PATH))
从Android.mk文件的描述的 include $(BUILD_STATIC_JAVA_LIBRARY),我们知道,Keyguard并没有被编译成一个APK文件,而是被编译成了一个Java静态库。既然Keyguard被编译成静态库,那这个静态库在哪里被使用呢?那我们去看看Keyguard中的AndroidManifest.xml中有没有线索呢?
Keyguard的AndroidManifest.xml
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.keyguard"
- android:sharedUserId="android.uid.systemui"
- coreApp="true">
- <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="17"/>
- <uses-permission android:name="android.permission.VIBRATE" />
- <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
- <uses-permission android:name="android.permission.GET_ACCOUNTS" />
- <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
- <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
- <uses-permission android:name="android.permission.WAKE_LOCK" />
- <uses-permission android:name="android.permission.STATUS_BAR" />
- <uses-permission android:name="android.permission.DEVICE_POWER" />
- <uses-permission android:name="android.permission.MANAGE_USERS" />
- <uses-permission android:name="android.permission.MANAGE_APP_TOKENS" />
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
- <uses-permission android:name="android.permission.BIND_APPWIDGET" />
- <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />
- <uses-permission android:name="android.permission.BIND_DEVICE_ADMIN" />
- <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" />
- <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
- <uses-permission android:name="android.permission.ACCESS_KEYGUARD_SECURE_STORAGE" />
- <uses-permission android:name="android.permission.TRUST_LISTENER" />
- <uses-permission android:name="android.permission.USE_FINGERPRINT" />
- <application android:label="@string/app_name"
- android:process="com.android.systemui"
- android:persistent="true"
- android:supportsRtl="true">
- </application>
- </manifest>
至此,可以看到,Keyguard的AndroidManifest.xml有两个地方比较特殊,如下:
- android:sharedUserId="android.uid.systemui"
- android:process="com.android.systemui"
这两句是什么意思呢?分别是:
- Keyguard使用了共享的用户ID是android.uid.systemui。
- Keyguard运行在com.android.systemui进程中,而不是运行在自己的运程中。
通过这两行的定义,都提到了SystemUI,那我们就到SystemUI中看看有没有关于Keyguard的信息呢?
我们还是先看看SystemUI工程目录下的Android.mk文件吧。
SystemUI的Android.mk
- LOCAL_PATH:= $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE_TAGS := optional
- LOCAL_SRC_FILES := $(call all-java-files-under, src) \
- src/com/android/systemui/EventLogTags.logtags
- LOCAL_STATIC_JAVA_LIBRARIES := Keyguard
- LOCAL_JAVA_LIBRARIES := telephony-common
- LOCAL_PACKAGE_NAME := SystemUI
- LOCAL_CERTIFICATE := platform
- LOCAL_PRIVILEGED_MODULE := true
- LOCAL_PROGUARD_FLAG_FILES := proguard.flags
- LOCAL_RESOURCE_DIR := \
- frameworks/base/packages/Keyguard/res \
- $(LOCAL_PATH)/res
- LOCAL_AAPT_FLAGS := --auto-add-overlay --extra-packages com.android.keyguard
- ifneq ($(SYSTEM_UI_INCREMENTAL_BUILDS),)
- LOCAL_PROGUARD_ENABLED := disabled
- LOCAL_JACK_ENABLED := incremental
- endif
- include frameworks/base/packages/SettingsLib/common.mk
- include $(BUILD_PACKAGE)
- ifeq ($(EXCLUDE_SYSTEMUI_TESTS),)
- include $(call all-makefiles-under,$(LOCAL_PATH))
- endif
在SystemUI的Android.mk文件中,我们可以到到,SystemUI使用了Keyguard的资源,定义如下:
LOCAL_STATIC_JAVA_LIBRARIES := Keyguard
LOCAL_RESOURCE_DIR := \
frameworks/base/packages/Keyguard/res \
从上面的定义可以知道,SystemUI引入了Keyguard静态库和Keyguard模块下的res资源文件,最后,SystemUI被编译成了一个APK文件,作为一个单独的应用运行。
根据上面所介绍的,我们已经知道了Keyguard是依赖于SystemUI而存在的,且Keyguard的sharedUserId是android.uid.systemui,运行在com.android.systemui进程中,那我们再看看SystemUI的AndroidMenifest.xml的定义又是怎样的呢?会不会使用了和Keyguard相同的sharedUserId呢?SystemUI是不是也运行在了com.android.systemui进程中呢?
SystemUI的AndroidMenifest.xml
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
- package="com.android.systemui"
- android:sharedUserId="android.uid.systemui"
- coreApp="true">
- ......
- <application
- android:name=".SystemUIApplication"
- android:persistent="true"
- android:allowClearUserData="false"
- android:allowBackup="false"
- android:hardwareAccelerated="true"
- android:label="@string/app_label"
- android:icon="@drawable/icon"
- android:process="com.android.systemui"
- android:supportsRtl="true"
- android:theme="@style/systemui_theme">
- ......
- </application>
- </manifest>
SystemUI的AndroidMenifest.xml定义了很多权限、Activity、Service、Receiver相关的,在此省略掉了,我们只关心sharedUserId和process是怎样的。SystemUI的sharedUserId和process分别是android.uid.systemui、com.android.systemui,与Keyguard中定义的是一样的,而SystemUI的包名又是:com.android.systemui,从这也就说明了,SystemUI运行在自己的进程中,Keyguard也一起运行在SystemUI当前的运行进程中。
总结:
1. Keyguard被编译Java静态库。
2. Keyguard编译成的Java静态库在SystemUI中引入,做为SystemUI的一部分了。
- Keyguard 和 SystemUI
- Andorid SystemUI, StatusBar, Keyguard
- keyguard
- Keyguard
- SystemUI
- SystemUI
- launcher3桌面阴影和systemUI阴影
- systemUI与Launcher和Home的区别
- Android系统应用---SystemUI之一:SystemUI概述和创建启动流程分析
- SystemUI之功能介绍和UI布局实现
- SystemUI之功能介绍和UI布局实现
- Android之SystemUI加载流程和NavigationBar的分析
- 如何修改状态栏Statusbar(SystemUI)图标和字体颜色
- Android7.0 SystemUI StatusBar和Notification代码浅析
- SystemUI 7.0学习笔记二-状态栏和导航栏
- [RK3288][Android6.0] SystemUI加载过程(状态栏和导航栏)
- SystemUI之功能介绍和UI布局介绍
- android systemui
- C++如何定义多个文件使用全局变量
- 基于tar包制作启动光盘的步骤
- c语言共同体
- Thinking in Java 第七章------复用类(3)
- ArrayList.contains(obj o)出现返回结果不对的问题
- Keyguard 和 SystemUI
- string与tostring的区别
- 学习笔记之JavaSE(7)--Java基础语法6
- android scroller的原理分析
- numactl -hardware源码分析
- Android Studio2.0以上反射$change属性问题
- MUI介绍
- JQery选择器
- 实现一个简单的日历