标题虽说是String但实际使用了StringBuffer
很简单往下看吧直接cp过去就可以用了。
public class Decodec {
public static native int test(String inPut, StringBuffer outPut);
static {
System.loadLibrary("decodec");
}
}
#include
#include
/*
* Class: jp_ac_jaist_myjnitest_Codec
* Method: test
* Signature: (Ljava/lang/String;Ljava/lang/StringBuffer;)I
*/
JNIEXPORT jint JNICALL Java_jp_ac_jaist_myjnitest_Codec_test
(JNIEnv* env, jclass, jstring inputStrJstr, jobject outputJobj)
{
const char* pInputStr env->GetStringUTFChars(inputStrJstr, JNI_FALSE);
if (pInputStr NULL)
{
return -1;
}
__android_log_print(ANDROID_LOG_DEBUG, "Test", "pInputStr:%s", pInputStr);
jclass outputJcls env->GetObjectClass(outputJobj);
if (outputJcls NULL)
{
__android_log_print(ANDROID_LOG_DEBUG, "Cosmo Test", "Unable to find outputJcls");
return -1;
}
jfieldID valueJfId env->GetFieldID(outputJcls, "value", "[C");
if (valueJfId NULL)
{
__android_log_print(ANDROID_LOG_DEBUG, "Test", "Unable to get class StringBuffer.values jfieldID");
return -1;
}
jmethodID appendJmId env->GetMethodID(outputJcls, "append", "(Ljava/lang/String;)Ljava/lang/StringBuffer;");
if (appendJmId NULL)
{
__android_log_print(ANDROID_LOG_DEBUG, "Test", "Unable to find appendJmId");
}
char name[200];
memset(name, 0x00, sizeof(name));
strncpy(name, "Cosmo Wang", sizeof(name) - 1);
jstring _jstring env->NewStringUTF(name);
env->CallObjectMethod(outPut, appendJmId, _jstring);
env->ReleaseStringUTFChars(inputStrJstr, pInputStr);
return 0;
}
使用方法
StringBuffer output new StringBuffer();
Codec.test("hello", output);
Log.e("Test", "output:" output);