jni总结 .cpp

/************************************JNI_summary_cpp.cpp****************************************************/
/*   
 *            JNI  总结
 *        第二部分  .cpp
 *  com.dtBank.app.service  包名       
 *  dTCPConnection 项目名  
 *  JNIEXPORT 返回值 JNICALL Java_com_dtBank_app_service_dTCPConnection_本地c函数名称(JNIEnv *env, jclass cls)
 */
//cpp代码头文件
//TO DO
//JNI头文件
#include <jni.h>
#include <android/log.h>

//JNI 输入定义
#define TAG  "myprint"
#define PT(...) {(void)__android_log_print(ANDROID_LOG_DEBUG,TAG,__VA_ARGS__);}

#ifdef __cplusplus
extern "C" {
#endif

//返回值为 void
JNIEXPORT void JNICALL Java_com_dtBank_app_service_dTCPConnection_demoRetVoid(JNIEnv *env, jclass cls)
{
  //to do  
  //本地的c代码,或者条用c函数
  test_ret_void(); 
  return;
}
//返回值为 int
JNIEXPORT jint JNICALL Java_com_dtBank_app_service_dTCPConnection_demoRetInt
  (JNIEnv *env, jclass cls, jstring email, jstring passwd, jint queueType)
{
  //类型转换  jint -> int    :可以直接使用  无须转换  也无须释放
  //类型转换  jstring -> string 须转换  也须释放    
  //(注意:转换得来的字符串和释放时的字符串必须完全一样!如果要对转换得来的字符串作修改,必须用中间变量来代替使用)
  const char *pemail = env->GetStringUTFChars(email, 0);
  const char *ppasswd = env->GetStringUTFChars(passwd, 0);
   
  int ret =  -1;
     
  if ( NULL == pemail  || NULL == ppasswd )
  {
    //释放jstring类型
    env->ReleaseStringUTFChars(email, pemail);
    env->ReleaseStringUTFChars(passwd, ppasswd);
    return ret;
  }
    //调用C函数  或者  写C代码
    ret =   test_ret_int(pemail, ppasswd,queueType);
    //C代码执行完成  释放jstring类型
    env->ReleaseStringUTFChars(email, pemail);
    env->ReleaseStringUTFChars(passwd, ppasswd);
    return ret;
}
//返回值为 bool
JNIEXPORT jboolean JNICALL Java_com_dtBank_app_service_ClientConnection_demoRetBool
  (JNIEnv *env, jclass cls)
{
    bool retbool = false;
    //TO DO     
    //本地的c代码,或者条用c函数 填充status
    return retbool;
}
//返回值为 jstring
JNIEXPORT jstring JNICALL Java_com_dtBank_app_service_dTCPConnection_demoRetJstring
  (JNIEnv *env, jclass cls)
{
    char status[256];
    bzero(status,256);
    //本地的c代码,或者条用c函数 填充status
    return env->NewStringUTF(status);
}
//返回值为 jobjectArray
JNIEXPORT jobjectArray JNICALL Java_com_dtBank_app_service_dTCPConnection_demoRetJobjectArray(JNIEnv *env, jobject obj)
{
    int ret = 2;
    int datasize = 56;
    char datastream[256] = "………………………………………………";
    char return_num[1] = { 0 };
    char stream_size[5] = { 0 };
    sprintf(return_num,"%d",ret);
    sprintf(stream_size,"%d",datasize);
     
    PT("ret :%d\tdatasize:%d ",ret,datasize);
    PT("return_num:%s\tstream_size :%s",return_num,stream_size);
    //获取object所属类,一般为ava/lang/Object就可以了
    jclass objClass = (env)->FindClass("java/lang/String");
    jobjectArray thumb_info = (env)->NewObjectArray(3, cls, 0);
     
    //数据准备
    jstring jstatus = env->NewStringUTF(return_num);
    jstring jstream_size = env->NewStringUTF(stream_size);
    jbyteArray jdata_stream;
    jdata_stream = (env)->NewByteArray(datasize);
    (env)->SetByteArrayRegion(jdata_stream, 0, datasize, (const jbyte *)datastream);
    //填充
    (env)->SetObjectArrayElement(thumb_info, 0, jstatus);
    (env)->SetObjectArrayElement(thumb_info, 1, jstream_size);
    (env)->SetObjectArrayElement(thumb_info, 2, jdata_stream);
    (env)->DeleteLocalRef(jstatus);
    (env)->DeleteLocalRef(jstream_size);
    (env)->DeleteLocalRef(jdata_stream);
    return share_list;
}
 
#ifdef __cplusplus
}
#endif
 
/************************************Android.mk****************************************************/
LOCAL_PATH := $(call my-dir)
LOCAL_CPP_EXTENSION:=.cpp
include $(CLEAR_VARS)
LOCAL_MODULE    := CPPdemo
LOCAL_SRC_FILES := JNI_summary_cpp.cpp
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -ldl -llog
LOCAL_CPP_FEATURES:=rtti exceptions                   #此语句在linux环境下可以不用
include $(BUILD_SHARED_LIBRARY)
 
/************************************Application.mk****************************************************/
#此文件在linux环境下可以不用
APP_STL := gnustl_static
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值