標籤:
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。
[plain] view plain copy
- 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
從以上Android.mk可以看出:1)應用編譯後的名稱:SysemUILOCAL_PACKAGE_NAME := SystemUI 2)應用編譯後系統路徑:/system/pri-app/SystemUILOCAL_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屬於系統apkandroid:sharedUserId="android.uid.systemui" 2)SystemUI屬於核心apkcoreApp="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介紹 轉