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