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