1:做个脚本去实现拷贝APK都data/app目录下面:

#!/vendor/bin/sh
sleep 1
cp /system/pre_install/RunUiTest/RunUiTest.apk /data/app/

chmod 777 /data/app/RunUiTest.apk

2:把脚本加入编译:

    1》把脚本放到device/qcom/common/rootdir/etc/copy_apps.sh目录下面,

    2》修改device/qcom/common/base.mk

        INIT += copy_apps.sh   

    3》修改device/qcom/common/rootdir/Android.mk

         include $(BUILD_PREBUILT)
 
         include $(CLEAR_VARS)
        +LOCAL_MODULE       := copy_apps.sh
        +LOCAL_MODULE_TAGS  := optional eng
        +LOCAL_MODULE_CLASS := ETC
        +LOCAL_SRC_FILES    := etc/copy_apps.sh
        +LOCAL_MODULE_PATH  := $(TARGET_OUT_VENDOR_EXECUTABLES)
        +include $(BUILD_PREBUILT)
        +
        +include $(CLEAR_VARS)
         LOCAL_MODULE       := init.class_main.sh
         LOCAL_MODULE_TAGS  := optional eng

         LOCAL_MODULE_CLASS := ETC

3,启动这个SH脚本当服务:

    修改添加启动服务:

    device/qcom/common/rootdir/etc/init.qcom.rc

    添加:

    +service copy_apps  /vendor/bin/copy_apps.sh
+    class core
+    user root

+    oneshot

此处不需要去想正常的服务启动一样去添加TE的启动判断:

+#on property:sys.boot_completed=1

+#   start copy_apps

4,要启动服务,必须给这个服务加个SELinux domain

但是我们的sh脚本可以直接添加到qti_init_shell_exec系统已有的,所以不需要去单独添加te文件来做这个domain新增的进程增加域、执行权限

修改device/qcom/sepolicy/common/file_contexts

添加:

+/(vendor|system/vendor)/bin/copy_apps.sh                u:object_r:qti_init_shell_exec:s0


到此就结束了。

附带不需要的TE文件内容:

########################################
# sepolicy rules for copy_apps
########################################


type copy_apps, domain;


type copy_apps_exec, exec_type, vendor_file_type, file_type;
domain_auto_trans(init, copy_apps_exec, copy_apps);------代码都用这个,没有去管它什么意思

#init_daemon_domain(copy_apps);-------------网上都用这个

#allow copy_apps sysfs:file { read open };

如果是要加独立te的方式,那device/qcom/sepolicy/common/file_contexts的修改要换成自己的te:

/vendor/bin/copy_apps.sh                u:object_r:copy_apps_exec:s0

这样会报很多avc权限问题,自己log打印有很多,但是apk还是正常拷贝过去了,~~


题外话:

正常的服务启动是要加te文件,因为有很多权限,针对log报什么avc就加对应的权限文件

下面有关别人的解说拷贝转载:供TE添加参考:

没有定义SELinux domain,导致服务xxx无法自启动。为了解决这个问题我们按如下方式修改或添加sepolicy文件:

修改seplicy/file_contexts文件,添加以下内容:
/system/bin/xxx     u:object_r:xxx_exec:s0
  • 1
新增xxx.te文件,并在其中添加如下内容:
需要为新增的进程增加域、执行权限type xxx, domain;type xxx_exec, exec_type, file_type;然后启用这个域init_daemon_domain(xxx)

更多相关文章

  1. Android(安卓)从一个应用打开另一个应用
  2. Android(安卓)修改开机画面
  3. Android(安卓)5.0 SystemServer--->Android入口
  4. Android(安卓)studio 添加依赖库的方法
  5. 【Android(安卓)studio】为按钮添加简单事件
  6. 【Android】Activity_习题
  7. Android应用启动优化:一种DelayLoad的实现和原理
  8. Android百度地图之页面跳转
  9. 随笔--android中修改SeekBar控件默认显示

随机推荐

  1. 项目实战7—Mysql实现企业级数据库主从复
  2. mysql值以数组格式转换为PHP数组
  3. MySQL多个连接到付款数据的日历表
  4. mysql5.6配置同步复制的新方法以及常见问
  5. 在mysql shell中显示没有表行的查询结果(
  6. SQL调优案例,MYSQL服务器CPU100%问题解决
  7. mysql中select列表可以有group列表中没有
  8. 确定SQL UPDATE是否更改了列的值
  9. 当python遇到mysql时,如何顺利安装mysql
  10. 如果没有匹配,则使用默认值执行左连接。