Android启动过程中执行一个C语言的应用程序或者执行shell脚本

一、Android启动过程中去对系统做一些设置,如修改某些文件夹的属性和文件的权限,可在init.rc中增加service执行shell脚本,从而可在shell脚本中完成大部分操作。或者也可以执行c语言应用程序。

二、实际测试

  1、在init.xxxx.rc中增加执行脚本的service,把service设为class main,则在启动class类的serive自动启动init-setup的service。

         1.1 开机执行脚本

service init-setup /system/bin/rootandwakelock.sh               
                  class main            
                  user root            
                  group root         
                  oneshot      
                  seclabel u:r:init:s0

1.2 开机执行C可执行程序

service check_hdmiin_signal /system/bin/check_hdmiin_signal

class main

user root

group root

oneshot

seclabel u:r:init:s0

1.3 如果想在开机完成后执行shell脚本,可如下设置:

service init-setup /system/bin/rootandwakelock.sh

user root           
                  group root    
                  disabled              
                  oneshot           
                  seclabel u:r:init:s0

on property:sys.boot_completed=1

start  init-setup

          1.4 各参数解释:

Android 服务名称规则invalid service name 限制16字符以内

user root 和 group root 意思是使用 root 权限。

seclabel u:r:init:s0 这句的具体含义大概是设置init进程的安全上下文,不加这个会提示没有权限:service  does not have a SELinux domain defined。

disabled是不自动执行,得另外start。
        oneshot说明的是该操作只会执行一次,并不像其他带有 restart 指令的 service 一样当被 kill 调之后会重新调起。如果你希望被kill掉之后重新调起,那就不写.

我这里的测试代码如下图

2、在Android下编写和编译c程序生存两个可执行文件。

2.1 auto_run.c的代码

#include <stdio.h>
#include <android/log.h>#define LOG    "ffmpegDemo-jni" // 这个是自定义的LOG的标识
#define LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG,__VA_ARGS__) // 定义LOGD类型
#define LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG,__VA_ARGS__) // 定义LOGI类型
#define LOGW(...)  __android_log_print(ANDROID_LOG_WARN,LOG,__VA_ARGS__) // 定义LOGW类型
#define LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG,__VA_ARGS__) // 定义LOGE类型
#define LOGF(...)  __android_log_print(ANDROID_LOG_FATAL,LOG,__VA_ARGS__) // 定义LOGF类型  int main(void)
{int i=0;//signal(SIGCHLD, SIG_IGN);//daemon(0, 0);//fork 强制后台运行!// for(i = 0; i < 10; i++)system("touch /data/new_file.txt");   while(1){sleep(1);printf("auto run demo! number=%d\n",i);LOGF("auto run demo! number=%d\n",i);i+=8;//  LOGI("Calls=%d,Valid=%d",10,11);}return 0;
}

2.2 Android.mk的代码

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_MODULE := auto_runLOCAL_SRC_FILES := $(call all-subdir-c-files)
LOCAL_SHARED_LIBRARIES := \liblog \libcutilsinclude $(BUILD_EXECUTABLE)

2.3  rootandwakelock.sh脚本如下,里面是执行另外一个c可执行程序auto_run_script。

2.4 auto_run_script.c代码如下

#include <stdio.h>
#include <android/log.h>#define LOG    "ffmpegDemo-jni" // 这个是自定义的LOG的标识
#define LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG,__VA_ARGS__) // 定义LOGD类型
#define LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG,__VA_ARGS__) // 定义LOGI类型
#define LOGW(...)  __android_log_print(ANDROID_LOG_WARN,LOG,__VA_ARGS__) // 定义LOGW类型
#define LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG,__VA_ARGS__) // 定义LOGE类型
#define LOGF(...)  __android_log_print(ANDROID_LOG_FATAL,LOG,__VA_ARGS__) // 定义LOGF类型  int main(void)
{int i=0;//signal(SIGCHLD, SIG_IGN);//daemon(0, 0);//fork 强制后台运行!// for(i = 0; i < 10; i++)system("touch /data/new_file.txt");while(1){sleep(1);printf("auto run demo! number=%d\n",i);LOGF("\nscript auto run demo! number=%d\n",i);i+=1;//  LOGI("Calls=%d,Valid=%d",10,11);}return 0;
}

2.5 在Android下编译成可执行文件auto_run和auto_run_script。

   3、打包固件运行,打开一个cmd窗口adb logcat查看打印信息,打开另外一个窗口setprop变量来start和stop进程。通过打印信息可以看出来开机后执行auto_run程序和运行rootandwakelock.sh。

三、kill 该进程后之后会重新调起例子,没有oneshot。

service gwdtservice /system/bin/giada_watchdoguser rootgroup rootdisabledseclabel u:r:init:s0

