2012-07-03 59 views

回答

23

基本上,您正嘗試定製構建AOSP,其中「Home」是您的應用程序。如果您查看/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> 

Essentialy,此說,這一反應的

機器人.intent.category.HOME intent

當系統完成啓動時(ActivityManager更具體),發送該意圖。因此,如果您希望自己的應用程序啓動而不是啓動程序,只需創建一個具有類似意圖過濾器的應用程序並刪除默認的Launcher2(將其從build/target/product/generic.mk中的列表中取出並放入而不是你的)。另外,還要確保相關.mk文件中有這樣的事情:

LOCAL_OVERRIDES_PACKAGES := Home 

只要你的應用程序沒有爲用戶提供一種方式來啓動使用圖標(如啓動一樣)其他應用程序,沒有其他應用程序將開始;除非有些東西會從你的應用程序所控制的路徑以外的其他路徑發送一個Activity開始的意圖 - 比如說在目標的Android外殼上使用「am」命令。

+0

多好的回答!我從這裏得到了更多,而不是整個lotta文檔閱讀 –

+0

是'LOCAL_OVERRIDES_PACKAGES:= Home'中的'Home'你用Launcher2替換的應用程序? –

+0

我覺得'Home'是AOSP中使用的當前啓動程序的模塊名稱。可能是舊的Android版本使用的Home模塊,現在它是Launcher2。所以應該使用'LOCAL_OVERRIDES_PACKAGES:= Launcher3',甚至是'LOCAL_OVERRIDES_PACKAGES:= Launcher2 Launcher3'。 Cyanogenmod 12使用Trebuchet發射器,因此對於CM版本,我會使用'LOCAL_OVERRIDES_PACKAGES:= Launcher3 Trebuchet' – Mixaz

3

通過您的問題的聲音,你想創建自己的自定義Android操作系統版本。這將比開發普通的Android應用程序更爲複雜,因此您將不得不做大量的閱讀工作,尤其是Android操作系統源代碼。我建議你開始here at the Android Open Source Project

3

看看恢復系統的來源;這是一個備用的引導環境,它非常簡單得多。有一些第三方版本也支持觸摸屏。

相關問題