Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java c+中的jni代码+;将在android studio中调用_Java_Android_C++_Java Native Interface - Fatal编程技术网

Java c+中的jni代码+;将在android studio中调用

Java c+中的jni代码+;将在android studio中调用,java,android,c++,java-native-interface,Java,Android,C++,Java Native Interface,请帮助我更正此代码,以便在调用getString12时,它在MainActivity.java(Android studio-1.1.0,gradle-2.2.1)中返回字符串。我得到一个错误getString12找不到?还将生成库(.so)。有人能说代码有什么问题吗 test.cpp //#include "test.h" #include <string.h> #include <jni.h> /*char* getString12(); char* Java_com

请帮助我更正此代码,以便在调用getString12时,它在MainActivity.java(Android studio-1.1.0,gradle-2.2.1)中返回字符串。我得到一个错误getString12找不到?还将生成库(.so)。有人能说代码有什么问题吗

test.cpp

//#include "test.h"
#include <string.h>
#include <jni.h>
/*char* getString12();
char* Java_com_example_myapplication_Application_getString12()
{   char x[80]="Hello World!!!";
    char *s1 = new char [sizeof(x)];
     strcpy(s1,x);
     return s1;
}*/
extern "C" {
    JNIEXPORT jstring JNICALL Java_com_example_myapplication_MainActivity_getString12(JNIEnv *env,
                                                     jobject obj)
   {   

该库是在src/libs/armeabi/libgnustl_shared中创建的。因此

首先,您确定正在加载.so吗?如果是,那么听起来就像你在java期望和C++所提供的东西之间有一个签名错误匹配。我认为你的代码应该看起来像:(未测试)

爪哇:

C++:

#包括
外部“C”JNIEXPORT jstring JNICALL Java\u com\u示例\u myapplication\u MainActivity\u getString12(JNIEnv*env,jobject self){
返回env->NewStringUTF(“来自getString12()的Hello”);
}

如何在Java中声明
getString12
-函数?签名的包部分(
com\u example\u myapplication
)是否与包的名称匹配?TextView字段=(TextView)findViewById(R.id.text);field.setText(getString12());java文件出现在MyApplication2/app/src/main/java/main活动中。我觉得您的包名是then
com.example.MyApplication2
-如果这是正确的,那么您需要更改
getString12()
-函数的签名以包含“2”在名称中-
Java\u com\u example\u myapplication2\u main activity\u getString12
。对不起,我的错误是我的包是com.example.myapplicationYes,我的代码与您的类似!我不明白你说的是什么意思,所以是装的。在libs文件夹中创建一个.so文件。我想测试一下,图书馆是否在工作。让我们用一个稍微拉长的类比:假设你有一本书,我们把它叫做
yourlibrary
。你把它放在朋友Java旁边的桌子上,让他向你解释章节
getString12
。他从未读过这本书,也无法回答你的问题,因此你告诉他首先使用
System.loadLibrary(“yourlibrary”)
打开这本书。他知道了,并且读了索引,现在他知道了什么(和在哪里)
getString12
,下次你问的时候,他会很高兴地告诉你这一切。哇!谢谢你可爱的解释。我也这样做了,我添加了java部件的外观!请看一看。
 // char sk[30]="hello-world!!!";
//        const char *v = (const char *)sk;
//        return (*v)->NewStringUTF(env,"Hello from C++ JNI !");


         jstring x="hellllooooo!!!!";  
        return x;
    }
}


MainActivity.java
static{
        System.loadLibrary("gnustl_shared");
    }

    public native String getString12();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView field = (TextView)findViewById(R.id.text);
        String f=getString12();
        field.setText(getString12());
package com.example.myapplication;

public class MainActivity extends Activity {
    static {
        System.loadLibrary("yourlibraryname");
    }

    public native String getString12();

    // ...
    public void someFunction() {
        TextView field = (TextView)findViewById(R.id.text);
        field.setText(getString12());
    }
    // ...
}
#include <jni.h>

extern "C" JNIEXPORT jstring JNICALL Java_com_example_myapplication_MainActivity_getString12(JNIEnv* env, jobject self) {
    return env->NewStringUTF("Hello from getString12()");
}