Ajoutez la fonction "testFunc" appelée de C à [MainActivity.Java].
MainActivity.java
package l.toox.test01;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("native-lib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Example of a call to a native method
TextView tv = findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
}
/**
* A native method that is implemented by the 'native-lib' native library,
* which is packaged with this application.
*/
public native String stringFromJNI();
public void testFunc(){
}
}
Ensuite, la partie qui lit Java à partir de C. Modifiez [Native-lib.cpp] comme suit.
native-lib.cpp
#include <jni.h>
#include <string>
extern "C" JNIEXPORT jstring JNICALL
tugini
JNIEnv *env,
jobject in_thiz) {
jobject my_class = env->NewGlobalRef(in_thiz);
jclass clazz = env->GetObjectClass(my_class);
jmethodID mobj = env->GetMethodID( clazz, "testFunc", "()V" );
env->CallVoidMethod( my_class, mobj );
env->DeleteLocalRef( clazz );
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
(Notez que l'argument est jobject in_thiz.)
Si vous l'exécutez avec cela, vous appelez Java à partir de C. Des ruptures peuvent se produire pendant l'exécution du débogage.
Recommended Posts