编译Native C的helloworld模块
- 在Android源码下的development目录下创建一个名为hello的目录
- 在此目录下创建一个名为hello.c的C语言文件,代码如下:
int main()
{
printf("Hello World!\n");
return 0;
}
- 当前目录下创建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查到。
返回Android源码顶层目录进行编译:
make helloworld
需要注意的是make helloworld中的目标名helloworld就是Android.mk文件中由LOCAL_MODULE指定的模块名。
编译结果在Android/out/target/generic/system/bin/helloworld目录下
这样通过adb push将它传送到Android开发板上,再通过adb shell登录到开发板即可执行
注意这里可能会存在Android文件系统没有权限问题,解决方法如下:
adb remount
手工编译C模块
- 在Android编译环境中,提供了showcommands选项来显示编译命令行,可以通过打开这个选项来查看一些编译时的细节。
在具体操作之前,需要使用如下命令把前面中的helloworld模块清除。
make clean-helloworld
上面的make clean-$(LOCAL_MODULE)命令是Android编译环境提供的make clean的方式
使用showcommands选项重新编译helloworld,具体命令如下:
make helloworld showcommands
生成helloworld可执行文件后,同上了