Windows下开发Android-NDK的完整步聚简介。
我被这玩意拆腾得好烦,资料来源于网上,作了一番整理。
步骤一:搭Android开发环境
* 打开 http://developer.android.com/ ,下载集成android SDK的 Eclipse版本
* 打开 http://www.java.com/ , 下载最新版本对应的 JDK。注意,是JDK,不是JRE
安装完后,配置好JAVA_HOME路径,打开Eclipse,新建一个 Android Application Project ,直接运行。
如果成功,则会打开一个 Android 模拟器,显示helloworld。
如果上面步骤不成功。。。则要搞到成功为止才能进行下一步。。。
步骤二:安装cygwin
到 http://www.cygwin.org/ 下载 cygwin 的setup程序。建议下载32位的setup程序。
双击 setup.exe,在弹出框中,一直点选 next。直到 select pacekes 框出现。
展开 Devel(Default)节点,在子节点里,勾选如下节点:
binutils, gcc-core, gcc-g++ (c++), gdb, libargp, libatomicl, libgcc1, libstdc++6, make, mingw-binutils, mingw-gcc-core, mingw-gcc-g++(C++), mingw-runtime
然后点击 next,等待安装 完成。完成 后, 会弹出一框,问你是否把 cygwin 的启动程序加到 桌面,点“是”,不然你可能会找不到入口的。。。
点击桌面 cygwin 图标,能成功打开 cygwin 控制台窗口,说明 cygwin安装成功了。
Cygwin的安装步骤可以到网上搜一下,会有更详细的说明。
这一步必须成功!不然后面不用搞了。
步骤三:下载NDK,并编译ndk里面的hello-jni
http://developer.android.com/tools/sdk/ndk/index.html 下载32位的NDK。
解压到 某个目录。用文本编辑器打开cygwin目录下.bash_profile文件 {cygwin}/etc/skel/.bash_profile
在最后面加入这两行:
------------------------------
NDK=/cygdrive/D/android-ndk-r9d
export NDK
------------------------------
上面的“D/android-ndk-r9d”,就是你的NDK安装目录,按实际情况写入你的路径。
打开cygwin,输入“cd $NDK”,如果输出上面配置的“/cygdrive/D/android-ndk-r9d”信息,则表明环境变量设置成功了
然后输入“cd /cygdrive/d/android-ndk-r9d/samples/hello-jni”,进入到“D:\android-ndk-r9d\samples\hello-jni”目录。
再输入“$NDK/ndk-build”,成功的话则在当前目录下生成 libs 文件夹。
步骤四:apk里调用jni
打开Eclipse,新建一个 Android Application Project,
Application Name 填入:“HelloJni”
Packages name 填入:“com.example.hellojni”
一路next直到finish。
----------------------------
请务必按照我所说的名字去填入!!!
----------------------------
复制这个文件 {ndk}\samples\hello-jni\src\com\example\hellojni\HelloJni.java
粘贴到 Eclipse工程src目录下的 com.example.hellojni ,替换掉原来的 HelloJni.java。
Eclipse工程 新建一目录名为“jni”,在这目录下新建一个文件 名为:“Application.mk”
往里面写入如下几行。
APP_STL := gnustl_static
APP_CPPFLAGS += -fexceptions -frtti
APP_PLATFORM := android-8
APP_ABI := armeabi armeabi-v7a mips x86
APP_OPTIM := release
(部分参数其实是不必要的,不过还是写全一点好)
把刚编译生成的整个libs 目录 ( {ndk}\samples\hello-jni\src\com\example\hellojni\libs ),复制到eclipse工程目录下。直接复盖就行了。
现在你的eclipse工程目录结构,看起来类似如下:
HelloJni
src
jni
Application.mk
libs
armeabi-v7a
libhello-jni.so
resAndroidManifest.xml
全部完成了,编译运行吧!
更详细的NDK和Jni相关的调用原理和规则,请参考网上相关资料。
注意!
* c文件中,写入中文 或 输出含中文的字符串,请用记事本另存 c 文件 为 utf-8 编码,重新build即可。
* 如果出现 unknown type name 'bool' 。请把 hello-jni.c 更名为 hello-jni.cpp
并且 修改 Android.mk 的对应项为:LOCAL_SRC_FILES := hello-jni.cpp。还要在 JNI_OnLoad 上注册,不然会找不到函数 。( 如果函数名称已经包含了注入的Activity包路径,可以不用写OnLoad)
* NDK默认是只支持很原始的C语法,新的c99语言法,需要在 Android.mk中加入LOCAL_CFLAGS := -std=c99
还有一些看起来并不高级的switch语句,c99也不支持,那只能改文件名为cpp。NDK检测到cpp后缀就会自动调用 g++ 编译。