关闭

Android项目中编译 C的模块

1090人阅读 评论(0) 收藏 举报

 

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)/external/hello/目录编写hello.c文件,hello.c的内容当然就是经典的HelloWorld程序:
#include <stdio.h>

int main(int argc, char **argv)
{
    printf("Hello World!/n");

return 0;
}
 

 
3. 在$(YOUR_ANDROID)/external/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_TAGS := optional

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目录

 

启动Android模拟器,用如下命令将文件push到Android模拟器上:

    注意:  要把SDK目录里的tools目录放到PATH环境变量中.

adb shell mkdir /dev/sample
adb push hello /dev/sample/hello

adb shell chmod 777 /dev/sample/hello

先创建 /dev/sample目录,再将编译好的hello上传上去,最后将hello改成可执行的。

再进入命令行模式,进入Android的shell环境:

adb shell

#cd /dev/sample

#./hello

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

只用Android Studio完成应用类库编译及加载

常常会有些开源类库,如PullTo
  • langyuewu
  • langyuewu
  • 2014-09-23 00:42
  • 5635

Gradle构建多模块项目

1. 创建项目 首先创建项目,名称为 test: mkdir test && cd test gradle init 这时候的项目结构如下: ➜ test tree . ├─...
  • LANGZI7758521
  • LANGZI7758521
  • 2016-07-18 11:17
  • 1357

例说如何编译android模块

首先介绍一下android的编译系统。与Linux kernel的编译系统相比较,内核依赖于makefile文件,从顶层的makefile递归调用子目录中的makefile文件,完成对源码文件的编译。...
  • seek_0380
  • seek_0380
  • 2015-12-31 14:01
  • 1251

Android编译Native C的helloworld模块

Android编译环境本身比较复杂,且不像普通的编译环境:只有顶层目录下才有Makefile文件,而其他的每个component都使用统一标准的Android.mk. Android.mk文件本身是...
  • chen_cheng_fly
  • chen_cheng_fly
  • 2011-09-20 08:44
  • 145

详述Android照相功能的实现(基于飞凌S3C6410开发板+单独编译安卓模块)

http://bbs.gkong.com/archive.aspx?id=301714 前些日子买了块飞凌OK6410的开发板+OV9650摄像头模块准备做Android应用开发。自己手里虽有现...
  • Stephen_yu
  • Stephen_yu
  • 2016-12-06 10:35
  • 825

android2.2下编译c模块

Android SDK相当强大和全面了,但有时你的应用程序可能需要更多的功能,需要在android的linux基础层面上运行应用程序。今天研究了如何在android环境下编译c模块,提供以下2种方法:...
  • arm12580
  • arm12580
  • 2011-12-02 11:58
  • 97

Android编译环境(1) - 编译Native C的模块

Android编译环境本身比较复杂,且不像普通的编译环境:只有顶层目录下才有Makefile文件,而其他的每个component都使用统一标准的Android.mk. Android.mk文件本身是比...
  • liwendovo
  • liwendovo
  • 2012-08-16 15:17
  • 654

Android编译环境(1) - 编译Native C的helloworld模块

Android编译环境(1) - 编译Native C的helloworld模块 [from: http://www.top-e.org/jiaoshi/html/?157.html] A...
  • hylaking
  • hylaking
  • 2011-07-27 16:45
  • 699

转 Android编译环境(2) - 手工编译C模块

Android编译环境(2) - 手工编译C模块上一篇中(即《Android编译环境(1) - 编译Native C的helloworld模块》),我们试用了通过标准的Android.mk文件来编译C...
  • flyingqr
  • flyingqr
  • 2011-01-21 11:16
  • 473

Android编译环境编译Native C的模块

Android编译环境编译Native C的模块 Android编译环境本身比较复杂,且不像普通的编译环境:只有顶层目录下才有Makefile文件,而其他的每个component都使用统一标准的An...
  • myspor
  • myspor
  • 2011-03-30 17:39
  • 418
    个人资料
    • 访问:1078531次
    • 积分:12959
    • 等级:
    • 排名:第1217名
    • 原创:196篇
    • 转载:109篇
    • 译文:1篇
    • 评论:448条
    文章分类
    文章存档