使用 JNI 从 Android 应用程序向C++发送字符串

Sending String to C++ from Android app using JNI

本文关键字:C++ 字符串 应用程序 JNI Android 使用      更新时间:2023-10-16

我正在尝试发送一个动态字符串,使用 JNI 从 Android 应用程序中的最终用户获得。虽然在互联网上搜索类似的例子后,对我来说就像新手一样解决它非常复杂。

我正在分享我的代码,下面每个文件。

主活动.java

public class MainActivity extends AppCompatActivity {
   static {
      System.loadLibrary("native-lib");
   }
   public native int initialize();
   // i want to send params like String from android App in the below method , what is the proper way to do it.
   // public native int sendData(String param1 , String param2);

}

原生库.cpp

#include "jni.h"
extern "C"
JNIEXPORT jint JNICALL
Java_com_newapp_myapp_MainActivity_initialize(JNIEnv *env, jobject instance){
    activity = env->NewGlobalRef(instance);
    return my_initialize(my_jvm, activity);
}

主H

#ifdef __cplusplus
extern "C" {
#endif
#ifndef MAIN_H
#define MAIN_H
#include "jni.h"
int my_initialize(_JavaVM*, jobject);
#endif
#ifdef __cplusplus
}
#endif

我的问题是,如何将方法中的字符串参数发送到从Android C++。 例如在MainActivity中实现sendData((方法,JNI文件的等效代码和C++文件的相同代码。

注意:代码非常庞大,这就是我共享片段的原因。代码工作正常。

假设您的文件是:

public class AppCompatActivity {
}

public class MainActivity extends AppCompatActivity {
   static {
      System.loadLibrary("native-lib");
   }
   public native int sendData(String param1 , String param2);
}

您所要做的就是:

> javac -h . MainActivity.java
> cat MainActivity.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class MainActivity */
#ifndef _Included_MainActivity
#define _Included_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     MainActivity
 * Method:    sendData
 * Signature: (Ljava/lang/String;Ljava/lang/String;)I
 */
JNIEXPORT jint JNICALL Java_MainActivity_sendData
  (JNIEnv *, jobject, jstring, jstring);
#ifdef __cplusplus
}
#endif
#endif