我已成功遵循本教程 https://www.youtube.com/watch?v=kFtxo7rr2HQ了解如何使用 Android Studio 构建 NDK 应用。
该教程使用了一个public native String HelloJNI();
该字符串在 HelloJNI.c
文件中设置
#include "com_example_myapplication_MainActivity.h"
/* Header for class com_example_myapplication_MainActivity */
/*
* Class: com_example_myapplication_MainActivity
* Method: HelloJNI
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_myapplication_MainActivity_HelloJNI
(JNIEnv *env, jobject obj)
{
(*env)->NewStringUTF(env, "Hello from jni");
}
并在运行时加载
static{
System.loadLibrary("HelloJNI");
}
现在我正在尝试做同样的事情,但检索 int
不是 string
public native int getintONE();
我按照教程中的相同步骤操作,一切正常,现在我的 getintONE.c
读取
#include "com_example_myapplication_MainActivity.h"
/*
* Class: com_example_myapplication_MainActivity
* Method: getintONE
* Signature: ()I
*/
JNIEXPORT jint JNICALL com_example_myapplication_MainActivity_getintONE
(JNIEnv *env, jobject obj)
什么是等价物
JNIEXPORT jstring JNICALL Java_com_example_myapplication_MainActivity_HelloJNI
(JNIEnv *env, jobject obj)
{
(*env)->NewStringUTF(env, "Hello from jni");
}
返回一个整数,而不是一个字符串。
我在这里阅读了很多问题,阅读了教程和文档,我在研究中看到并尝试过的大部分内容都是返回示例、jint 数组、将 jint 转换为字符串,以及在我看来更多涉及高级主题。
提前致谢
最佳答案
jint 是一种原始类型,因此如果您包含了 jni.h
,您可以简单地从函数中返回一个 - 不需要像使用 NewStringUTF() 那样分配对象对于一个字符串。
JNIEXPORT jint JNICALL com_example_myapplication_MainActivity_getintONE(JNIEnv *env, jobject obj) {
return 1; //or anything that can be cast to a jint
}
关于Android Studio NDK 返回 jint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30266741/