`
fosa0989
  • 浏览: 110544 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 编译C模块

阅读更多

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_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 查到。每个模块都必须有LOCAL_MODULE_TAGS声明,可选的参数是optional, debug, eng, tests, samples。如果选择optional,此模块在某一产品的所有编译中存在。还需要把LOCAL_MODULE加入产品的PRODUCT_PACKAGES,如果该模块需要加入所有的产品,在build/target/product/core.mk文件中添加。build/target/product/目录下的编译文件指定,产品如何编译,比如包含哪些包和模块。

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” 登录到模拟器终端,就可以执行了。

分享到:
评论

相关推荐

    android studio编译c语言的aar包和.so库

    而在Android Studio中,可以通过多种方式来实现这一目标,其中一种常见的方法是通过编译C/C++代码生成.so库,并进一步打包成AAR(Android Archive)文件的形式进行管理。 #### 创建支持C/C++的Android项目 1. **...

    freetype android 编译so库

    在Android开发中,通常使用NDK(Native Development Kit)来编译C/C++库。确保已经安装了与Android Studio兼容的NDK版本,并配置好环境变量。检查`ndk-bundle`目录,确认NDK已正确安装。 3. **配置项目**: 进入...

    如何单独编译Android源码中的模块

    另外,Android 系统的一些可执行文件,例如 C 编译的可执行文件,放在 out/target/product/generic/system/bin 目录下,动态链接库文件放在 out/target/product/generic/system/lib 目录下,out/target/product/...

    Android编译NativeC的helloworld模块

    ### Android编译Native C的helloworld模块 #### 知识点概述 本篇文章将详细介绍如何在Android环境中构建一个简单的C语言程序——helloworld模块。该模块不仅有助于理解Android的编译系统,而且对于想要深入了解...

    Android编译独立源代码

    ### Android编译独立源代码知识点解析 #### 一、概览 在深入探讨如何编译Android独立源代码之前,我们先来了解下整个过程的基本框架。Android作为一个开源项目,其源代码包含了操作系统的核心部分以及一系列应用...

    如何在Android下编译C程序

    在Android环境下编译C程序涉及到一系列特定的步骤和文件配置。首先,Android编译环境相较于传统编译环境具有一定的复杂性。常规的编译环境通常只有一个顶层目录下的Makefile文件,而Android使用的是统一标准的...

    Android项目编译系统

    Android编译系统使用了一套专门的编译工具,包括Java编译器、Android Asset Packaging Tool (AAPT)、Android NDK等。 一、编译系统的主要组成部分: 1. Java编译器:负责将Java源文件编译成.class字节码文件,然后...

    Android编译系统(四)Android编译系统框架分析及main.mk 分析

    Android编译系统不仅仅处理目标系统二进制文件、Java应用程序的编译、链接、打包等工作,还包括生成各种依赖关系、确保模块变更后的重新编译链接、目标文件系统的生成、配置文件的生成等。它支持多架构(如linux-x86...

    libyuv安卓Android 编译好SO库文件及源代码

    在Android平台上,libyuv被广泛应用于多媒体处理,尤其是在处理视频流时,由于其高度优化的算法,它的性能通常优于ffmpeg中的swscale模块。 本文将详细介绍如何在Android上编译libyuv库,并提供已编译好的适用于arm...

    VLC Android 3.0.0编译 aar

    VLC Android 3.0.0编译aar的相关知识点涵盖了Android应用开发、VLC多媒体播放器的源码编译以及Android应用的库打包格式。VLC是一款开源的跨平台多媒体播放器,其Android版本允许用户在移动设备上流畅地播放各种音频...

    VLC for android编译好的项目

    综上所述,VLC for Android编译项目是一个包含了Android NDK集成、第三方库依赖(如ActionBarSherlock和SlidingMenu)的多媒体播放解决方案。开发者需要具备Android应用开发知识,了解如何导入和管理项目依赖,以...

    android编译系统详解

    在本文档中,我们详细探讨了Android编译构建系统的基础知识,特别是Makefile的书写和脚本语言的应用。要完全理解Android编译系统,首先需要掌握以下几个方面的知识点: 1. Make工具:Make是一个命令行工具,它根据...

    android编译系统框架分析及main.mk分析

    这一系列的功能决定了Android编译系统需要具备支持多架构(如Linux-x86、Windows、ARM等)、多语言(包括汇编、C、C++、Java等)和多编译方式的能力。因此,Android编译系统的设计和实现十分复杂。 Android编译系统...

    Android编译流程_makefile流程

    ### Android编译流程详解——Makefile流程 #### 一、引言 对于任何软件系统而言,深入了解其构建机制是至关重要的。特别是在复杂的操作系统如Android中,掌握编译流程能够帮助开发者更好地理解系统的内部结构和...

    Android 编译文件树1

    本篇文章将深入探讨Android编译文件树的主要组成部分,尤其是根目录下的关键元素。 首先,`Android.bp`文件是Android构建系统的蓝图,用于描述模块的构建规则。它是用一种特定的语言编写的,类似于Makefile,但更...

    android编译系统makefile(Android.mk)写法

    `Android.mk`文件中可以定义多个编译模块,每个模块都由`include $(CLEAR_VARS)`开始,然后定义模块相关的变量,最后以`include $(BUILD_XXX)`结束。`$(CLEAR_VARS)`宏用于清除所有与编译相关的LOCAL_XXX变量,保留...

    android-arm平台ndk交叉编译python

    在Android开发中,有时我们需要在...通过熟练掌握这个过程,你可以为Android应用添加Python支持,或者构建基于Python的Android原生模块。虽然这个过程可能较为繁琐,但一旦完成,就能极大地拓展Android开发的可能性。

    Speex android下编译及DEMO

    2. **android.mk**:这是Android构建系统中的一个Makefile,用于定义模块的编译规则和依赖项,是NDK开发的一部分。 3. **.spx**:这是Speex编码后的文件扩展名。 **压缩包子文件列表解析:** 这些文件是Android...

    Android 源码编译过程

    首先,Android源码主要由Java和C/C++代码组成,包括Linux内核、HAL(硬件抽象层)、框架服务、库、用户界面以及应用程序。整个编译过程分为以下几个主要阶段: 1. **环境配置**:在开始编译之前,你需要设置一个...

Global site tag (gtag.js) - Google Analytics