Créez un projet avec "Fichier" "Nouveau" "Nouveau Projekut" d'Android Studio.
Cette fois, je veux appeler C depuis Java, alors sélectionnez "Native C ++" et cliquez sur "Suivant" pour passer à l'écran suivant
Le nom est approprié cette fois "test01"
Spécifiez le répertoire du projet à créer cette fois avec l'emplacement d'enregistrement
La langue est créée en "Java", et lorsque les paramètres sont terminés, cliquez sur "Suivant" pour afficher l'écran suivant.
Ici, sélectionnez simplement "Terminer".
(Sur cet écran, vous pouvez définir pour utiliser C ++ 11 ou C ++ 14, mais vous pouvez le définir plus tard, alors ignorez-le)
Lorsqu'un tel écran apparaît, j'ai pu créer un projet pour le moment.
■ Setp2: Java vers CAjoutez 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