使用SWIG 自动生成封装代码。
一些注意事项
- 必须作为动态链接库提供,按照Unix 动态链接库命名规则命名。比如:libloadwav.so
- 在应用里必须显式加载。例如:
注意:不能有lib前缀和.so 后缀static { System.loadLibrary("loadwav"); }
- 在application.mk 里指定CPU。
================================================================
构建原生代码的基本步骤
- 将代码放在 $PROJECT/jni/ 下
- 编写 $PROJECT/jni/Android.mk 文件
- (可选)创建 $PROJECT/jni/Application.mk. 可以通过Application.mk指定不同的CPU和编译/链接选项。详细设置参看<ndk>/docs/Application-mk.html .
- 在你的project目录下或它的任意子目录下运行$NDK/ndk-build 生成代码。
Android.mk
- 语法细节参看 <ndk>/docs/android-mk.html .
- 可以在单一的android.mk文件中定义多个模块,也可以用每个模块一个android.mk文件的方式来定义。
- 一个单一的asndroid.mk 可能被解析好几次,所以不要假定某些变量没有定义。
- 如果想在子目录中定义一些android.mk, 则应该在顶层目录的android.mk 中显式调用。比如用如下语句:
include $(call all-subdir-makefiles)
Application.mk
如果说android.mk文件是描述模块,则Application.mk 是描述应用本身。细节参考<ndk>/docs/APPLICATION-MK.html
主要作用:
- 明确描述应用需要的模块
- 指定CPU类型
- 设定可选的编译/链接选项。比如链接release 还是 debug ;特殊的C/C++编译选项;是否构建所有的模块。
application.mk 是可选的。NDK缺省行为是构建android.mk里的所有模块,CPU ABI 是 armeabi .
构建
在android NDK r4 以后,使用ndk-build 脚本来构建。为保持兼容你也可以在$NDK/apps 目录下建子目录的方式。
参看 <ndk>/docs/NDK-BUILD.html .
自定义输出路径
缺省情况下,所有的输出文件将放在$PROJECT/obj .可以通过NDK_OUT环境变量指定到其它目录