[英]How to get a String from C code in Android NDK?
我正在開發Android ndk應用程序,在該應用程序中我想從C代碼中獲取String,例如在Java代碼中所做的操作:
Stringa fName = "ABCDE";
Stringa fMiddleName = "QWWER";
Stringa fLastName = "ZXCVV";
我想用C語言編寫此代碼,並希望將這些代碼中的值轉換為Java代碼。 現在,下面給出了獲取一些長值的代碼。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <com_testing_ndk_FibLib.h>
static jlong fib(jlong n){
return n<=0 ? 0 : n==1 ? 1: fib(n - 1) + fib(n - 2);
}
JNIEXPORT jlong JNICALL Java_com_testing_ndk_FibLib_fibNR
(JNIEnv *env, jclass clazz, jlong n)
{
return fib(n);
}
/*
* Class: com_testing_ndk_FibLib
* Method: fibNI
* Signature: (J)J
*/
JNIEXPORT jlong JNICALL Java_com_testing_ndk_FibLib_fibNI
(JNIEnv *env, jclass clazz, jlong n)
{
jlong previous = -1;
jlong result = 1;
jlong i;
for (i=0;i<n;i++){
jlong sum = result + previous;
previous = result;
result = sum;
}
return result;
}
我的Java代碼:
public class FibLib {
static {
System.loadLibrary("com_testing_ndk_FibLib");
}
public static long fibJR(long n){
return n<=0 ? 0 : n==1 ? 1: fibJR(n - 1) + fibJR(n - 2);
}
public native static long fibNR(long n);
public static long fibJI(long n){
long previous = -1;
long result = 1;
for (long i=0;i<n;i++){
long sum = result + previous;
previous = result;
result = sum;
}
return result;
}
public native static long fibNI(long n);
}
使用它在C ++中創建Java字符串
jstring str = env->NewStringUTF("Test");
爪哇
public native static String getTestString();
C ++
extern "C" {
JNIEXPORT jstring JNICALL Java_com_testing_ndk_FibLib_fibNI_getTestString(JNIEnv* env, jclass jclazz) {
jstring str = env->NewStringUTF("Test");
return str;
}
}
C
JNIEXPORT jstring JNICALL Java_com_testing_ndk_FibLib_fibNI_getTestString(JNIEnv* env, jclass jclazz) {
jstring str = (*env)->NewStringUTF(env, "Hello from native code!");
return str;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.