这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战
环境
- OTT BOx with android 5.1.1
前言
之前的 Android开机执行shell脚本 介绍了如何在 android 系统开机时执行特定的 shell 脚本文件。这能帮助我们解决很大部分问题,不过在某些情况下,可能并不适合用 shell 实现,又不好做成 jni 动态库由 app 调用,这时用 C 语言程序来实现就有可能帮上你,本文就以开机在系统中创建文件夹为例,来实现 android 开机启动 C 可执行程序。
实现步骤
在Android源码中创建文件夹
这里需要 android 源码,首先进入到 android 的源码目录下的 external文件夹,这里主要是放置一些外部的库,或独立程序。我们创建自己的独立项目文件夹 hello
cd android_src/external
mkdir hello
创建C源文件及Android.mk
第二步,就是编写源码文件 test.c,内容如下
#include <stdio.h>
#include <stdlib.h>
int main()
{
int ret = mkdir("/system/hello");//请确保你的用户有对相应目录的权限
if(ret == -1)
{
printf("mkdir failed!\n");
return -1;
}
return 0;
}
这里如果你的 system 分区只读,可以换成其它有写权限的目录,如 /data/hello 作为测试用
接下来就是编写 Android.mk 文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_MODULE := hello
LOCAL_SRC_FILES := $(call all-subdir-c-files)
include $(BUILD_EXECUTABLE)
修改Android开机脚本文件init.${platform}.rc文件
$platform 指的是芯片厂家的代号,我们编辑这个 rc 文件,增加如下内容, hello 是最后代码编译生成的可执行文件的名称
service hello_test /system/bin/hello
class main
user root
group root
oneshot
重新编译源码并打包
进入源码目录,进行完整编译,最后生成系统镜像
cd android_src
make
刷机并测试
将系统镜像刷入到目标板子中,启动系统后,查看文件夹 /system/hello (或者 /data/hello )是否已经被创建好了