Ответ 1
По существу, вы пытаетесь создать пользовательскую сборку AOSP, где "Главная" - ваше приложение. Если вы посмотрите в /packages/apps/Launcher 2, вы найдете код для начального экрана по умолчанию.
Если вы посмотрите на файл AndroidManifest.xml, вы увидите что-то вроде этого:
<activity
android:name="com.android.launcher2.Launcher"
android:launchMode="singleTask"
android:clearTaskOnLaunch="true"
android:stateNotNeeded="true"
android:theme="@style/Theme"
android:screenOrientation="nosensor"
android:windowSoftInputMode="stateUnspecified|adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY"/>
</intent-filter>
</activity>
Essentialy, это говорит о том, что эта активность реагирует на
android.intent.category.HOME.
Когда система завершает загрузку (более конкретно ActivityManager), отправляет это намерение. Итак, если вы хотите, чтобы ваше приложение запускалось вместо Launcher, просто создайте себе приложение с аналогичным фильтром намерений и удалите стандартный Launcher2 (выньте его из списка в build/target/product/generic.mk и поместите вместо него). Также убедитесь, что у соответствующего файла .mk есть что-то вроде этого:
LOCAL_OVERRIDES_PACKAGES := Home
Пока ваше приложение не предоставляет пользователю возможности запуска других приложений с помощью значков (например, Launcher), никакое другое приложение не будет запущено; если, конечно, что-то не отправляет намерение, начинающееся с какого-либо другого пути, чем тот, который контролируется вашим приложением, например, используя команду "am" в целевой оболочке Android.