Android:如何交叉编译要在安卓板上运行的C程序

  • 交叉编译在安卓板上运行的C程序

写给一直在做linux下驱动或应用开发的小伙伴们,这里描述了在安卓开发板中,如何编写,编译,生成可执行的C程序,并在安卓真机中测试的一整套基本操作流程.

 

  • 新建C项目

在你的安卓源码目录下新建一个文件夹用来存放你的工程代码,譬如我的安卓源码目录为"/root/sc60-android/google_android7.1.2",在此目录下我新建了一个文件夹"lingump",并创建两个文件"Android.mk"和"hello_lingump.c".

"Android.mk":

关于这种风格的Makefile这里先不做说明,不过很简单,并且这个Makefile一般满足所有这种调试用的C工程了,它非常简单,因为它是在我们的安卓源码目录中使用的.

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello_lingump 
LOCAL_SRC_FILES := hello_lingump.c

include $(BUILD_EXECUTABLE)

"hello_lingump.c":

#include <stdio.h> 
int main()
{
	printf("hello lingump\n");
	return 0;
}                 

 

  • 编译C项目

直接在安卓源码根目录下执行命令"make hello_lingump",编译你的目标模块,如果你跟我一样,之前编译过安卓源码,然后只是做了一点修改(如同第一步所述的修改),那么在编译完成的最后你会看到类似如下信息:

[100% 6/6] Install: out/target/product/msm8953_64/system/bin/hello_lingump

这说明我们成功的生成了可运行程序在如上位置,如果我们是重新打包的安卓系统镜像文件的话,那么在文件系统的"/system/bin/"路径下应该就会有"hello_lingump"可执行程序,这里没有尝试,不过按照安卓打包镜像的做法应该是这样的,这里我们不打包进镜像,因为每每调试一个程序就得重新打包镜像,更新镜像是非常麻烦的.我们这里仅仅是一个测试阶段的运行程序,非开发阶段的话可以考虑直接打包进镜像,接下来就用到了adb.

 

  • "烧录"并测试

这里的烧录是指通过adb工具,将电脑中的可执行程序放到安卓版中,关于如何安装adb等内容这里不再说明,假设连线等一系列准备工作已经做好了,接下来我们通过命令行查看设备连接状态,通过"adb devices"可以查看当前连接的设备,如果连接上了,执行"adb shell"命令可以直接进入命令行,然后我们输入"exit"命令可以退出命令行,因为接下来我们要在电脑中使用adb往安卓板中发送文件,而不是进入安卓命令行中操作,这里我的命令如下:

adb push E:/WindowsShare/hello_lingump /system

注意这里,我的adb是安装在Windows7系统中的,而之前编译生成的"hello_lingump"文件以及我的安卓源码都是在虚拟机中Ubuntu14.04的,所以这里我是把改程序拷出来后再用的adb,不过Ubuntu中也可以使用adb的,啰嗦一下.

这里我是想把我电脑中的"E:/WindowsShare/hello_lingump"文件发送到安卓板中的"/system"路径下,但是结果却发现要么没有权限操作,要么安卓板中的路径是个只读路径,那怎么办?网上有人说可以放到"/data/local/"路径下,我尝试过不行,并且我查看了所有的路径的权限,都是不允许这些操作的,然后尝试通过进入安卓命令行修改路径的权限等也是不可行的,除非在安卓源码中对安卓镜像做手脚,让它支持可读可写或者权限拉满,当然也没必要那么麻烦,只要你的安卓系统是root过得,那么我们直接可以通过adb尝试:

adb root
adb shell "mount -o rw,remount /system"

如果执行以上三步,没有任何错误信息就说明成功了,这个时候可以通过"adb shell"命令进入安卓系统中再用"mount"命令查看挂载的文件系统"/system",会发现它是可读可写的了,至此,我们再重新尝试之前的发送命令,就会成功了,然后我们进入安卓命令行,执行"/system/hello_lingump"命令,发现:

hello lingump

至此,完整的一个流程就结束了,更多涉及到的adb使用以及安卓系统中的C应用编程,大家再去自行寻找资料学习吧,相信懂Linux下驱动开发或者应用编程的朋友不难发现,其实对比起来大同小异,不过我第一次不了解安卓的时候也不得方法,这里做一个小的归纳总结,愿帮助到新的朋友.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值