如何将一个apk以第三方安装的形式预置到rom中

1.首先将这个apk拷贝到系统的某个目录,如/system/etc,但是安卓系统的makefile限制了对后缀为apk文件的拷贝导致编译报错

解决方法如下:

方法一:通过shell拷贝,在用到的xxx.mk中添加如下内容,如preinstall.mk

$(shell mkdir -p $(OUT)/system/etc/)

$(shell cp -rf $(LOCAL_PATH)/app_no_sign/xxx.apk $(OUT)/system/etc/)

方法二:注释掉编译系统对于apk的限制

platform/build / core/Makefile     注释调下面几行

#define check-product-copy-files
#$(if $(filter %.apk, $(1)),$(error \
#    Prebuilt apk found in PRODUCT_COPY_FILES: $(1), use BUILD_PREBUILT instead!))
#endef

2.写一个shell脚本,预置到system/bin下,开机时在init.rc中启动
脚本内容:
#!/system/bin/sh
xxx_path="/system/bin/xxx.apk"
while [ 1 ]
do
    boot_ok=`getprop sys.boot_completed 0`     //get不到给默认值0
    if [ $boot_ok -eq 1 ]
    then
        pm list package | grep com.xxxx.xxxx.xxx   //检查系统是否已经有这个apk的包
        if [ $? -eq 1 ]
        then
            pm install $xxx_path
            exit 0
        else
           exit 0
        fi
    fi
    sleep 2
done &


init.rc中启动该脚本(假设脚本名字为utility.sh):

service utility /system/bin/utility.sh
    class main
    oneshot


也可以在init.rc中判断开机完成再起脚本:

init.rc

service utility/system/bin/utility.sh
    class main
    disabled
    oneshot

on property:sys.boot_completed=1

    start utility

脚本也顺便优化一下:

#!/system/bin/sh
xxx_path="/system/etc/xxx.apk"
pm list package | grep com.xxxx.xxxx.xxx
        if [ $? -eq 1 ]
        then
            pm install $xxx_path
        fi

你可能感兴趣的:(Android,install,第三方apk)