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

来源:互联网 发布:mysql有nvl函数吗 编辑:程序博客网 时间:2024/06/07 19:52

使用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)




原创粉丝点击