已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android的jni的调用C,C+的几个应用(基本类型,数组,类(结构体)今天是母亲节,首先祝愿全天下的母亲健康长寿!永远年轻!天天快乐!慈母手中线,游子身上衣,临行密密缝,意恐迟迟归,谁言寸草心,报得三春晖。谢谢妈妈-jernymy-开始正题啦,前些天在研究Andorid中Jni(Java Native Interface)的使用,主要是在android中调用C、C+的方法,在网上也搜集了一些文档,源码等资料,非常感谢网友的提供的宝贵经验。也是写下这个文章,希望可以帮助正在做这方面应用网友们,jni使用c语言。一、首先软件环境要搭配好,本人使用的环境是Android2.2的SDK+NDK4b,linux下的编译环境1. Windows XP2. VMware 7.1.3 build-324285 + Ubuntu 9.04中文版3. Android SDK 2.24. Android NDK r4b Linux版(crystax),加入支持C+ exceptions, RTTI and Standard C+ Library /android/ndk-r4.php/data/android-ndk-r4-linux-x86-crystax-4.tar.bz25. Eclipse Version: 3.5.2eclipse3.5.2官方下载地址/eclipse/downloads/drops/R-3.5.2-201002111343/eclipse-SDK-3.5.2-win32.zip6. 二、配置好eclipse,并加入androiddSDK,然后通过eclipse建立一个android工程,搭建android的jni框架1. EclipseFile-New-Android Project如果此地没有Android Project,可以通过File-New-Project.,在弹出的对话框中,选择(Android)以下几项填写,其他的默认即可Project name: AndroidJniBuild Target: Android 2.2Application name: AndroidJniPackage name: com.jniCreate Activity: AndroidJniMin SDK Version: 8点击Finish即可此时,我们就可以看到我们的项目了在src-com.jni下自动生成的AndroidJni.java内容如下view plaincopy to clipboardprint?102030405060708090100110120130140150package com.jni; import android.app.Activity; import android.os.Bundle; public class AndroidJni extends Activity /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); 我们在这里新建立一个class,比如命名jernymyjni,这个作为我们的Jni的所有接口处,作为测试设计了基本类型,数组,和类(结构体),结构体数组等。代码如下view plaincopy to clipboardprint?102030405060708090100110120130140150package com.jni; / jernymy use c style for var name public class jernymyjni char chChar; / char use ch token / short wShort; / short use w token, short same as int int nInt; / int use n token String sString; / String use s token /*- jernymy for base type declaration start -*/ /* * The char process method GetChar * param char chInput : the input char for process * return(char) : input char (chInput) upper or lower * author : jernymy * date : 20110508 * */ public native char GetChar(char chInput); /* * The char process method SetChar * param char chInput : set the input char * return(int) : status, 0-OK, other-Error * author : jernymy * date : 20110508 * */ public native int SetChar(char chInput); /* * The int process method GetInt * param int nAdd1 : add one * param int nAdd2 : add other * return(int) : sum of two add var * author : jernymy * date : 20110508 * */ public native int GetInt(int nAdd1, int nAdd2); /* * The int process method SetInt * param int nSet : set one int data * return(int) : status, 0-OK, other-Error * author : jernymy * date : 20110508 * */ public native int SetInt(int nSet); /* * The String process method GetStr * return(String) : the string for use * author : jernymy * date : 20110508 * */ public native String GetStr(); /* * The String process method PrcsStr * param String sInput : the input String for process * return(String) : the process of the input String * author : jernymy * date : 20110508 * */ public native String PrcsStr(String sInput); /* * The String process method PrcsStr * param String sSet : the set String * return(int) : status, 0-OK, other-Error * author : jernymy * date : 20110508 * */ public native int SetStr(String sSet); /*- jernymy for base type declaration end -*/ /*- jernymy for array type declaration start -*/ /* * The char array process method GetCharArray * param char chSet : the chSet char for process * return(char) : char array, upper and lower * author : jernymy * date : 20110508 * */ public native char GetCharArray(char chSet); /* * The char array process method SetCharArray * param char chSet : the chSet char array for process * return(int) : status, 0-OK, other-Error * author : jernymy * date : 20110508 * */ public native int SetCharArray(char chSet); /* * The int array process method GetIntArray * param int nAdd1 : add one array * param int nAdd2 : add other array * return(int) : sum array of two add array var * author : jernymy * date : 20110508 * */ public native int GetIntArray(int nAdd1, int nAdd2); /* * The int array process method SetIntArray * param int nSet : set one int array data * return(int) : status, 0-OK, other-Error * author : jernymy * date : 20110508 * */ public native int SetIntArray(int nSet); /* * The String array process method GetStrArray * return(String) : String array with null parameter * author : jernymy * date : 20110508 * */ public native String GetStrArray(); /* * The String array process method PrcsStrArray * param String sSet : the string with token sSet * return(String) : ervey string by token * author : jernymy * date : 20110508 * */ public native String PrcsStrArray(String sSet); /* * The String array process method SetStrArray * param String sSet : set the string array * return(int) : status, 0-OK, other-Error * author : jernymy * date : 20110508 * */ public native int SetStrArray(String sSet); /*- jernymy for array type declaration end -*/ /*- jernymy for class(struct) type declaration start -*/ /* * The jernymyjni class(struct) process method GetClass * param int nIdx : get class data by index * return(jernymyjni) : status, 0-OK, other-Error * author : jernymy * date : 20110508 * */ public native jernymyjni GetClass(int nIdx); /* * The jernymyjni class(struct) process method SetClass * param jernymyjni cClass : set class data by class index * return(int) : status, 0-OK, other-Error * author : jernymy * date : 20110508 * */ public native int SetClass(jernymyjni cClass); /*- jernymy for class(struct) type declaration end -*/ /*- jernymy for class(struct) array type declaration start -*/ /* * The jernymyjni class(struct) array process method GetClassArray * return(jernymyjni) : class array data * author : jernymy * date : 20110508 * */ public native jernymyjni GetClassArray(); /* * The jernymyjni class(struct) array process method SetClassArray * param jernymyjni cNcomnAry : set class array data * return(int) : status, 0-OK, other-Error * author : jernymy * date : 20110508 * */ public native int SetClassArray(jernymyjni acClassAry); /*- jernymy for class(struct) array type declaration end -*/ static System.loadLibrary(jernymyjni); / jernymy here is the so name 通过eclipse的生成对应的class文件,会在AndroidJnibin下生成所有的文件然后进入windowsXP的command模式开始-运行-cmd到我们的项目的所在目录,我的目录为运行javah,得到对应的jni的头文件E:workjaveworkspaceAndroidJnijavah -classpath bin com.jni.jernymyjniE:workjaveworkspaceAndroidJni此时会在当前目录下生成一个com_jni_jernymyjni.h,好了,就是它了,接下来开始编写它对应的c文件了。为了符合android的文档规范,我们需要在当前目录(AndroidJni)下先建立一个jni目录,然后再建立一个Android.mk然后把com_jni_jernymyjni.h文件copy到jni目录下。E:workjaveworkspaceAndroidJnicd jniE:workjaveworkspaceAndroidJnijnidir 驱动器 E 中的卷是 work 卷的序列号是 1C8F-CA73 E:workjaveworkspaceAndroidJnijni 的目录2011-05-08 23:09 .2011-05-08 23:09 .2011-05-08 23:08 0 Android.mk2011-05-08 22:58 3,802 com_jni_jernymyjni.h 2 个文件 3,802 字节 2 个目录 10,864,427,008 可用字节E:workjaveworkspaceAndroidJnijnicom_jni_jernymyjni.h的文件内容view plaincopy to clipboardprint?102030405060708090100110120130140150/* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for class com_jni_jernymyjni */ #ifndef _Included_com_jni_jernymyjni #define _Included_com_jni_jernymyjni #ifdef _cplusplus extern C #endif /* * Class: com_jni_jernymyjni * Method: GetChar * Signature: (C)C */ JNIEXPORT jchar JNICALL Java_com_jni_jernymyjni_GetChar (JNIEnv *, jobject, jchar); /* * Class: com_jni_jernymyjni * Method: SetChar * Signature: (C)I */ JNIEXPORT jint JNICALL Java_com_jni_jernymyjni_SetChar (JNIEnv *, jobject, jchar); /* * Class: com_jni_jernymyjni * Method: GetInt * Signature: (II)I */ JNIEXPORT jint JNICALL Java_com_jni_jernymyjni_GetInt (JNIEnv *, jobject, jint, jint); /* * Class: com_jni_jernymyjni * Method: SetInt * Signature: (I)I */ JNIEXPORT jint JNICALL Java_com_jni_jernymyjni_SetInt (JNIEnv *, jobject, jint); /* * Class: com_jni_jernymyjni * Method: GetStr * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_jni_jernymyjni_GetStr (JNIEnv *, jobject); /* * Class: com_jni_jernymyjni * Method: PrcsStr * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_jni_jernymyjni_PrcsStr (JNIEnv *, jobject, jstring); /* * Class: com_jni_jernymyjni * Method: SetStr * Signature: (Ljava/lang/String;)I */ JNIEXPORT jint JNICALL Java_com_jni_jernymyjni_SetStr (JNIEnv *, jobject, jstring); /* * Class: com_jni_jernymyjni * Method: GetCharArray * Signature: (C)C */ JNIEXPORT jcharArray JNICALL Java_com_jni_jernymyjni_GetCharArray (JNIEnv *, jobject, jchar); /* * Class: com_jni_jernymyjni * Method: SetCharArray * Signature: (C)I */ JNIEXPORT jint JNICALL Java_com_jni_jernymyjni_SetCharArray (JNIEnv *, jobject, jcharArray); /* * Class: com_jni_jernymyjni * Method: GetIntArray * Signature: (II)I */ JNIEXPORT jintArray JNICALL Java_com_jni_jernymyjni_GetIntArray (JNIEnv *, jobject, jintArray, jintArray); /* * Class: com_jni_jernymyjni * Method: SetIntArray * Signature: (I)I */ JNIEXPORT jint JNICALL Java_com_jni_jernymyjni_SetIntArray (JNIEnv *, jobject, jintArray); /* * Class: com_jni_jernymyjni * Method: GetStrArray * Signature: ()Ljava/lang/String; */ JNIEXPORT jobjectArray JNICALL Java_com_jni_jernymyjni_GetStrArray (JNIEnv *, jobject); /* * Class: com_jni_jernymyjni * Method: PrcsStrArray * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jobjectArray JNICALL Java_com_jni_jernymyjni_PrcsStrArray (JNIEnv *, jobject, jstring); /* * Class: com_jni_jernymyjni * Method: SetStrArray * Signature: (Ljava/lang/String;)I */ JNIEXPORT jint JNICALL Java_com_jni_jernymyjni_SetStrArray (JNIEnv *, jobject, jobjectArray); /* * Class: com_jni_jernymyjni * Method: GetClass * Signature: (I)Lcom/jni/jernymyjni; */ JNIEXPORT jobject JNICALL Java_com_jni_jernymyjni_GetClass (JNIEnv *, jobject, jint); /* * Class: com_jni_jernymyjni * Method: SetClass * Signature: (Lcom/jni/jernymyjni;)I */ JNIEXPORT jint JNICALL Java_com_jni_jernymyjni_SetClass (JNIEnv *, jobject, jobject); /* * Class: com_jni_jernymyjni * Method: GetClassArray * Signature: ()Lcom/jni/jernymyjni; */ JNIEXPORT jobjectArray JNICALL Java_com_jni_jernymyjni_GetClassArray (JNIEnv *, jobject); /* * Class: com_jni_jernymyjni * Method: SetClassArray * Signature: (Lcom/jni/jernymyjni;)I */ JNIEXPORT jint JNICALL Java_com_jni_jernymyjni_SetClassArray (JNIEnv *, jobject, jobjectArray); #ifdef _cplusplus #endif #endif com_jni_jernymyjni.c的文件内容+ expand sourceview plaincopy to clipboardprint?102030405060708090100110120130140150编写Android.mk,内容如下+ expand sourceview plaincopy to clipboardprint?102030405060708090100110120130140150在VMware的ubuntu9.04下编译, NDK r4b的路径在./bld/android-ndk-r4-crystax,使用该ndkbuildrootjernymy-desktop:/mnt/hgfs/workspace/AndroidJni# ./bld/android-ndk-r4-crystax/ndk-build Compile thumb : jernymyjni /mnt/hgfs/workspace/AndroidJni/libs/armeabirootjernymy-desktop:/mnt/hgfs/workspace/AndroidJni# 接下来编写我们的java的测试代码AndroidJni.java,目前为了方便调试,暂且用System.out输出,可以通过android在界面上摆放一些button,然后把信息显示到button上,就可以看到效果了现在可以先通过调试的方式,查看debug的信息。view plaincopy to clipboardprint?102030405060708090100110120130140150package com.jni; import android.app.Activity; import android.os.Bundle; public class AndroidJni extends Activity /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); System.out.println(hello); jernymyjni cJni = new jernymyjni(); System.out.println(-jernymy test jernymyjni start-); System.out.println(-display base type test); System.out.println(-GetChar(A)-); char chTmp = cJni.GetChar(A); System.out.println(String.valueOf(chTmp); System.out.println(*); System.out.println(-SetChar(A)-); int nRtn = cJni.SetChar(A); System.out.println(nRtn: + String.valueOf(nRtn); System.out.println(*); System.out.println(-GetInt(5, 10)-); int nSum = cJni.GetInt(5, 10); System.out.println(String.valueOf(nSum); System.out.println(*); System.out.println(-SetInt(10)-); nRtn = cJni.SetInt(10); System.out.println(nRtn: + String.valueOf(nRtn); System.out.println(*); System.out.println(-GetStr(Jernymy Jni GetStr)-); String sStr = cJni.GetStr(); System.out.pri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮连锁品牌数字营销策划方案
- 高校学生会活动策划与执行管理方案
- 线上劝募活动方案
- 红薯基地实践活动方案
- 下肢静脉曲张日间手术护理方案
- 文学名著《西沙群岛》课堂实录分析
- 建筑工程项目质量控制及管理方案
- 管道工程施工方案百度
- 四平打井工程施工方案
- 营销礼物活动方案
- 大学新生入学心理健康教育
- 心内科常见急诊的诊断与处置
- 音乐课课堂常规
- 《中国工艺美术史》全套教学课件
- 改良热钾碱法朱海燕87课件
- 集团教师培训管理办法
- 医疗广告培训课件
- 虱媒疾病传播机制-洞察及研究
- 高考数学总复习《数列求和(裂项相消法)》专项测试卷(带答案)
- 应用写作 课件全套 周志凌 绪论、第1-10章 应用文概述-申论写作
- 地理野外实践活动方案
评论
0/150
提交评论