以前我时常在想,怎么能在Android系统中用C语言来编写应用程序呢?Android系统上的应用程序不都是Java应用程序吗?其实是可以的,读者不妨用adb shell命令连上Android模拟器,在/system/bin目录下可以看到很多C可执行程序,如cat命令。今天,我们就来学习一下怎么在Android系统中添加用C语言编写的可执行程序。

还是以hello world来讲吧。毕竟大家对这个比较熟。

进入到Android源代码工程的external目录,创建hello目录,

caizd@blsx:~/mt6580_androidL$ cd external/caizd@blsx:~/mt6580_androidL/external$ mkdir hello

在hello目录中新建hello.c文件,并且添加代码如下:

#include <stdio.h>int main(int argc, char** argv)
{printf("Hello World!\n");return 0;
}

这个程序的作用是打印出Hello World!

然后在hello目录中新建Android.mk文件,添加代码:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_MODULE := helloLOCAL_SRC_FILES := $(call all-subdir-c-files)include $(BUILD_EXECUTABLE)

注意,BUILD_EXECUTABLE表示我们要编译的是可执行程序

使用mmm命令进行编译:

caizd@blsx:~/mt6580_androidL/external$ mmm ./external/hello

编译成功后,就可以在out/target/product/inwatch_portal/system/bin/目录下,看到可执行文件hello了。

然后通过adb工具把hello push到机器的system/bin/,给755权限即可。然后执行adb 进入机器执行./hello,即可看到打印Hello World!,说明操作成功。具体操作命令如下:

C:\Users\asus>adb root
adbd is already running as rootC:\Users\asus>adb remount
remount succeededC:\Users\asus>adb push Y:\mt6580_androidL\out\target\product\inwatch_portal\system\bin\hello system/bin
55 KB/s (5412 bytes in 0.094s)C:\Users\asus>adb shell
root@inwatch_portal:/ # cd system/bin
cd system/bin
root@inwatch_portal:/system/bin # chmod 755 hello
chmod 755 hello
root@inwatch_portal:/system/bin # ./hello
./hello
Hello World!
root@inwatch_portal:/system/bin #

如果需要这个执行文件在开机之后在后台自动运行,则需要添加以下语句到init.rc的文件或者xxxx.sh中(一定要是能运行的rc文件或者sh文件)。Unix/Linux下一般比如想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行hello在后台:

1、xxxx.sh中添加:

 /system/bin/hello &

2、init.rc添加,不需要&:

Below Android 4.0(安卓4.0之前)

 service hello /system/bin/hellouser rootgroup rootoneshot

Above Android 4.0(安卓4.0之后)

 service hello /system/bin/helloclass mainuser rootgroup rootoneshotseclabel u:r:hello:s0   #这句是为加selinux权限添加的,android5.1以后不加则无法启动该服务

当然了,加完了上面这些之后,还需要处理一下Selinux的一些权限的问题,否则会出现如下报错:

[    4.099220] init: Starting service 'hello'...
[    4.101726] init: cannot setexeccon('u:r:ehello:s0'): Invalid argument
[    4.147480] init: Service 'hello' (pid 242) exited with status 12

具体的处理可以参考:添加开机启动服务程序关于Selinux权限问题说明

Android系统中用C语言来编写服务程序并且开机自启动运行服务相关推荐

  1. Android系统修改默认语言为中文

    Android系统修改默认语言为中文 对于Android系统修改默认语言的方法,各个版本的系统方法都差不多一致,至少我在Android5.1和Android9.0使用都成功,具体方法如下: 在buil ...

  2. ubuntu系统中用c语言编写简单程序

    目录 (一):修改参数提高下载速度 (二):c语言入门编写helloworld (三):在ubuntu系统下编写简单程序 (四):在windows系统下编写简单程序 (五):在ubuntu系统下使用m ...

  3. 基于虚拟机Ubuntu系统下C语言简单编写程序

    目录描述 前言 一.修改系统参数 1.查看Ubuntu版本 2.原文件备份 3.下载清华源 二.编写"hello world"C语言程序 1.安装vim 2.建立hello.c 3 ...

  4. Linux系统上C语言程序编写与调试

    目录 1.可执行文件(程序) 2.程序的编译链接过程 2.1.预处理阶段 2.2.编译阶段 2.3.汇编阶段 2.4.链接阶段 3.在gcc编译器上进行程序编译运行实操 3.1.gcc安装 3.2.预 ...

  5. Android 系统添加新语言的方法

    方法1 在 frameworks/base/core/res/res/下添加语言对应的values文件夹即可 方法2 在frameworks\base\core\java\com\android\in ...

  6. Android系统Settings添加语言

    平台:RK3288 Android9.0 需求:系统Settings语言选项默认添加韩语.英语. final Locale locale1 = new Locale("ko",&q ...

  7. Android系统语言默认设置为简体中文

       Android系统默认的语言是英语,但是对于中国大陆Android产品厂商来说,不会出厂之后语言还是英语,到用户手里之后,用户自己设置成简体中文吧?有如果客户不懂英语,岂不是就不能设置系统语言了 ...

  8. Android编译默认英语,Android系统语言出厂编译设置为简体中文

    Android系统默认的语言是英语,但是对于中国大陆Android产品厂商来说,不会出厂之后语言还是英语,到用户手里之后,用户自己设置成简体中文吧?有如果客户不懂英语,岂不是就不能设置系统语言了?所以 ...

  9. Android系统init进程启动及init.rc全解析

    这是一篇用心写的博客,也希望大家用心看并帮忙找到文章的改进之处,谢谢: 服务启动机制 system/core/init/init.c文件main函数中parse_config_file(init.rc ...

  10. 让Python在Android系统上飞一会儿

    第一节 在手机上配置Python运行环境 1.下载和安装 Scripting Layer for Android (SL4A) Scripting Layer for Android (SL4A) 是 ...

最新文章

  1. 加速mysql导入时间_加快mysql导入导出速度
  2. C#实现Web应用程序定时启动任务
  3. mysql piress_由MySql漏洞导致电脑被入侵(特征为新增加名为piress的帐户)所想到的...
  4. DDD - 如何理解Entity与VO
  5. JVM堆GC回收次数
  6. Ubuntu Linux 永山(mount)分
  7. 数组做参数_C语言进阶之路:函数—数组参数!
  8. Linux ps aux查看进程
  9. matlab 排序点,matlab如何进行排序?
  10. 解析HetuEngine实现On Yarn原理
  11. 盘点 8 种最坑的 SQL 错误用法
  12. centos7 firewall-cmd 用活firewalld防火墙中的zone
  13. 5G时代的无线宽带新技术
  14. SAP License:ERP实施风险是什么?
  15. python机器学习彩票_Python机器学习及实战kaggle从零到竞赛PDF电子版分享
  16. Redis学习-性能与优化(五)
  17. ENVI5.3.1使用Landsat 8影像进行图像融合
  18. bat 输出变量 %变量名%
  19. PCA9685 多舵机控制器的编程
  20. 机电传动与控制【2】

热门文章

  1. Mysql慢查询定位和优化实践分享
  2. [2017.01.04] 经典排序算法思想及其实现
  3. 使用tc对linux中某ip段限速
  4. 【转】并查集算法和路径压缩
  5. 以下内容为Stackoverflow上整理以作纪录
  6. 邮件服务器拦截与反垃圾邮箱的相关方法
  7. 整理了近五年顶会都收录了哪些实体链接文章
  8. 抖音算法暑期实习春招双双发车
  9. TF2.0-tf.keras.layers.Concatenate
  10. 机器学习基础算法24-SVM理论部分