ndk学习5: ndk中使用c++

默认情况下ndk不支持标准C++库,异常, rtti等

?

在ndk文档有关于C++ support的详细介绍

?

一. 使用C++标准库

介绍:

默认是使用最小额度的C++运行时库, 在Application.mk中添加APP_STL指明所需要的库

需要注意的是,目标手机或者模拟器上可能没有下面的共享库,此时就需要你作为静态库使用

ndk中各种库的支持情况

?

PS: stlport和gnustl的区别

? ??Android NDK不提供STL的原因应该是因为版权问题。因为标准的GNU STL是由libstdc++提供的,本身虽然是GPL,但是只要不修改它的代码,就可以自由使用。而在Android平台上,因为很多适配上的问题,不经修改的libstdc++是无法直接使用的,所以NDK无法直接提供。STLport没有此类限制,所以是比较好的替代解决方案

?

?

使用stlport:

以使用stlport为例子:

?

1.Application.mk中加入

APP_STL?:=?stlport_static?

? ? PS: 有的手机或者模拟器中可能没有stlport_shared库,运行时可能会报错

?

编写代码:?

#include?<iostream>

#include?<stdio.h>

using?namespace?std;

int?main(int?argc,?char*?argv[])?{

????cout?<<?"Hello?World"?<<?endl;

????return?0;

}?

?

编译完后:

?

stlport需要包含stlport的库进来在

android-ndk-r10b\sources\cxx-stl目录下有对应版本的stl

比如我们要使用stlport 其头文件一般在

E:\Android\android-ndk-r10b\sources\cxx-stl\stlport\stlport

把上面的路径添加到paths and symbols即可

?
?

成功运行:

?

此时可以使用stl中的各种数据结构,比如map

#include?<map>

#include?<iostream>

#include?<string>

using?namespace?std;

int?main(int?argc,?char*?argv[])?{

????map<int,string>?mapStudent;

????mapStudent.insert(map<int,?string>::value_type(1,"bing1"));

????mapStudent.insert(map<int,?string>::value_type(2,"bing2"));

????mapStudent.insert(map<int,?string>::value_type(3,"bing3"));

????mapStudent.insert(map<int,?string>::value_type(4,"bing4"));

????map<int,?string>::iterator?iter;

????for?(iter?=?mapStudent.begin();iter?!=?mapStudent.end();iter++)?{

????????cout?<<?(*iter).first?<<?"?"?<<?(*iter).second?<<?endl;

????}

????return?0;

}?

?

运行结果如下:

?

?

二.使用异常

?

需要注意的几点:

1. 在NDK 5之后才支持C++异常

2. 可以在在android.mk和Application.mk中添加使用异常,

? ? 区别是android.mk是局部的

? ??Application.mk是全局的

?

添加完毕即可使用

#include?<iostream>

using?namespace?std;

int?main(int?argc,?char*?argv[])?{

????try?{

????????cout?<<?"Hello?World"?<<?endl;

????}?catch?(...)?{

????????cout?<<?"error"?<<?endl;

????}

????return?0;

}?

?

运行:

?

?

?

三.使用RTTI

同异常一样,不多做介绍

?

代码:

#include?<iostream>

#include?<typeinfo>

using?namespace?std;

class?CNumber

{

};

int?main(int?argc,?char*?argv[])

{

????CNumber?nNum?;

????cout?<<?typeid(nNum).name()?<<?endl;

????cout?<<?"Hello?World"?<<?endl;

}?

?

运行:

?

?

?

?

?

?

?

?

?

?

?

时间: 2024-10-29 21:17:41

ndk学习5: ndk中使用c++的相关文章

NDK学习二: NDK目录结构

NDK目录结构 NDK下载好之后目录结构如下: 目录名 描述 build   存放和编译相关的脚本文件,最外面的ndk-build就是调用该目录下的makefile文件,其中makefile文件都存放在build/core目录 docs  帮助文档 platforms  存放不同android版本,不同平台架构的头文件和库文件 prebuilt  存放和编译相关工具比如make.exe samples ndk代码例子,用根目录下的ndk-build即可编译 source 源码目录,有一些头文件和

