1. 程式人生 > >Android在init.rc中加入指令碼開機安裝APK並啟動APK的服務

Android在init.rc中加入指令碼開機安裝APK並啟動APK的服務

要求:開機檢查APK是否安裝,如果不安裝則自動靜默安裝,同時啟動APK的服務。

把要安裝的APK放在device資料夾下,編譯時用指令碼拷貝到out目錄下,開機啟動指令碼安裝APK並啟動服務。

這裡以Airplay.apk為例。

1.在device目錄下建立資料夾AirPlayer,並把Airplay.apk放在資料夾裡。在編譯腳本里拷貝Airplay.apk到out/system/AirPlayer資料夾中。指令碼示例如下:

        files := $(shell ls $(LOCAL_PATH)/apps/AirPlayer)
PRODUCT_COPY_FILES += $(foreach file, $(files), $(LOCAL_PATH)/apps/AirPlayer/$(file):system/AirPlayer/$(file))

 

在拷貝到out目錄之前記得mkdir out/system/AirPlayer,不然目標路徑找不到。

2.編寫init.AirPlayer.sh指令碼。指令碼很簡單,如下:

if [ ! -e /data/app/com.waxrain.airplayer-1.apk ] ; then
pm install /system/AirPlayer/Airplay.apk
   
   am startservice -n com.waxrain.airplayer/com.waxrain.airplayer.WaxPlayService          
fi  

3.把指令碼拷貝到out/system/etc

下。修改device.mk

PRODUCT_COPY_FILES += $(LOCAL_PATH)/init.AirPlayer.sh:system/etc/init.AirPlayer.sh

4.修改init.rc

service AirPlayer-setup /system/bin/sh /system/etc/init.AirPlayer.sh
   
    class main
user root
group root
disabled
oneshot 
  

判斷開機完成後啟動此指令碼,如果不加此判斷,會導致機器還沒完全起來,pm和am命令用不了,以至於APK未能安裝。

on property:dev.bootcomplete=1
start AirPlayer-setup