Android的jni的调用C,C++的几个应用(基本类型,数组,类(结构体))

来源:互联网 发布:军工加人工智能的股票 编辑:程序博客网 时间:2024/05/29 03:23

今天是母亲节,首先祝愿全天下的母亲健康长寿!永远年轻!天天快乐!
慈母手中线,游子身上衣,临行密密缝,意恐迟迟归,谁言寸草心,报得三春晖。
谢谢妈妈--jernymy

 

------------------------------------------------------------------------------------------------------------------------


开始正题啦,前些天在研究Andorid中Jni(Java Native Interface)的使用,
主要是在android中调用C、C++的方法,在网上也搜集了一些文档,源码等资料,非常感谢网友的提供的宝贵经验。
也是写下这个文章,希望可以帮助正在做这方面应用网友们,jni使用c语言。

一、首先软件环境要搭配好,本人使用的环境是
Android2.2的SDK+NDK4b,linux下的编译环境
1. Windows XP
2. VMware 7.1.3 build-324285 + Ubuntu 9.04中文版
3. Android SDK 2.2

4. Android NDK r4b Linux版(crystax),加入支持C++ exceptions, RTTI and Standard C++ Library
http://www.crystax.net/android/ndk-r4.php
http://www.crystax.net/data/android-ndk-r4-linux-x86-crystax-4.tar.bz2

5. Eclipse Version: 3.5.2
eclipse3.5.2官方下载地址
http://archive.eclipse.org/eclipse/downloads/drops/R-3.5.2-201002111343/eclipse-SDK-3.5.2-win32.zip

6.

二、配置好eclipse,并加入androiddSDK,然后通过eclipse建立一个android工程,搭建android的jni框架
1. Eclipse
File->New->Android Project
如果此地没有Android Project,可以通过File->New->Project...,在弹出的对话框中,选择(Android)
以下几项填写,其他的默认即可
Project name:     AndroidJni
Build Target:     Android 2.2
Application name: AndroidJni
Package name:     com.jni
Create Activity:  AndroidJni
Min SDK Version:  8
点击Finish即可

此时,我们就可以看到我们的项目了
在src->com.jni下自动生成的AndroidJni.java内容如下

 

 

我们在这里新建立一个class,比如命名jernymyjni,
这个作为我们的Jni的所有接口处,作为测试设计了基本类型,数组,和类(结构体),结构体数组等。
代码如下

 

 

 

通过eclipse的生成对应的class文件,会在AndroidJni/bin下生成所有的文件

然后进入windowsXP的command模式
开始->运行->cmd
到我们的项目的所在目录,我的目录为
运行javah,得到对应的jni的头文件
E:/work/jave/workspace/AndroidJni>javah -classpath bin com.jni.jernymyjni

E:/work/jave/workspace/AndroidJni>
此时会在当前目录下生成一个com_jni_jernymyjni.h,好了,就是它了,接下来开始编写它对应的c文件了。
为了符合android的文档规范,我们需要在当前目录(AndroidJni)下先建立一个jni目录,然后再建立一个Android.mk
然后把com_jni_jernymyjni.h文件copy到jni目录下。


E:/work/jave/workspace/AndroidJni>cd jni

E:/work/jave/workspace/AndroidJni/jni>dir
 驱动器 E 中的卷是 work
 卷的序列号是 1C8F-CA73

 E:/work/jave/workspace/AndroidJni/jni 的目录

2011-05-08  23:09    <DIR>          .
2011-05-08  23:09    <DIR>          ..
2011-05-08  23:08                 0 Android.mk
2011-05-08  22:58             3,802 com_jni_jernymyjni.h
               2 个文件          3,802 字节
               2 个目录 10,864,427,008 可用字节

E:/work/jave/workspace/AndroidJni/jni>

 


com_jni_jernymyjni.h的文件内容

 

com_jni_jernymyjni.c的文件内容

 

 


编写Android.mk,内容如下

 

 


在VMware的ubuntu9.04下编译, NDK r4b的路径在../bld/android-ndk-r4-crystax,使用该ndkbuild

 

root@jernymy-desktop:/mnt/hgfs/workspace/AndroidJni# ../bld/android-ndk-r4-crystax/ndk-build
Compile thumb  : jernymyjni <= /mnt/hgfs/workspace/AndroidJni/jni/com_jni_jernymyjni.c
SharedLibrary  : libjernymyjni.so
Install        : libjernymyjni.so => /mnt/hgfs/workspace/AndroidJni/libs/armeabi
root@jernymy-desktop:/mnt/hgfs/workspace/AndroidJni#

 

接下来编写我们的java的测试代码AndroidJni.java,目前为了方便调试,暂且用System.out输出,
可以通过android在界面上摆放一些button,然后把信息显示到button上,就可以看到效果了
现在可以先通过调试的方式,查看debug的信息。

 

好了,基本差不多了,因为俺暂时使用的类型已经足够了,至于其他的在继续研究中,如果错误的地方也请您指出,谢谢啦。
jernymy 20110508
jernymy@163.com

 

 

 

原创粉丝点击