`
isiqi
  • 浏览: 16711417 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

阅读更多

Android编译环境编译Native 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)/external/hello/目录编写hello.c文件,hello.c的内容当然就是经典的HelloWorld程序:

#include
int main()
{
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 := 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”登录到模拟器终端,就可以执行了

分享到:
评论

相关推荐

    Android编译NativeC的helloworld模块

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

    freetype android 编译so库

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

    android-arm平台ndk交叉编译python

    这时,我们就需要用到Android NDK(Native Development Kit)进行交叉编译,将Python编译为适用于Android ARM架构的二进制代码。本文将详细讲解如何在Android ARM平台上使用NDK工具进行Python的交叉编译。 首先,...

    Android编译环境

    Android编译环境是构建Android应用或系统组件的关键组成部分,它涉及到一系列步骤和工具,使得开发者能够在不同的硬件和软件平台上开发、编译、测试和调试Android应用程序。以下是对Android编译环境的详细说明: 1....

    android P android9源码编译.ipr.iml文件

    总的来说,`.ipr`和`.iml`文件在Android P源码编译过程中起着关键作用,它们帮助开发者在Android Studio环境中高效地管理和编译大规模的源代码项目。通过理解这些文件的作用,开发者可以更流畅地进行源码级别的调试...

    Android项目编译系统

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

    windows protobuf android 编译.doc

    为了能够在 Windows 平台上为 Android 编译 Protobuf,我们需要配置 Android NDK(Native Development Kit)环境。具体步骤如下: 1. **下载并安装 Android NDK**:访问 Android 官方网站下载适合 Windows 系统的 ...

    Android 项目中嵌入 ReactNative

    6. **设置JS打包服务器**:启动ReactNative的打包服务,可以使用`react-native run-android`命令,这会自动编译JS代码并启动服务器。 7. **桥接配置**:如果需要与原生代码交互(如调用Android API),需要在Java端...

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

    ### Android Studio 编译 C 语言的 AAR 包与 .so 库 #### 背景介绍 在Android开发过程中,为了优化某些计算密集型的任务(如图像处理、音频处理等),通常会采用C/C++语言编写核心算法。这是因为相较于Java,C/C++...

    VLC for android编译好的项目

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

    Android 编译文件树1

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

    Android项目中集成react native页面

    3. **创建React Native模块**:在React Native项目中,你需要创建一个新的React组件,例如`index.android.js`,在这个文件中定义你的React组件。这个组件将作为Android应用中的一个页面。 4. **添加依赖**:在`...

    【Mac】Caffe 编译android so文件记录

    标题【Mac】Caffe 编译android so文件记录表明本文将会讲述在Mac操作系统平台上,如何搭建环境并编译生成适用于Android平台的Caffe库文件(so文件)。Caffe是一个深度学习框架,专注于速度和模块化,广泛应用于图像...

    android ffmpeg h264编译脚本

    3. **Android编译环境搭建** 在编译FFmpeg之前,首先需要安装并配置Android Studio、NDK、以及JDK。设置好`ANDROID_NDK_HOME`环境变量,指向NDK的安装路径。 4. **配置脚本** "build-scripts-of-ffmpeg-x264-for-...

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

    其中,`Android.mk`文件是Android构建系统的核心部分,它是一个Makefile,用于指导NDK(Native Development Kit)如何处理C/C++代码。本文将深入探讨`Android.mk`文件的写法和关键知识点。 1. **LOCAL_PATH变量的...

    Android alsa util 和 lib 源码,Android.mk已写好,编译通过

    在`alsa-utils`和`alsa-lib`的编译过程中,`Android.mk`应适配Android的NDK(Native Development Kit),指定正确的交叉编译器路径和库路径。 2. **编译通过**:当提到“编译通过”,意味着`Android.mk`已经成功地...

    opencv_contrib + opencv 编译so 库及使用native方法 opencv.zip

    1. **环境配置**:安装Android NDK(Native Development Kit),它提供了编译C/C++代码所需的工具链。还需要设置Android SDK,并配置NDK路径、Android平台版本等。 2. **获取源码**:从OpenCV官方网站下载源代码,...

    PJSIP2.7.1 编译好的一个demo 在android studio上实现

    描述中提到的"在CentOS下编译成功的一个VOIP demo"表明,开发者在CentOS操作系统上完成了PJSIP的编译过程,生成了适用于Android的库文件,这通常涉及设置交叉编译环境,配置NDK(Native Development Kit)以及处理...

    DIAL-Android编译运行过代码

    3. **编译过程**:在Android环境下编译DIAL代码,通常需要配置Android NDK(Native Development Kit),它允许开发者使用C/C++编写原生代码,并将其集成到Android应用中。编译过程中,可能遇到的错误包括依赖库缺失...

Global site tag (gtag.js) - Google Analytics