Android启动过程中执行一个C语言的应用程序或者执行shell脚本相关推荐

  1. 从Android启动过程中kernel日志确认Flash(分区)大小

    直接上Android启动过程中kernel日志: [ 0.877387] mmc0: MAN_BKOPS_EN bit is not set [ 0.878355] mmc_host mmc0: Bu ...

  2. r语言 rgl 强制过程中_一个R语言中操纵矢量空间数据的标准化工具—sf

    ​注: 本文是R语言sf包的核心开发者和维护者--来自德国明斯特大学的地理信息学教授:Edzer Pebesma 的一篇关于sf包的简介,发表于2018年7月的R语言期刊,主要讲述了sf的定位.功能. ...

  3. android启动过程中cpu降频,android省电开发之cpu降频

    众所周知,在android系统的耗电量排行里,cpu的耗电占了比较大的一部分比例,也就是说,cpu的使用率和使用频率将直接或间接的影响电量的分配和使用,但很遗憾,android-sdk中没有为andr ...

  4. 计算机加电启动操作引导自举,在计算机加电启动过程中,加电自检程序、 操作系统、引导程序、自举装入程序,这四个的执行顺序为...

    在计算机加电启动过程中四个程序的执行顺序应该为: 1.加电自检程序: 2.自举装入程序: 3.引导程序: 4.操作系统. 复位启动: "复位"是用硬件控制的方式对CPU进行复位操作 ...

  5. 编写一个USB接口程序,模拟计算机启动过程和关闭过程启动过程中要加载鼠标、键盘、麦克风等USB设备,具体要求如下: (1)定义一个接口USB,包含两个抽象方法turnOn()he turnOff(),

    一.好物推荐 给大家推荐三款蓝牙耳机,下面的链接可以直接购买: 1.https://item.taobao.com/item.htm?ft=t&id=643733003968 2.https: ...

  6. ifix5.8 启动过程中 iFX系统未启动!Profice iFIX 启动文件末找到无法执行任务:IOCNTRL.EXE

     错误提示: iFX系统未启动! Profice iFIX启动 文件末找到 无法执行任务:IOCNTRL.EXE 未检测到SCADA冗余对 无法找到I/O启动器的配置程序 解决过程:找到以下贴子 IF ...

  7. Android启动过程深入解析【转】

    转自:http://www.open-open.com/lib/view/open1403250347934.html 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么 ...

  8. Android启动过程深入解析

    当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样的? 什么是Linux内核? 桌面系统linux内核与Android系统linux内核有什么区别? 什么是引导装载程序 ...

  9. Android 启动过程简析(一)之 init 进程

    问题 在进入到 Android 启动过程之前先让我们思考以下几个问题 Android 系统的启动过程是怎样的? init .zygote 进程是什么?在系统启动的过程中各自发挥了什么作用? AMS.P ...

最新文章

  1. PriorBox 改进
  2. mybatis入门-第一个程序
  3. 通达oa oracle数据库,通达OA 2016系统连接ORACLE 11g数据库(图文)
  4. 插件编写傻瓜教程VC6.0
  5. uva 10716 Evil Straw Warts Live
  6. 需求获取的三阶段:需求背景、需求调研、需求分析 (2)
  7. LMS Virtual Lab对发动机噪声进行仿真的2种方法
  8. BZOJ 3668: [Noi2014]起床困难综合症【二进制+贪心】
  9. Asp.net MVC验证哪些事(2)-- 验证规则总结以及使用
  10. 骁龙845_性能强大价格更吸引 超值骁龙845手机盘点
  11. 性能分析:处理器、磁盘I/O、进程、网络分析方法 http://www.cnblogs.com/fnng/archive/2012/10/30/2747246.html...
  12. php mysql完全自学手册 smarty_PHPSmarty完全开发手册.pdf
  13. 3、等长子网掩码及变长子网掩码以及超网
  14. torch.load()出现ModuleNotFoundError错误
  15. 磁耦隔离与传统隔离的区别
  16. 适用于高级别自动驾驶的驾驶员可预见误用仿真测试
  17. 苹果手机实现NTU校园网连接自动化
  18. python list是不可变的数据类型吗_python中不可变数据类型和可变数据类型
  19. 洞悉物联网发展1000问之为什么新零售不仅仅是无人零售?
  20. GitChat · 人工智能 | 如何零基础用 Keras 快速搭建实用深度学习模型

热门文章

  1. 非洲难民营之十六 冲突 下
  2. 马万的故事:从开发商到难民
  3. 美国旧金山之行第四天
  4. showdialog wpf 如何关闭_WPF用ShowDialog()弹出窗体时控制该窗体的显示位置,并传值回父窗体...
  5. javascript 生成器函数 function*
  6. ubuntu22.04 虚拟机无法复制粘贴问题解决方案
  7. 48小时突破110亿美元销售额,这些爆款是最大功臣!
  8. Angular:This is probably not a problem with npm,There is likely additional logging output above.报错
  9. sql中的非等值连接
  10. 征途2经典版服务器双线哪个稳定,双线操控战不停 《征途2经典版》战灵分身登场...