Rufen Sie Java von C ++ auf Android NDK auf

Überblick

Beachten Sie, dass Sie ** Java ** von ** C ++ ** in der ** OpenGL ES-Anwendung (Android, iOS) ** von ** Visual Studio 2017 ** aufrufen.

Umgebung

Inhalt

Für bestehende Klassen

auto env = state->activity->env;
auto vm = state->activity->vm;

vm->AttachCurrentThread(&env, NULL);

jstring str = env->NewStringUTF("abc");

jclass     cls = env->FindClass("java/lang/String");
jmethodID  mid = env->GetMethodID(cls, "toCharArray", "()[C");
jcharArray ary = (jcharArray)env->CallObjectMethod(str, mid);

vm->DetachCurrentThread();

Für Benutzerklasse

** [Projektname] .Packaging ** Java-Quelle im Ordner ** src ** des Projekts hinzufügen

Test.java


package com.test;

public class Test
{
    public boolean test()
    {
        return true;
    }
}

Setzen Sie application: android: hasCode in AndroidManifest.xml auf true

AndroidManifest.xml


<application android:label="@string/app_name" android:hasCode="true">

Aufruf mit NativeActivity: getClassLoader

https://stackoverflow.com/questions/14586821/android-flurry-integration-with-ndk-app http://archive.is/QzA8#selection-471.0-507.81

auto env = state->activity->env;
auto vm = state->activity->vm;

vm->AttachCurrentThread(&env, NULL);

jclass activityClass = env->FindClass("android/app/NativeActivity");
jmethodID getClassLoader = env->GetMethodID(activityClass,"getClassLoader", "()Ljava/lang/ClassLoader;");
jobject classLoaderInstance = env->CallObjectMethod(state->activity->clazz, getClassLoader);
jclass classLoader = env->FindClass("java/lang/ClassLoader");
jmethodID findClass = env->GetMethodID(classLoader, "findClass", "(Ljava/lang/String;)Ljava/lang/Class;");
jstring strClassName = env->NewStringUTF("com/test/Test");
jclass classIWant = (jclass)env->CallObjectMethod(classLoaderInstance, findClass, strClassName);
jmethodID testMethod = env->GetStaticMethodID(classIWant, "test", "()Z");
jboolean retValue = env->CallStaticBooleanMethod(classIWant, testMethod);

vm->DetachCurrentThread();

Recommended Posts

Rufen Sie Java von C ++ auf Android NDK auf
Führen Sie node.js von Android Java aus (Verarbeitung)
Hinweise zum Aufrufen von Installer in der Android App
Wiedereinführung von Java8, das seit Android Studio 2.4 verfügbar ist
Kick ShellScript auf dem Server von Java
Sobel-Filter mit OpenCV unter Android (Java)
Versuchen Sie, Nim von Java über JNI aufzurufen
Von Java nach C und von C nach Java in Android Studio
[Android] Rufen Sie Kotlins Standardargumentmethode von Java aus auf
Versuchen Sie, Firebase Cloud-Funktionen unter Android (Java) zu verwenden.
Hinweise zum Abrufen von Rückrufen von TextToSpeech
Versuchen Sie, den CORBA-Dienst von Spring (Java) aus aufzurufen.
Für Java-Ingenieure, die ab sofort Kotlin starten
Versuchen Sie die Kommunikation mit gRPC auf einem Android + Java-Server
Versuchen Sie, synchronisierte Methoden aus mehreren Threads in Java aufzurufen
Verhalten beim Aufrufen von Java-Argumentmethoden mit variabler Länge aus Scala / Kotlin / Java
Java-Sprache aus der Sicht von Kotlin und C #
Rufen wir IBM Watson Assistant 2018-07-10 aus dem Java SDK auf.
Ich habe versucht, nativen Java / Objective-C-Code von Flutter aus aufzurufen
Versuchen Sie die Bildklassifizierung mit TensorFlow Lite unter Android (JAVA).
Generieren Sie Modelle von JSON zu Swift, PHP, C #, JAVA
Pessimistische Sperre für NW ABAP von Java über JCo
Rufen Sie Java von JRuby aus auf
Änderungen von Java 8 zu Java 11
Summe von Java_1 bis 100
Installieren Sie Java auf dem Mac
Eval Java-Quelle von Java
Führen Sie PostgreSQL unter Java aus
Greifen Sie über Java auf API.AI zu
Von Java zu Ruby !!
Java, das Daten von Android zu Jetson Nanos ROS überspringt
Siehe C ++ im Android Studio-Modul (Java / Kotlin)
Informieren Sie sich sofort über neue Funktionen von Java 7 bis Java 9
Führen Sie R von einem Tomcat-basierten Java-Prozess unter Amazon Linux aus