Android编译环境本身比较复杂,且不像普通的编译环境:只有顶层目录下才有Makefile文件,而其他的每个component都使用统一标准的Android.mk. Android.mk文件本身是比较简单的,不过它并不是我们熟悉的Makefile,而是经过了Android自身编译系统的很多处理,因此要真正理清楚其中的联系还比较复杂,不过这种方式的好处在于,编写一个新的Android.mk来给Android增加一个新的Component会比较简单。

编译Java程序可以直接采用Eclipse的集成环境来完成,这里就不重复了。我们主要针对C/C++来说明,下面通过一个小例子来说明,如何在Android 中增加一个C程序的Hello World

1. $(YOUR_ANDROID)/development 目录下创建hello目录,其中$(YOUR_ANDROID)Android源代码所在的目录。
- # mkdir $(YOUR_ANDROID)/development/hello

2. $(YOUR_ANDROID)/development/hello/目录编写hello.c文件,hello.c的内容当然就是经典的HelloWorld程序:

#include <stdio.h>

int main()
{
printf("Hello World!/n");

return 0;
}

3. $(YOUR_ANDROID)/development/hello/目录编写Android.mk文件。这是Android Makefile的标准命名,不要更改。Android.mk文件的格式和内容可以参考其他已有的Android.mk文件的写法,针对helloworld程序的Android.mk文件内容如下:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= /

hello.c

LOCAL_MODULE := helloworld

include $(BUILD_EXECUTABLE)

注意上面LOCAL_SRC_FILES用来指定源文件;,LOCAL_MODULE指定要编译的模块的名字,下一步骤编译时就要用到;include $(BUILD_EXECUTABLE)表示要编译成一个可执行文件,如果想编译成动态库则可用BUILD_SHARED_LIBRARY,这些可以在$(YOUR_ANDROID)/build/core/config.mk查到。

4. 回到Android源代码顶层目录进行编译:

# cd $(YOUR_ANDROID) && make helloworld

注意make helloworld中的目标名helloworld就是上面Android.mk文件中由LOCAL_MODULE指定的模块名。编译结果如下:

target thumb C: helloworld <= development/hello/hello.c

target Executable: helloworld (out/target/product/generic/obj/EXECUTABLES/helloworld_intermediates/LINKED/helloworld)

target Non-prelinked: helloworld (out/target/product/generic/symbols/system/bin/helloworld)

target Strip: helloworld (out/target/product/generic/obj/EXECUTABLES/helloworld_intermediates/helloworld)

Install: out/target/product/generic/system/bin/helloworld

5.如上面的编译结果所示,编译后的可执行文件存放在out/target/product/generic/system/bin/helloworld,通过”adb push”将它传送到模拟器上,再通过”adb shell”登录到模拟器终端,就可以执行了

更多相关文章

  1. rdp文件和vnc软件
  2. 将程序安装到SD卡
  3. Android so 文件进阶 从dlsym()源码看android 动态链接过程
  4. Android使用JNI生成.so文件并调用(使用传统生成.h的方法)
  5. Android solve设备(手机)旋转过程中出现程序中断问题
  6. android获取正在运行的应用程序
  7. 【Android 开发入门】使用Android模拟器预览调试程序
  8. Android本地视频播放器开发--ffmpeg解码视频文件中的音频(1)

随机推荐

  1. Python 操作系统级别模块Psutil
  2. 有哪些可以提高效率的Git技巧
  3. 小编教你:kartik-v/yii2-grid小部件扩展如
  4. MySQL Trace 案例解析
  5. 如何成为一个优秀的架构师
  6. Java应用程序性能调优技术
  7. 降低Java垃圾回收开销的一些建议
  8. 那些不得不学的Linux命令「建议收藏」
  9. Spring Boot中使用Elastic Job实现定时任
  10. GO语言中Redis的相关知识记录