记录一下Windows下Android NDK的配置方法。

1.下载NDK

http://dl.google.com/android/ndk/android-ndk-r4-windows.zip

此为r4版,因此以下均为r4版的配置方法。

2.下载安装Cygwin

http://www.cygwin.com/setup.exe

此为安装程序,需要在线下载一些安装包,选一个台湾的镜像下载,速度能够快一些。

选择安装包时,一定把gcc和GNU的安装选项Default改为Install,以确保安装,其他的默认即可。

安装选择时选择下载并安装,就省得下载完毕再手动运行setup.exe安装了。默认情况安装在C:/Cygwin下。

3.安装NDK

解压第一步下载的zip文件到合适的目录下。

修改Cygwin的环境变量(玩过Linux此步骤就会很明了)。具体为:

1)用UltraEdit等编辑器打开C:/Cygwin/home/你Windows账户名/.bash_profile文件。

2)在文件底部添加

exportANDROID_NDK_ROOT=/cygdrive/D/Android/android-ndk-r04-windows

其中/cygdrive/是必须有的,后面D/Android/android-ndk-r04-windows表明NDK解压在D:/Android/android-ndk-r04-windows下。注意,目录中尽量不要有空格。

3)为了之后编译的方便,可以再添加

exportNDK=/cygdrive/D/Android/android-ndk-r04-windows

4.可以参考NDK目录下samples/hello-jni。这是利用JNI从C语言端返回字符串到Java端输出的一个简单例子。

5.自建工程的话,需要在工程里添加jni文件夹,该文件夹用于存放C/C++代码以及make文件。make文件必须叫Android.mk,如何书写也可参考hello-jni中的该文件。

6.有关C/C++接口函数的命名:

JNIEXPORT void JNICALL Java_包名_类名_函数名(JNIEnv * env, jobject obj);

其中,Java为必须,包名中的”.“用”_“代替,类名是以该函数为成员函数的类的名称,两个参数是从Java端通过JNI转换过来的。

对应Java端该函数原型就是

private / public native void 函数名();

为某类的成员函数,参数空,返回空。

7.有关JNI类型转换

刚才看到,Java端参数空时,C/C++端需要添加JNIEnv *env, jobject obj。那么其他类型变量的对应关系如何呢?

可以参考jni.h。

Java中boolean, byte,char, short, int, long, float, double分别对应C/C++中

jboolean, jbyte, jchar, jshort, jint, jlong, jfloat, jdouble。

一维数组类型对应规律是,Java中*[]对应于C/C++中j*Array,比如int[]对jintArray,byte[]对应于jbyteArray等等。

String与二维数组暂不讨论。

以上对应关系可用于参数和返回值。

8.C/C++端也可以调用上层Java的类方法,具体操作不在这里讨论了。

9.C/C++程序的编译

打开Cygwin,先检查一下gcc与GNU的配置:输入gcc --v和make --v,如果打印出版本号,则表示安装成功。

然后cd到要编译的工程目录。

再输入$NDK/ndk-build即可。
其中NDK为第6步添加的环境变量。

10.在Eclipse里先Project->Clean,再运行。注意,每次更改C/C++文件,然后Cygwin编译,在Eclipse里都要先Clean一下,否则新生成的so链接库可能不会被链接到apk文件中,而是保持之前的结果。

转自:http://blog.csdn.net/mShopping/archive/2011/01/24/6160735.aspx

更多相关文章

  1. 利用power_profile.xml获取Android运行时的能耗
  2. ubuntu13.10编译android文件系统4.0.4错误全部解析
  3. ramdisk.img文件解析
  4. android studio 常见问题汇总
  5. Android(安卓)P实现静默安装的方法示例(官方Demo)
  6. Android通过setDataAndType(uri, "type")打开文件
  7. Windows X64下安装SDK Platform
  8. Android(安卓)Rect类的构造函数参数说明
  9. Android(安卓)FFmpeg 编译.so库

随机推荐

  1. mysql 自增列id 最大为多少 一直insert会
  2. MySQL的事务隔离级别以及设置
  3. MySQL---数据库从入门走向大神系列(三)-
  4. 阿里云服务器远程连接mysql
  5. 迁移外键与Laravel中雄辩的关系
  6. MySQL] 行列转换变化各种方法实现总结(行
  7. 【Java Web】简易商品信息管理系统——首
  8. oracle、mysql、db2三大数据库分页方法的
  9. MYSQL安装--小白教程
  10. MySQL—嵌套select使用该表时如何从表中