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

时间:2015-07-03 02:58:48

标签: 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_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)
   {   

我应该使用哪两个?评论3行或其他2行  我尝试通过备用注释执行两者并获得相同的错误

 // 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());

该库是在src / libs / armeabi / libgnustl_shared.so中创建的

1 个答案:

答案 0 :(得分:0)

首先,你确定.so正在加载吗?如果是的话,那么听起来就像你在Java期望和C ++提供的内容之间存在签名不匹配。我认为您的代码应该类似于:(未经测试)

爪哇:

s = Session()
objects = [
    User(name="u1"),
    User(name="u2"),
    User(name="u3")
]
s.bulk_save_objects(objects)
s.commit()

C ++:

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());
    }
    // ...
}