Windows 下 Android NDK 环境配置

记录一下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)在文件底部添加

        export ANDROID_NDK_ROOT=/cygdrive/D/Android/android-ndk-r04-windows

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

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

        export NDK=/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文件中,而是保持之前的结果。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值