Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1304584
  • 博文数量: 478
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4833
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-28 11:12
文章分类

全部博文(478)

文章存档

2019年(1)

2018年(27)

2017年(21)

2016年(171)

2015年(258)

我的朋友

分类: Android平台

2016-12-23 19:59:52

[FAQ07292]如何用init&init.rc 来执行应用程序, 脚本,java 程序
2013-05-24
平台...
软件分支...
FAQs 57 of 73

内容

[Description]
如何用init&init.rc 来执行应用程序, 脚本,java 程序
 
[Keyword]
init init.rc exec native sh java
 
[Solution]
1. 首先确认对应的程序,脚本已经内置,如内置在了system/bin 目录, 如果不会内置,可以查看FAQ FAQ04153: 如何将任意一个文件(包括可执行文件)内置到手机中?

2. 确认对应的用户是否有权限能够执行这个应用程序,可以用ls -a -l 的命令来查看。如果需要修改权限,可以参考 FAQ  FAQ02625: 如何修改system 下面文件的权限
3. 在init.rc 中执行
 3.1 如果是开机只短暂执行一次即可退出,那么可以用exec 命令在on post-fs-data 段中执行,通常为修改文件权限,更改用户之类,如果该程序是直接内置在init 中的命令,可以直接call, 如果不是,那么需要用exec 执行
 内置应用程序可以参考: system/core/init/keywords.h 
 具体可以参考如:
 on post-fs-data
     write /proc/bootprof "INIT:post-fs-data"
     # We chown/chmod /data again so because mount is run as root + defaults
     chown system system /data
     chmod 0771 /data
     ......
     # add your action, such as exec program-path I.E exec /sbin/e2fsck -p 
     # if the command is init-internal, call the command directly  I.E chmod  chown....
  
 3.2 当作一个service 来启动,通常表现为这个程序可能长久的运行,或者可能被多次启动,即可以定义为一个service。简单如:
 service bootanim /system/bin/bootanimation
        class main
        user graphics
        group graphics media
        disabled
        oneshot
 注意的是service 要顶格写,然后它的action 和 属性描述要空4个空格后开始写。更多属性描述和action 可以参考 system/core/init/readme.txt
 
 3.3 程序为shell 脚本时,shell 脚本的第一行一定必须是 #! /system/bin/sh  否则将作为一个native 二进制程序解析,即会出下行的错误
 cannot execve xxxxxx.sh: Exec format error
 
 3.4 执行java 程序,java 程序执行比较特别,因为它是通过app_process 拉起,可以参考如 frameworks/base/cmds/am/am 的写法。启动service 时,如:
 service xxxx am
       .....
 一般不推荐这样直接使用java 程序, 因为通常DVM 的拉起需要zygote 先完成启动
 
[参考文档&FAQ]
1. FAQ04153: 如何将任意一个文件(包括可执行文件)内置到手机中?
2. FAQ02625: 如何修改system 下面文件的权限
3. 工程代码: system/core/init/keywords.h
4. 工程文档: system/core/init/readme.txt
阅读(1587) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~