25

我想制作自己的基于 Android (ARM) 的嵌入式系统,仅使用随 Android 分发但没有启动器的设备。

或者

我想在我的应用程序在顶部启动的情况下启动 Android,并拒绝关闭它并从我的应用程序中关闭 Android。

4

2 回答 2

33

本质上,您正在尝试自定义构建 AOSP,其中“主页”是您的应用程序。如果您查看/packages/apps/Launcher2,您会找到默认主屏幕的代码。

如果您查看其中的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>

本质上,这表示此活动对

android.intent.category.HOME意图

当系统完成启动时(更具体地说是 ActivityManager),发送该意图。因此,如果您希望您的应用程序启动而不是启动器,只需为自己创建一个具有类似意图过滤器的应用程序并删除默认的 Launcher2(将其从build/target/product/generic.mk中的列表中删除,并改为使用您的)。还要确保相关的 .mk 文件具有以下内容:

LOCAL_OVERRIDES_PACKAGES := Home

只要您的应用程序没有为用户提供使用图标启动其他应用程序的方式(如 Launcher 那样),就不会启动其他应用程序;当然,除非某些东西从您的应用程序控制的路径之外的其他路径发送活动启动意图 - 例如通过在目标的 Android shell 上使用“am”命令。

于 2012-07-04T15:45:19.057 回答
2

根据您的问题,您想创建自己的自定义 Android 操作系统版本。这将比开发普通的 Android 应用程序涉及更多内容,因此您将不得不阅读大量内容,尤其是 Android OS 源代码。

我建议您从Android Open Source Project开始。

于 2012-07-03T14:14:57.810 回答