Java c+中的jni代码+;将在android studio中调用
请帮助我更正此代码,以便在调用getString12时,它在MainActivity.java(Android studio-1.1.0,gradle-2.2.1)中返回字符串。我得到一个错误getString12找不到?还将生成库(.so)。有人能说代码有什么问题吗 test.cppJava 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
//#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活动中。我觉得您的包名是thencom.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()");
}