Android NDK学习笔记(一) 为什么要用NDK?

NDK是什么 NDK是Native Development Kit的简称,即本地开发工具包.通过NDK,Android允许开发人员使用本地代码语言(例如C/C++)来完成应用的部分(甚至全部)功能.注意:由于翻译原因,有些地方也把Native翻译为"原生". NDK是SDK的一个补充,可以帮助你做这些事情: 生成可以在ARM CPU,Android 1.5(及以上)平台运行的JNI兼容的共享库. 将生成的共享库放置在应用程序项目路径的合适位置,使其能自动地添加进你最终的(和经过签名的)

ndk学习17: jni之Java调用C&C++

一.Hello World 1. 定义函数原型 native关键字定义的函数即为jni函数 2.生成头文件 切换到src目录执行: (这个过程可以写脚本自动完成,比如自动拷贝到jni目录) javah -jni 包名.类名 在根目录下生成: org_bing_testjni_MainActivity.h 3. 工程中添加jni代码 工程右键->添加native code->输入名字->finish 多了如下文 新建一个Application.mk,配置相关选项(详细查看ndk有关Appl

ndk学习18: JNI之C&C++调用Java

一.Java反射机制 先了解Java反射机制原理 例子网上很多,反射很灵活 二. 在JNI层调Java 用途: Java层逆向比较容易,增加逆向门槛,把调用都写到JNI层,  让Java层无调用关系 注意: C和C++有所不同,这里使用C++作为例子 1. 首先在代码中提供一个ShowLog函数 private void ShowMsg() { Log.d("_BING_", "ShowMsg"); } 2. 在上次的Add例子加入代码 JNIEXPORT jint

NDK学习4: Eclipse HelloWorld

NDK学习4: Eclipse HelloWorld 1.配置Eclipse NDK环境? Window->preferences->android->ndk ? 2.新建Android工程 在工程目录上点右键->Android Tools-> add native support 这个时候工程会多出一个jni目录 ? 3.编辑Hello.cpp #include?<stdio.h> int?main(int?argc,?char*?argv[]) { ??pri

android的ndk学习(1)

android的ndk学习(1) 之前学了一段时间ndk,总觉得要总结一下.ndk使得非常方便地实现java和C与C++代码的相互沟通,合理地掌握使用ndk可以提高应用程序的执行效率,所以对于学习anndroid开发的人来说,ndk是必须掌握的工具.刚刚开始学习的时候是有点兴奋,有点害怕的,兴奋是因为之前学过C++语言,能将学过的东西结合在一起,感觉可以做出更好的东西,害怕的是之前听身边的大神说ndk在android开发中是非常难的内容之一.但是不管怎么说我还是找了本书,看了视频,找了一些电子资

Android NDK学习记录(一)

一.NDK环境在Mac中部署 1.准备eclipse,android sdk安装包,android ndk安装包(http://dl.google.com/android/ndk/android-ndk64-r10-darwin-x86_64.tar.bz2) 2.部署android开发环境 3.部署NDK开发环境(配置环境变量) 二.编写基于NDK的HelloWorld 1.它的作用即是把实现了我们在Java code中声明的native方法的那个libraryload进来,或者load其他什

NDK学习一: 环境搭建Eclipse篇

下载NDK 国内的一个镜像站点 下载速度比较快 http://wear.techbrood.com/tools/sdk/ndk/#Installing 网上搭建环境的方案有很多 1. Eclipse + ADT + NDK 2. AndroidStudio + NDK 3. VS + NDK 4. VS + VisualGDB  (安装完就可以用了,VisualGDB收费) 5. 编辑器(比如sublime) + NDK 不过在以上环境搭建方案之前 我们先配置好NDK_ROOT 配置NDK_RO

Android学习——在Android中使用OpenCV的第一个程序

刚开始学习Android,由于之前比较熟悉OpenCV,于是就想先在Android上运行OpenCV试试 =================================================================================== 1.环境配置 JDK Eclipse ADT CDT Android SDK Android NDK cygwin OpenCV for Android 2.4.9 这部分网上很多,我就不再赘述了,可以参考:http://bl