我成功地学习了本教程https://www.youtube.com/watch?v=kFtxo7rr2HQ,学习如何使用Android构建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");
}返回一个int,而不是一个字符串。
我在这里阅读了许多问题,阅读了教程和文档,我在研究中看到并尝试过的大部分内容是返回示例、jint数组、将jint转换为string,以及在我看来涉及更多的高级主题。
提前感谢
发布于 2015-05-15 18:57:13
jint是一种基本类型,所以如果您已经包含了jni.h,那么只需从函数中返回一个jint--不需要像使用NewStringUTF()那样为字符串分配对象。
JNIEXPORT jint JNICALL com_example_myapplication_MainActivity_getintONE(JNIEnv *env, jobject obj) {
return 1; //or anything that can be cast to a jint
}https://stackoverflow.com/questions/30266741
复制相似问题