Как сделать встроенную ОС Android только одним приложением?

Я хотел бы создать собственную встроенную систему, построенную на Android (ARM), используя устройства, распространяемые с Android, но без их запуска.

ИЛИ

Я хочу запустить Android с моим приложением, запущенным сверху, и отказаться закрыть его и выключить Android из моего приложения.

Ответ 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.

Ответ 2

Посмотрите на источник для системы восстановления; это альтернативная загрузочная среда, которая намного, намного проще. Существуют также сторонние версии с поддержкой сенсорного экрана.

Ответ 3

По звуку вашего вопроса вы хотите создать свою собственную сборку ОС Android. Это будет более активное участие, чем разработка обычных приложений для Android, и, следовательно, вам придется много читать, особенно исходный код ОС Android.

Я рекомендую вам начать здесь, в Android Open Source Project.