[JAVA] Verwenden Sie nativen Code unter Android

Als ich das letzte Mal die Einstellung von OpenGL ES erklärt habe, dachte ich diesmal, ich würde fortfahren, aber ich fand, dass C / C ++ - Code unter Android verwendet werden kann Machen Sie also einen Umweg.

Da der Code von OpenGL überwiegend C / C ++ ist, habe ich erwartet, dass "die Assets verwendet werden können!", Aber die Verwendung war schwieriger als ich es mir vorgestellt hatte. Ich habe noch nicht alles herausgefunden, aber hier ist eine Zusammenfassung dessen, was ich verstehe.

Ich habe nicht viele Informationen über das neueste Android Studio, daher versuche ich, etwas falsch zu finden. Ich würde mich freuen, wenn Sie auf Fehler hinweisen könnten.

Vorbereitung

Bereiten Sie Android Studio 2.2 vor.

In Android Studio 2.2 wird beim Erstellen eines neuen Projekts ein Kontrollkästchen "Möchten Sie C / C ++ verwenden?" Angezeigt. Aktivieren Sie es daher zuerst.

c.png

Überprüfen Sie die Verzeichnisstruktur

Überprüfen Sie die Konfiguration des neuen Projekts. Ändern Sie die Projektstruktur links von "Android" in "Projekt", damit Sie alle Dateien sehen können.

Es ist in Ordnung, wenn Sie die folgenden Dateien haben.

Versuche zu bauen

Sobald Sie es erstellt haben, sollte eine Textansicht auf dem Bildschirm angezeigt werden. Sie können sehen, dass der Code in cpp / native-lib.c von MainActivity.java aufgerufen wird.

public class MainActivity extends AppCompatActivity {

    // native-lib.c scheint eine Bibliothek beim Kompilieren zu sein, und ich lade sie hier.
    //Ist es so etwas wie Import?
    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 = (TextView) findViewById(R.id.sample_text);
        tv.setText(stringFromJNI());
    }

    /**
     * native-lib.Es scheint die in c implementierte Funktion zu definieren.
     */
    public native String stringFromJNI();
}

Überprüfen Sie native-lib.cpp

Ich denke, der folgende Code ist standardmäßig geschrieben. Betrachtet man diesen Code, Es scheint, dass das Paket, der Projektname und der Funktionsname mit einem Unterstrich verbunden sind. Vielleicht ist das das Format.

Es scheint, dass es durch die Beschreibung definiert ist. Der Rückgabewert hat auch die Form "jstring". Ich denke, dies war ein Android NDK oder ein JNI-Typ (Java Native Interface).

#include <jni.h>
#include <string>

extern "C" 
jstring
Java_com_test_opengl_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

Definieren wir eine Testfunktion.

Ändern Sie zunächst wie folgt, sodass externes "C" auf das Ganze angewendet wird.

extern "C" {

//Stellen Sie die Funktion hier ein.

}

Schreiben Sie gegebenenfalls eine Testfunktion. Die Argumente sind Standard, geben Sie also dieselben ein.

extern "C" {

	//Die Beschreibung von stringFromJNI wird weggelassen

    void
    Java_quad_jp_opengl_MainActivity_sayHello(JNIEnv *env, jobject){
        std::cout << "Hello World" << std::endl;
    }
}

Natürlich ist die Funktion auch für MainActivity definiert.

public native void sayHello();

Als ich es baute, endete es ohne Fehler, ich wusste nicht, wo ich die Ausgabe von cout ... orz sehen sollte

Im Moment weiß ich, wie man den Prozess auf der C-Seite ausführt, also ändern wir den vorherigen Code. Ich werde es später hier hinzufügen.

Referenzinformationen

Android NDK (Offizielle Seite mit detaillierter Einstellungsmethode)

Einige Seiten wurden übersetzt, aber die Übersetzung ist nicht gut genug und etwas verwirrend. Hinzufügen von C / C ++ - Code zu Ihrem Projekt

Recommended Posts

Verwenden Sie nativen Code unter Android
Verwenden Sie die serielle Kommunikation unter Android
ReactNative Android Bridge Kommentar
Verwenden Sie perltidy unter CentOS 8
[Android] Hinweise zu XML
Verwenden Sie mod_auth_cas unter CentOS 8
Verwenden Sie Corretto 11 mit Heroku
Verwenden Sie cpplapack mit Ubuntu
[Android Studio] Ich möchte eine Maven-Bibliothek unter Android verwenden
Passen Sie die Listenansicht auf Android an
Mehrteilige Übertragungsbibliothek auf Android
ROS App Entwicklung auf Android
Punkt 66: Verwenden Sie native Methoden mit Bedacht
Verwenden Sie Java, das in Android Studio enthalten ist, um React Native zu erstellen
Verwendung von PlantUML mit Visual Studio Code (erstellt am 30. Oktober 2020)
Verwenden Sie PlantUML mit Visual Studio Code
Lesen und generieren Sie QR-Code [Android]
Ereignisbehandlung mit RxBus unter Android
Wie man eine Ansicht auf Android "aushöhlt"
[Android] Holen Sie sich das Datum von Montag
Verwenden Sie Docker Compose unter Windows 10 Home
Verwendung von Ruby on Rails
Verwendung von Bio-Formaten unter Ubuntu 20.04
Watson Assistant (ehemals Conversation) auf Android
Hinweise zum Aufrufen von Installer in der Android App
Einfach zu bedienender Cloud Firestore (Android)
Speichern Sie ArrayList mit GSON unter Android
Verwenden Sie den Befehl iostat unter CentOS 8
Verwenden Sie die Vervollständigung in Eclipse auf dem Mac
[Android] Empfangen Sie die Absicht mit Broadcast Reciever
[Android] Konvertieren Sie Android Java-Code in Kotlin
Verwenden Sie Docker CE (Official) mit CentOS 8
Implementieren Sie die Welligkeitsdarstellung in Bildern auf Android
Beschleunigen Sie die Erfassung von Standortinformationen unter Android
Was war keine faire Verwendung der Java-API-Umleitung unter Android?