在做一個向導類apk的時候,有這樣的需求:
1、開機後第一個界面顯示apk的界面
2、apk退出後自動禁用,也就是說在桌面上找不到該apk,再次開機後也不再顯示該apk界面。
實作:
1、在MainActivity的onCreate方法裡加入:
<span style="white-space:pre"> </span>// 啟動一次後将自己給禁用掉
PackageManager pm = getPackageManager();
ComponentName name = new ComponentName(this, MainActivity.class);
pm.setComponentEnabledSetting(name,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
2、在AndroidManifest.xml對應的Activity标簽下intent-flter标簽内加入:
android:priority="1"
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
<span style="white-space:pre"> </span><activity
android:name="com.MainActivity"
android:label="@string/app_name" >
<intent-filter android:priority="1" >
<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.LAUNCHER" />
</intent-filter>
</activity>
3、打包出來一個沒有簽名的apk檔案,名為:old.apk,用系統簽名的方式給old.apk簽名,生成target.apk檔案:
java -jar signapk.jar platform.x509.pem platform.pk8 old.apk target.apk
注意:不同廠商的安卓系統,platform.x509.pem 和 platform.pk8檔案可能需要特定的廠商提供,如何系統簽名請google。
4、系統需要具備root權限,連接配接上電腦後,執行以下指令:
adb remount
adb push D:\target.apk /system/app
将apk放到 /system/app 目錄下
4、完成,當關機後開機,開機完成的第一個界面将是target.apk的界面,退出target.apk後,将無法在桌面上找到這個apk。
5、此操作适合機頂盒上的向導使用,沒有系統簽名或沒有放到 /system/app 下的apk,不确定以上操作是否可行。歡迎大家指正。
更詳細的編譯調試Android系統原生App,見:
點選打開連結