Appeler java depuis C ++ sur Android NDK

Aperçu

Remarque appeler ** Java ** à partir de ** C ++ ** dans ** l'application OpenGL ES (Android, iOS) ** de ** Visual Studio 2017 **

environnement

Contenu

Pour les classes existantes

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

Pour la classe d'utilisateurs

** [Nom du projet] .Packaging ** Ajouter la source java sous le dossier ** src ** du projet

Test.java


package com.test;

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

Définissez l'application: android: hasCode dans AndroidManifest.xml sur true

AndroidManifest.xml


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

Appel à l'aide de 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

Appeler java depuis C ++ sur Android NDK
Exécutez node.js depuis Android Java (traitement)
Remarques sur l'appel du programme d'installation sur l'application Android
Remarques sur le traitement des threads Android (java)
Réintroduction de Java8, disponible depuis Android Studio 2.4
Kick ShellScript sur le serveur depuis Java
Filtre Sobel utilisant OpenCV sur Android (Java)
Essayez d'appeler Nim depuis Java via JNI
De Java à C et de C à Java dans Android Studio
[Android] Appeler la méthode d'argument par défaut de Kotlin depuis Java
Essayez d'utiliser Firebase Cloud Functions sur Android (Java)
Remarques sur le rappel de TextToSpeech
Essayez d'appeler le service CORBA depuis Spring (Java)
Pour les ingénieurs Java qui démarrent Kotlin à partir de maintenant
Essayez la communication en utilisant gRPC sur un serveur Android + Java
Essayez d'appeler des méthodes synchronisées à partir de plusieurs threads en Java
Comportement lors de l'appel des méthodes d'argument de longueur variable Java à partir de Scala / Kotlin / Java
Langage Java du point de vue de Kotlin et C #
Appelons IBM Watson Assistant 2018-07-10 à partir du SDK Java.
J'ai essayé d'appeler du code natif Java / Objective-C depuis Flutter
Essayez la classification d'image à l'aide de TensorFlow Lite sur Android (JAVA)
Générer des modèles de JSON à Swift, PHP, C #, JAVA
Verrou pessimiste sur NW ABAP depuis Java via JCo
Appeler Java depuis JRuby
Changements de Java 8 à Java 11
Somme de Java_1 à 100
Installez Java sur Mac
Évaluer la source Java à partir de Java
Exécutez PostgreSQL sur Java
Accédez à API.AI depuis Java
De Java à Ruby !!
Java qui ignore les données d'Android vers le ROS de Jetson Nano
Reportez-vous à C ++ dans le module Android Studio (Java / kotlin)
Découvrez les nouvelles fonctionnalités de Java 7 à Java 9 à la fois
Exécuter R à partir d'un processus Java optimisé par Tomcat sur Amazon Linux