Android JNI找不到C标准库头文件

我正在关注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标头都不可见.

enter image description here


enter image description here


解决方法:

为了使其工作,有些事情需要做

>将文件扩展名从.c更改为.cpp,以便ndk将使用g而不是gcc编译文件.
>添加stl配置,例如stl =“stlport_static”,其他选项是gnustl_static,系统等等.我没有尝试过所有这些但我想如果你使用一些基本的东西,如std :: string,这并不重要.
>单击同步按钮,如下面的屏幕截图所示. getcha是即使它说完成同步,也需要一些额外的时间来索引文件并从stl找到标头.所以要耐心,不要急于求成.要有耐心,不要急于求成.我需要大约10秒左右.如果您在菜单栏上找不到此同步,则也可以在工具>下找到它. Android>将Poroject与Gradle文件同步.

enter image description here


>最后,将代码更新为C并测试它:

#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)

如果有人解释这个.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...