在JNI中使用stl的东西,比如std::string,不是说你的文件是.cpp的然后NDK就会用g++来编译,这家伙根本就不管你的文件是c还是cpp。那么玄机在哪里呢?关键是你的Application.mk文件里面还得指定APP_STL
例如:APP_STL := stlport_static ,规则如下:
# system - 使用默认最小的C++运行库,这样生成的应用体积小,内存占用小,但部分功能将无法支持
# stlport_static - 使用STLport作为静态库,这项是Android开发网极力推荐的
# stlport_shared - STLport 作为动态库,这个可能产生兼容性和部分低版本的Android固件,目前不推荐使用。
# gnustl_static - 使用 GNU libstdc++ 作为静态库
# 使用STLport作为静态库,这项是Android开发网极力推荐的
这个问题真蛋疼啊,困扰了我半天,还好,工程在附件。
编译过程如下:
dr@dr-OptiPlex-3010:~/workspace/StlTest/jni$ ~/android-ndk-r5b/ndk-build clean Clean: jni_stltest [armeabi] Clean: stdc++ [armeabi] Clean: stlport_shared [armeabi] Clean: stlport_static [armeabi] dr@dr-OptiPlex-3010:~/workspace/StlTest/jni$ ~/android-ndk-r5b/ndk-build Compile++ thumb : jni_stltest <= jni_main.cpp StaticLibrary : libstdc++.a Prebuilt : libstlport_static.a <= <NDK>/sources/cxx-stl/stlport/libs/armeabi/ SharedLibrary : libjni_stltest.so Install : libjni_stltest.so => libs/armeabi/libjni_stltest.so dr@dr-OptiPlex-3010:~/workspace/StlTest/jni$
相关推荐
本篇将深入探讨JNI的使用,以及如何在Java、Kotlin与C/C++之间进行调用,并介绍CMakeLists.txt配置文件的常用属性。 首先,Java或Kotlin调用C/C++代码通常涉及以下几个步骤: 1. **定义JNI函数**:在Java或Kotlin...
2. **Application.mk**:此文件用于设置全局的构建选项,例如APP_ABI(支持的CPU架构),APP_PLATFORM(最低Android版本),APP_STL(使用的C++标准库)等。 3. **Java代码**:通常包含一个或多个包含native方法...
`hello-jni`是NDK提供的一个基础示例,帮助开发者了解如何在Android中使用JNI技术。 `hello-jni`项目通常包含以下几个关键部分: 1. **Android.mk**: 这是一个Makefile,定义了本地库的构建规则。在这个文件中,...
使用NDK编译工具链,我们可以在该文件中编写C代码来实现Java的本地方法。例如: ```c++ #include <jni.h> #include extern "C" JNIEXPORT jstring JNICALL Java_com_example_ndkdemo3_MainActivity_stringFromJNI...
4. `test-libstdc++`:可能是测试C++标准库的使用,比如STL容器和算法。 5. `HelloComputeNDK`:可能是一个简单的计算任务示例,演示了如何使用NDK进行高性能计算。 6. `native-activity`:展示如何直接在原生C/C++...
本文将详细讲解如何在Android应用中使用JNI来调用C++/C方法。 首先,我们需要准备Android NDK(Native Development Kit),这是一个用于开发Android原生应用程序的工具集,它提供了编译C和C++代码的能力,以便与...
5. **C++支持**:从Android NDK r8版本开始,NDK支持C++,可以使用STL、C++11特性等。 6. **异常处理**:理解Java和C++之间的异常处理差异,学习如何在本地代码中捕获和抛出异常。 7. **多线程支持**:在本地代码中...
`Application.mk`是项目级别的Makefile,通常用于设置全局编译选项,比如APP_STL(选择STL实现)、APP_ABI(目标CPU架构)等。 在实际应用中,这些文件可能构成了一个简单的JNI项目,实现了Java层调用C/C++代码计算...
【Android五子棋JNI代码】涉及的是Android平台上使用Cocos2d-x框架开发的一个五子棋游戏的原生接口(JNI)部分。JNI,全称为Java Native Interface,是Java平台提供的一种技术,允许Java代码和其他语言写的代码进行...
总结,通过结合使用NDK、JNI和Makefile,我们可以实现在Android应用中高效地调整图片的亮度和对比度,同时模拟出类似QQ离线头像的灰度效果。这种技术不仅适用于图片编辑应用,还可在其他需要高性能图像处理的场景中...
本项目"是男人就下100层"是一款基于Cocos2d-x框架的Android小游戏,其中涉及到JNI的使用,主要是为了实现高性能的计算或者利用C++库来增强游戏性能。 1. **Cocos2d-x框架**:Cocos2d-x是一个开源的、跨平台的游戏...
8. **优化与性能**:使用JNI的主要原因是提升性能,因此在C++代码中,注意优化算法,减少不必要的内存分配和释放,以及利用多线程提高计算密集型任务的执行效率。 总结,JNI在cocos2d-x与Android Studio结合开发中...
APP_STL := c++_static ``` 3. 构建动态库:运行`ndk-build`命令在项目根目录下,这将根据`Android.mk`和`Application.mk`生成对应的.so库。 ### 方法二:CMakeLists.txt 1. **CMakeLists.txt**:从Android ...
首先创建JNI接口,然后在C++侧实现这些接口,使用`JNIEXPORT`和` JNICALL`关键字标记函数。例如: ```java public class JpegTurboUtil { static { System.loadLibrary("jpeg-turbo"); } public native void ...
1. **C++在Android中的应用**:Android NDK提供了C++支持,使得开发者可以使用标准模板库(STL)、多线程、模板等C++特性,同时也可以利用JNI(Java Native Interface)与Java层进行通信。这在处理图形计算、物理...
`Android.mk`定义了编译的目标、依赖项、编译选项等,而`Application.mk`则用于设置全局编译选项,如APP_ABI(应用支持的架构)和APP_STL(使用的C++运行时库)。 4. **JNI函数声明**:在Java类中,需要声明对应的...