我正在尝试发送动态字符串,该字符串是使用JNI从Android App中的最终用户获得的。
尽管在互联网上搜索了类似的示例后,像新手一样,对我来说,解决起来却相当复杂。

我在下面的每个文件共享我的代码。

MainActivity.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);


}


本机lib.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);
}


主文件

#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 ++发送方法中的String参数。例如在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

10-04 23:23