Android操作系统由linux的内核和java的UI构成。但在已往的Android系统上,一般只能用java程序进行开发。若要使用C/C++,通常是将C/C++程序做成lib再由java来调用。理论上说,android上是可以直接用C/C++开发的,因为底层的系统就是linux内核。但以前发布的android NDK,最多是可以用C和最基本的C++进行开发,不能使用STL。所以也就有了Android NDK 的Crystax版本。
所幸的是,最新发布的Android NDK R5版本已支持C++的STL开发了。使用NDK R5编译带STL的C++程序过程比较简单,简要过程说明如下:
1、下载最新的Android SDK,下载Android NDK R5版本。
2、如是在windows平台下需要下载安装Cygwin,用来模拟linux的命令行环境。
3、打开Cygwin,进入到Android NDK R5的路径。声明NDK变量:
export NDK=/path to android NDK R5
4、声明gcc和g++的路径。
5、为要编译的C++程序建一个文件夹,如myproject。在myproject下再建一个jini文件夹,将源代码放在这个文件夹下,myproject/jini。
mkdir myproject
mkdir myproject/jini
6、在jini文件夹下建两个分别名为:android.mk 和 application.mk文件。android.mk类以于C++程序的makefile,application.mk则指明当前程序依赖的库。
android.mk的示例为:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := my_first_app #指明C++程序编译出的可执行程序的名称
LOCAL_SRC_FILES := my_first_app0.cpp \ #指明要编译的源文件,可以有很多个
my_first_app1.cpp \
…
include $(BUILD_EXECUTABLE)#表明编译的是可执行程序
/**************************************************************************/
application.mk的示例为:(在application.mk中指明STL库)
APP_STL := stlport_static
这里选STL库时有三个选项:
system -> Use the default minimal C++ runtime library.
stlport_static -> Use STLport built as a static library.#一般使用这个
stlport_shared -> Use STLport built as a shared library.
7、在myproject目录用android的NDK build工具编译C++程序:
cd myproject
$NDK/ndk-build
如果程序没错的话,会编译出android的可执行程序,位置在myproject/libs/armeabi/my_first_app
8、将编译出来的my_first_app放到手机或是模拟器上运行。到Android SDK的tools目录下找到adb.exe,在windows的cmd上运行adb.exe。
用adb.exe将my_first_app程序push到手机或模拟器的/data/local目录上:
adb.exe push myproject\libs\armeabi\my_first_app /data/local。
9、通过adb,在手机上运行my_frist_app:
在cmd上运行:
adb.exe shell
由此进入到手机的linux终端上,接下来再更改my_first_app的权限使其可以运行:
cd /data/shell
chmod 777 my_first_app
./my_first_app //如果没错的话,这一步即可运行my_first_app
至此在android上编译含STL的C++程序的过程结束。没想象中的复杂,不过也没那么简单。
原创文章,转载请注明: 转载自点滴成河
本文链接地址: 如何在Android平台下编译带STL的C++程序
分享到:
相关推荐
《Android C++高级编程:使用NDK》是一本深度探讨Android平台上C++开发技术的权威著作,完整版带有书签,方便读者随时查阅和学习。本书主要针对Android开发者,特别是那些希望利用C++来提升应用性能、降低内存占用...
在Android平台上,SDL (Simple DirectMedia Layer) 是一个流行的开源跨平台开发库,它为游戏、多媒体和其他实时应用程序提供底层访问图形、音频和输入设备。本文将深入探讨如何在Android环境下编译和运行SDL源码,...
本篇文章将详细讲解如何在Android Studio 2.2.2环境下,利用CMake来编译并集成FFmpeg库。 首先,FFmpeg是一个开源的跨平台多媒体框架,它包含了多种用于处理音频、视频的库,如libavcodec(编码/解码)、...
《Android C++高级编程:使用NDK》是一本专注于探讨如何在Android平台上进行C++开发的专业书籍。Android NDK(Native Development Kit)是Google提供的一个工具集,它允许开发者使用原生代码(如C和C++)来编写部分...
在安卓(Android)平台上,开发过程中有时需要利用C++代码来提升性能或利用已有的C++库。本资料包详细介绍了如何在Android项目中调用C++代码以及C++代码如何反向调用Java源码,这对于理解Android的Native层编程至关...
最终,本书的目标是使读者能够在掌握C/C++语言和跨平台开发工具的基础上,学会利用各种技术手段编写可在Windows、MacOSX、iOS、Android和Linux等主流平台上运行的跨平台程序。通过理论与实践相结合的方式,书中将...
《Android C++高级编程使用NDK》是一本深入探讨如何在Android平台上利用C++进行高效开发的专业书籍。这本书源码的提供,对于开发者来说是一份宝贵的参考资料,它涵盖了多个章节的示例代码,帮助读者更好地理解和实践...
为了能够在 Windows 平台上为 Android 编译 Protobuf,我们需要配置 Android NDK(Native Development Kit)环境。具体步骤如下: 1. **下载并安装 Android NDK**:访问 Android 官方网站下载适合 Windows 系统的 ...
首先,你需要理解Android的NDK(Native Development Kit),这是一个用于开发原生C/C++代码的工具集,使得我们可以在Android平台上使用像FFmpeg这样的C/C++库。在开始编译之前,确保你已经安装了Android NDK,并配置...
2. **C++在Android中的应用**:C++是Android NDK支持的主要语言,其强大的面向对象特性、模板和STL库使得它在处理高性能计算、游戏引擎、多媒体处理等方面具有优势。 3. **JNI(Java Native Interface)**:JNI是...
在Windows环境下进行Android开发时,有时我们需要利用NDK(Native Development Kit)来编译C或C++源代码,以实现一些高性能或者与硬件紧密相关的功能。在这个过程中,CMake是一种常用的构建系统,它能帮助我们跨平台...
在Android开发中,NDK(Native Development Kit)允许开发者使用C和C++原生代码编写部分应用程序,提高性能或利用特定硬件功能。"libmupdf.so"作为NDK的一部分,是用C语言编写的,它提供了一个接口,使得Android应用...
在Android平台上,虽然Java是主要的开发语言,但C++可以通过NDK(Native Development Kit)来使用,以实现对性能敏感的部分或利用已有的C/C++库。 描述中的"C+android+c++"没有提供具体细节,因此我们将从一般的...
4. **执行编译**:在`Android.mk`所在的目录下,执行`ndk-build`命令,这将会生成一个适用于Android平台的静态库文件(通常为`libiconv.a`)。 5. **链接库到项目**:将生成的`libiconv.a`库添加到你的Android项目...
用 C++ 11/14 编写的跨平台 DSP 库。该库利用 C++ 模板的强大功能来实现一套完整的 DSP 算法。 eDSP(简易数字信号处理)是一种用现代 C++ 编写的数字信号处理框架,它实现了数字信号处理、音频工程和电信系统中...
在Android开发中,`libunwind`是一个关键的库,主要用于堆栈回溯和调试。...通过`Android.mk`和`Android.build.mk`文件,开发者能够精确控制编译过程,确保`libunwind`在Android平台上的正确运行。
`Android.mk`定义了编译的目标、依赖项、编译选项等,而`Application.mk`则用于设置全局编译选项,如APP_ABI(应用支持的架构)和APP_STL(使用的C++运行时库)。 4. **JNI函数声明**:在Java类中,需要声明对应的...
Boost C++ 库是C++开发者广泛使用的开源...总的来说,"Android port of Boost C++ Libraries.zip" 提供了一个在Android平台上使用Boost库的机会,让开发者能够利用C++的强大力量,开发出更高效、功能更丰富的应用程序。
6. **C++支持**:NDK支持C++11及更高版本,以及一些C++标准库,如STL,这使得C++开发者能在Android平台上更好地工作。 7. **LLVM/Clang支持**:NDK引入了LLVM/Clang作为替代GCC的编译器,提供了更好的性能和更现代...
《Android C++高级编程 使用NDK完整版》是一本深入探讨如何在Android平台上利用C++进行高级开发的著作。NDK(Native Development Kit)是Google提供的一个工具集,允许开发者用原生代码(如C++)来编写部分或全部...