PhoneApp作為Android系統中首屈一指的Application,其在創建的時候會構造出對整個系統來說至關重要的ril.java的實體,在這個rilj構造出來后,會與底層的rild connect上,並且連通他們之間通信的socket,這樣手機的通話、短信功能才可用;
PhoneApp如此重要和基礎,其是在哪里被創建出來的呢,(在一位同事的幫助下,終於找到了)
首先需要注意下在Phone的AndroidManifest.xml文件中,定義了PhoneApp的一些屬性:
<application android:name="PhoneApp"
android:persistent="true"
android:label="@string/dialerIconLabel"
android:icon="@drawable/ic_launcher_phone">
注意黑色加粗部分;
在ActivityManagerService.java里的 SystemReady函數的最后有以下代碼:
List apps = AppGlobals.getPackageManager().
getPersistentApplications(STOCK_PM_FLAGS);
if (apps != null) {
int N = apps.size();
int i;
for (i=0; i<N; i++) {
ApplicationInfo info
= (ApplicationInfo)apps.get(i);
if (info != null &&
!info.packageName.equals("android")) {
addAppLocked(info);
}
}
}
加粗的函數getPersistentApplications可以get到phoneapp的info,然后使用函數addAppLocked把PhoneApp啟動起來~
這里就是PhoneApp被最先搞起來的地方~
