我正在关注android-studio-jni guide并尝试使用gradle编译C ++本机代码。一切都很好:我可以加载JNI函数,编写C ++类,编译,运行和调试。而且我不需要编写和维护 Application.mk 和 Android.mk makefile;这两个似乎都是由gradle隐式处理的。只有一件事我不明白:如何在标准库中包含C ++头文件?
我想我一定错过了gradle脚本中的内容,但是我找不到关于在这里添加什么的好参考。这是脚本:
android.ndk {
moduleName = "hello-android-jni"
// I tried adding the following, but nothing happens
stl = "stlport_static"
}
屏幕截图显示所有std标头都不可见。
答案 0 :(得分:2)
要使其发挥作用,还需要做些事情:
添加minimize
等stl配置,其他选项包括stl = "stlport_static"
,gnustl_static
等。我还没有尝试过所有这些,但我想这并不重要如果您使用的是system
等基本内容。
点击同步按钮,如下面的屏幕截图所示。 getcha是即使它说完成同步,也需要一些额外的时间来索引文件并从stl找到标头。 请耐心等待,不要急于求成。要有耐心,不要急于求成。我需要大约10秒钟。如果您在菜单栏上找不到此同步,则也可以在工具>下找到该同步。 Android>将Poroject与Gradle文件同步。
最后,将代码更新为C ++并测试它:
std::string
现在它应该无缝地工作。去当地,是的!
编辑:
我不确切地知道我们需要将代码放在#include <jni.h>
#include <iostream>
extern "C" {
JNIEXPORT jstring JNICALL
Java_com_yuchen_helloandroidjni_MainActivity_getMsgFromJni(JNIEnv *env, jobject instance) {
// TODO
std::string message = "Hello World From Jni";
return env->NewStringUTF(message.c_str());
}
}
下面。但它似乎很重要,否则,我们会有错误:
java.lang.UnsatisfiedLinkError:找不到void com.yuchen.helloandroidjni.getMsgFromJni()的实现(尝试过Java_com_yuchen_helloandroidjni_MainActivity_getMsgFromJni)
如果有人解释这个。
答案 1 :(得分:0)
"your-path-to-ndk-bundle"\platforms\android-21\arch-arm\usr\include
我在那里看不到iostream,所以你无法导入它。您可以尝试在其中添加额外的库,并将其添加到其他处理器包含文件夹。