Von Java nach C und von C nach Java in Android Studio

Es ist einfach, C von Java aus aufzurufen, wenn NDK in Android Studio verwendet wird, aber manchmal möchte ich Java von C aus aufrufen, also ein Memorandum (Ich benutze Android Studio 3.4.1) ■ Setp1: Erstellen Sie ein Projekt

2019-05-29 (1).png Erstellen Sie ein Projekt mit "File" "New" "New Projekut" von Android Studio. 2019-05-29 (3).png Dieses Mal möchte ich C von Java aus aufrufen, also "Native C ++" auswählen und auf "Weiter" klicken, um zum nächsten Bildschirm zu gelangen 2019-05-29 (4).png Name ist diesmal angemessen "test01" Geben Sie das zu erstellende Projektverzeichnis mit Speicherort speichern an Die Sprache wird in "Java" erstellt. Wenn die Einstellungen abgeschlossen sind, klicken Sie auf "Weiter", um den nächsten Bildschirm anzuzeigen. 2019-05-29 (5).png Wählen Sie hier einfach "Fertig stellen". (Auf diesem Bildschirm können Sie C ++ 11 oder C ++ 14 verwenden, aber Sie können es später einstellen, also ignorieren Sie es.) 2019-05-29 (6).png Als ein solcher Bildschirm angezeigt wurde, konnte ich vorerst ein Projekt erstellen. ■ Setp2: Java zu C.

Wenn das Projekt erstellt wird, ist es die Quelle für den Aufruf von C aus Java. Wenn Sie es ausführen, wird "stringFromJNI ()" von "MainActivity" aufgerufen, sodass "Java_l_toox_test01_MainActivity_stringFromJNI" in native-lib.cpp aufgerufen wird. (Lassen Sie uns die Details separat studieren) ■ Schritt 3: Von C nach 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(){
    }
}

Als nächstes der Teil, der Java aus C liest. Ändern Sie [Native-lib.cpp] wie folgt.

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

(Beachten Sie, dass das Argument jobject in_thiz ist.)

Wenn Sie es damit ausführen, rufen Sie Java von C aus auf. 2019-05-29 (10).png Während der Debug-Ausführung können Unterbrechungen auftreten.

Recommended Posts

Von Java nach C und von C nach Java in Android Studio
Siehe C ++ im Android Studio-Modul (Java / Kotlin)
Die Richtung von Java in "C ++ Design and Evolution"
Verwendung von ExpandableListView in Android Studio
Quelle zur Anzeige des Zeichenarrays mit numberPicker in Android Studio (Java)
[Android] Konvertieren Sie Map in JSON mit GSON mit Kotlin und Java
Hinweise zu Android Studio
3 Möglichkeiten zum Importieren von Bibliotheken in Android Studio
Unterschiede beim Schreiben von Java-, C # - und Javascript-Klassen
Repräsentiert "nächster Tag" und "vorheriger Tag" in Java / Android
AtCoder ABC 111 C Hash-Sortierung In Ruby, Perl und Java gelöst
[Android / Java] Bildschirmübergang und Rückgabeverarbeitung in Fragmenten
[Android Studio] So ändern Sie TextView in eine beliebige Schriftart [Java]
Organisieren Sie Builds in C ++ / Java- und Win / Linux-Kombinationen
Eindrücke und Zweifel an der erstmaligen Verwendung von Java in Android Studio
[Android Studio] [Java] So fixieren Sie den Bildschirm vertikal
Asynchrone Verarbeitung und Web-API-Integration in Android Studio
In der Abbildung verstandene Java-Klassen und -Instanzen
Java mit Visual Studio Code
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Reproduzieren Sie die Java-Enumeration in C #
C # und Java überschreiben Story
[Android Studio] Ich möchte Einschränkungen für die in EditText [Java] registrierten Werte festlegen.
Lösen mit Ruby, Perl und Java AtCoder ABC 113 C Referenz
[Java] Ändern Sie Sprache und Gebietsschema mit JVM-Optionen in Englisch
Verwenden Sie Java, das in Android Studio enthalten ist, um React Native zu erstellen
Was ist in "Java 8 bis Java 11" passiert und wie wird eine Umgebung erstellt?
Aufrufen und Verwenden der API in Java (Spring Boot)
Sie verwenden derzeit Java 6. Lösung in Android Studio Gradle
Gründe, Servlet und JSP in der Java-Entwicklung getrennt zu verwenden
So entwickeln und registrieren Sie eine Sota-App in Java
Unterschiede im Umgang mit Zeichenfolgen zwischen Java und Perl
Versuchen Sie, Android Hilt in Java zu implementieren
Lesen Sie die Java-Eigenschaftendatei in C #
Multithreaded passend zur [Java] Vorlage
Beispiel für Codierung und Decodierung in Java
Java, JavaScript, C # (Unterschied in der Zuordnung)
Wie man JAVA in 7 Tagen lernt
CGI in C und Dart: Einführung (1)
Fügen Sie "@ SuppressWarnings" automatisch in Android Studio ein
OkHttp3 (GET, POST) in Android Studio
[Android Studio] [Java] Memos und Links lernen
Protokollausgabe in Datei in Java
StringBuffer- und StringBuilder-Klasse in Java
Verstehe gleich und hashCode in Java
Wie verwende ich Klassen in Java?
So benennen Sie Variablen in Java
Versuchen Sie, Yuma in Java zu implementieren
Wiedereinführung von Java8, das seit Android Studio 2.4 verfügbar ist
Mit Java verschlüsseln und mit C # entschlüsseln
Hallo Welt in Java und Gradle
So verketten Sie Zeichenfolgen mit Java
Wenn Sie Java-Bibliothekstests mit Spock in mehreren Modulen mit Gradle in Android Studio 3 implementieren möchten
Ich habe versucht, eine einfache Karten-App in Android Studio zu erstellen
Einführung in die Android App-Entwicklung 1 Installieren von JDK und Android Studio für Mac
Feststellen, ob eine benutzerdefinierte Tastatur in Android Studio (Java) aktiviert ist
So implementieren Sie die Datumsberechnung in Java
So implementieren Sie den Kalman-Filter mit Java
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas