记录一下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文件中,而是保持之前的结果。

更多相关文章

  1. C语言函数以及函数的使用
  2. 在LinearLayout中嵌套RelativeLayout来设置Button的位置(xml文件)
  3. android studio ndk 编译自定义MK文件
  4. Android Studio-Gradle项目中添加JNI生成文件(.so文件)
  5. Android 一个APK文件部署产生多个应用安装的效果

随机推荐

  1. 1.仿小米商城 2.预习js变量与基本数据类
  2. axios的使用方式
  3. ES6 箭头函数和this
  4. Form注册表单 选择器权重计算及上下文选
  5. 相对定位、绝对定位、固定定位、粘性定位
  6. ES6 解构赋值
  7. 三分钟!意派Epub360制作高端H5邀请函
  8. 智能名片电子名片小程序源码开发,为什么是
  9. 解构赋值、DOM操作以及dataset和classLis
  10. ES6 let 与 const声明