android 6.0 SystemUI源碼分析(1)-SystemUI介紹 轉

來源:互聯網
上載者:User

標籤:

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  
  1. LOCAL_PATH:= $(call my-dir)  
  2. include $(CLEAR_VARS)  
  3.   
  4. LOCAL_MODULE_TAGS := optional  
  5.   
  6. LOCAL_SRC_FILES := $(call all-java-files-under, src) \  
  7.     src/com/android/systemui/EventLogTags.logtags  
  8.   
  9. LOCAL_STATIC_JAVA_LIBRARIES := Keyguard  
  10. LOCAL_JAVA_LIBRARIES := telephony-common  
  11.   
  12. LOCAL_PACKAGE_NAME := SystemUI  
  13. LOCAL_CERTIFICATE := platform  
  14. LOCAL_PRIVILEGED_MODULE := true  
  15.   
  16. LOCAL_PROGUARD_FLAG_FILES := proguard.flags  
  17.   
  18. LOCAL_RESOURCE_DIR := \  
  19.     frameworks/base/packages/Keyguard/res \  
  20.     $(LOCAL_PATH)/res  
  21. LOCAL_AAPT_FLAGS := --auto-add-overlay --extra-packages com.android.keyguard  
  22.   
  23. ifneq ($(SYSTEM_UI_INCREMENTAL_BUILDS),)  
  24.     LOCAL_PROGUARD_ENABLED := disabled  
  25.     LOCAL_JACK_ENABLED := incremental  
  26. endif  
  27.   
  28. include frameworks/base/packages/SettingsLib/common.mk  
  29.   
  30. include $(BUILD_PACKAGE)  
  31.   
  32. ifeq ($(EXCLUDE_SYSTEMUI_TESTS),)  
  33.     include $(call all-makefiles-under,$(LOCAL_PATH))  
  34. 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介紹 轉

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.