jni总结 .c

 

jni总结 .c

 

/************************************JNI_summary_c.c****************************************************/
 
/* 
 *            JNI  总结
 *        第一部分  .c
 *  com.dtBank.app.service  包名     
 *  dTCPConnection 项目名
 *  JNIEXPORT 返回值 JNICALL Java_com_dtBank_app_service_dTCPConnection_本地c函数名称(JNIEnv *env, jclass cls)
 */
//c代码头文件
//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__);}

//返回值为 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(env, email, JNI_FALSE);
  const char *ppasswd = (*env)->GetStringUTFChars(env, passwd, JNI_FALSE);
 
  int ret =  -1;
   
  if ( NULL == pemail  || NULL == ppasswd )
  {
    //释放jstring类型
    (*env)->ReleaseStringUTFChars(env, email, pemail);
    (*env)->ReleaseStringUTFChars(env, passwd, ppasswd);
    return ret;
  }
    //调用C函数  或者  写C代码
    ret =   test_ret_int(pemail, ppasswd,queueType);
    //C代码执行完成  释放jstring类型
    (*env)->ReleaseStringUTFChars(env, email, pemail);
    (*env)->ReleaseStringUTFChars(env, passwd, ppasswd);
    return ret;
}
//返回值为 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(env, status);
}
//返回值为 jobjectArray
JNIEXPORT jobjectArray JNICALL Java_com_dtBank_app_service_dTCPConnection_demoRetJobjectArray(JNIEnv *env, jobject obj)
{
    char element_string[265] ;
    char element_num = 4;
    unsigned int index_num = 0;
    int datalen = 0;
    jclass cls = (*env)->FindClass(env, "java/lang/String");
    jobjectArray share_list = (*env)->NewObjectArray(env, element_num, cls, NULL);
    srcdatalen = sizeof("demoRetJobjectArray");
    datalen = ( (srcdatalen > 265) ? 265 : srcdatalen );
    bzero(element_string,265);
    memcpy(element_string,"demoRetJobjectArray",datalen);
    //jstring
    jstring jstr1;
    jstr1 = (*env)->NewStringUTF(env, element_string);
    jstring jstr2;
    jstr2 = (*env)->NewStringUTF(env, "love you !");
    //jint
    jint Jint = 4;
    //jbyteArray (主要用于不能被转码的string   如文件流等)
    jbyteArray jdata_stream;
    jdata_stream = (*env)->NewByteArray(datasize);
    (*env)->SetByteArrayRegion(jdata_stream, 0, datasize, (const jbyte *)datastream);
    //jobjectArray 每个元素可以是任何类型
    (*env)->SetObjectArrayElement(env, share_list, index_num++, jstr1); 
    (*env)->SetObjectArrayElement(env, share_list, index_num++, jstr2);
    (*env)->SetObjectArrayElement(env, share_list, index_num++, Jint);
    (*env)->SetObjectArrayElement(env, share_list, index_num, jdata_stream);

    return share_list;
}
 

/************************************Android.mk****************************************************/
LOCAL_PATH:=$(call my-dir)
#src_inc := \
#  $(NDK_PROJECT_PATH)/include \
# $(NDK_PROJECT_PATH) \
#  $(NDK_PROJECT_PATH)/iconv/include \
#  $(NDK_PROJECT_PATH)/iconv/lib \
#  $(NDK_PROJECT_PATH)/iconv/libcharset/include
include $(CLEAR_VARS)
#LOCAL_CFLAGS    := -ggdb
# Debug version
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -g -llog -lc
# Release version
#LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -lc

# JNI xCloud
LOCAL_MODULE :=Cdemo
LOCAL_SRC_FILES :=JNI_summary_c.c
#LOCAL_STATIC_LIBRARIES := libiconv
#LOCAL_STATIC_LIBRARIES := libiconv
#LOCAL_C_INCLUDES += $(src_inc)
include $(BUILD_SHARED_LIBRARY)
 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值