欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android7.0实现开机后台安装应用----rc文件的使用及权限问题

程序员文章站 2022-05-25 12:21:48
需求 每次开机之后,后台自动安装一个apk。(实现方法可能有多种,这里只记录我用的) 需求分析 我的思路是写一个脚本放到中,然后每次开机的时候在rc文件中启动这个脚本服务。 具体实现步骤 第一,将所...

需求

每次开机之后,后台自动安装一个apk。(实现方法可能有多种,这里只记录我用的)

需求分析

我的思路是写一个脚本放到中,然后每次开机的时候在rc文件中启动这个脚本服务。

具体实现步骤

第一,将所需要安装的apk文件保存在系统,我这里是放到system/etc/目录下面了,放在system分区下有个好处就是不会被用户删掉,当然不能放太多无意义的东西,否则你的img会变得很大。可以通过mk中的product_copy_file进行操作:

product_copy_file=xxx/xx.apk:system/etc/xx.apk

第二,将安装脚本写好编进系统中去,这个脚本文件很简单,如下:

和上面copy apk文件一样,将脚本文件copy到system/bin/目录下,如下:

product_copy_file=xxx/install_app.sh:system/bin/install_app.sh

第三,在rc文件中启动这个脚本服务,我们在rc文件中声明这个服务:

service service_install /system/bin/install_app.sh
    user root
    group root
    disabled
    oneshot

这里简单说一下上面代码的意思,

第一个service表示声明服务,后面的service_install指的是service的名字,后面跟的是文件路径;

disable和oneshot表示该服务只执行一次,运行完就设置为禁用。

既然是开机的时候执行,那么就需要一个触发点,这里用到rc里面的onproperty语法,sys.boot_completed=1,如下:

on property:sys.boot_completed=1
        start service_install

然后编译烧写整个系统就行。

遇到的问题

烧录开机之后发现服务并没有起来,查看kernel的log发现是权限问题。为了确认这个问题,我尝试把系统selinux关掉,发现服务是能正常起来的。

解决问题

我们需要通过log来一条条的加上权限。