写给一直在做linux下驱动或应用开发的小伙伴们,这里描述了在安卓开发板中,如何编写,编译,生成可执行的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
int main()
{
printf("hello lingump\n");
return 0;
}
直接在安卓源码根目录下执行命令"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下驱动开发或者应用编程的朋友不难发现,其实对比起来大同小异,不过我第一次不了解安卓的时候也不得方法,这里做一个小的归纳总结,愿帮助到新的朋友.