我正在关注
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标头都不可见.
最佳答案 为了使其工作,有些事情需要做:
>将文件扩展名从.c更改为.cpp,以便ndk将使用g而不是gcc编译文件.
>添加stl配置,例如stl =“stlport_static”,其他选项是gnustl_static,系统等等.我没有尝试过所有这些但我想如果你使用一些基本的东西,如std :: string,这并不重要.
>单击同步按钮,如下面的屏幕截图所示. getcha是即使它说完成同步,也需要一些额外的时间来索引文件并从stl找到标头.所以要耐心,不要急于求成.要有耐心,不要急于求成.我需要大约10秒左右.如果您在菜单栏上找不到此同步,则也可以在工具>下找到它. Android>将Poroject与Gradle文件同步.
#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());
}
}
现在它应该无缝地工作.去当地,是的!
编辑:
我不知道我们需要将代码置于extern“C”{…}之下.但它似乎很重要,否则,我们会有错误:
java.lang.UnsatisfiedLinkError: No implementation found for void com.yuchen.helloandroidjni.getMsgFromJni() (tried Java_com_yuchen_helloandroidjni_MainActivity_getMsgFromJni)
如果有人解释这个.