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
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