Android运行C程序

编译Native C的helloworld模块

  1. 在Android源码下的development目录下创建一个名为hello的目录
  2. 在此目录下创建一个名为hello.c的C语言文件,代码如下:
int main()
{
    printf("Hello World!\n");
    return 0;
}
  1. 当前目录下创建Android.mk文件(Android Makefile标准命名,不可更改,内容可以参考其他已有的Android.mk文件的写法),内容如下:
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=\
hello.c
LOCAL_MODULE := helloworld
include $(BUILD_EXECUTABLE)


1. LOCAL_SRC_FILES:用于指定源文件
2. LOCAL_MODULE:用于指定要编译模块的名字,在下一步编译时会用到。
3. #include $(BUILD_EXECUTABLE):表示要编译成一个可执行文件,如果想编译成动态库,则可用BUILD_SHARED_LIBRARY,这些具体用法可以在Android/build/core/config.mk查到。
  1. 返回Android源码顶层目录进行编译:

    make helloworld

    需要注意的是make helloworld中的目标名helloworld就是Android.mk文件中由LOCAL_MODULE指定的模块名。

  2. 编译结果在Android/out/target/generic/system/bin/helloworld目录下

这样通过adb push将它传送到Android开发板上,再通过adb shell登录到开发板即可执行

注意这里可能会存在Android文件系统没有权限问题,解决方法如下:

adb remount

手工编译C模块

  1. 在Android编译环境中,提供了showcommands选项来显示编译命令行,可以通过打开这个选项来查看一些编译时的细节。
  2. 在具体操作之前,需要使用如下命令把前面中的helloworld模块清除。

    make clean-helloworld

    上面的make clean-$(LOCAL_MODULE)命令是Android编译环境提供的make clean的方式

  3. 使用showcommands选项重新编译helloworld,具体命令如下:

    make helloworld showcommands

生成helloworld可执行文件后,同上了