当前位置: 代码迷 >> 综合 >> NDK学习:C与C++在Ndk中的区别
  详细解决方案

NDK学习:C与C++在Ndk中的区别

热度:81   发布时间:2024-01-21 16:36:54.0

使用C++做ndk 某些代码简单一些原因是 他给你封装了一个 env结构体

#include<stdio.h>
#include"cn_itcast_cpp_DemoActivity.h"
#include <android/log.h>
#include<malloc.h>
#include<stdlib.h>#define LOG_TAG "System.out"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)char*   Jstring2CStr(JNIEnv*   env,   jstring   jstr)
{char*   rtn   =   NULL;jclass   clsstring   =   (env)->FindClass("java/lang/String");jstring   strencode   =   (env)->NewStringUTF("GB2312");jmethodID   mid   =   (env)->GetMethodID(clsstring,   "getBytes",   "(Ljava/lang/String;)[B");jbyteArray   barr=   (jbyteArray)(env)->CallObjectMethod(jstr,mid,strencode); // String .getByte("GB2312");jsize   alen   =   (env)->GetArrayLength(barr);jbyte*   ba   =   (env)->GetByteArrayElements(barr,JNI_FALSE);if(alen   >   0){rtn   =   (char*)malloc(alen+1);         //"\0"memcpy(rtn,ba,alen);rtn[alen]=0;}(env)->ReleaseByteArrayElements(barr,ba,0);  //return rtn;
}JNIEXPORT jstring JNICALL Java_cn_itcast_cpp_DemoActivity_helloInC__(JNIEnv * env, jobject obj){
//   return 	(*env)->NewStringUTF(env,"haha from c");return      env->NewStringUTF("haha from cpp");//使用c++的方式比较简洁 如何实现的参考jni.h
/**   jstring NewStringUTF(const char* bytes){ return functions->NewStringUTF(this, bytes); }*/
}JNIEXPORT jstring JNICALL Java_cn_itcast_cpp_DemoActivity_helloInC__Ljava_lang_String_2(JNIEnv * env, jobject , jstring jstr){char* cstr = Jstring2CStr(env , jstr);LOGI("%s",cstr);return      env->NewStringUTF("haha from c __");
}

然后注意的一点是

android.mk文件


   LOCAL_PATH := $(call my-dir)
   include $(CLEAR_VARS)
   LOCAL_CPP_EXTENSION := cpp //代表c++文件的扩展名可以随意 一般是cpp
   LOCAL_MODULE    := Hello
   LOCAL_SRC_FILES := Hello.cpp
   LOCAL_LDLIBS += -llog
   include $(BUILD_SHARED_LIBRARY)




  相关解决方案