Windows下Android NDK开发的几种方法总结

准备工作:
下载NDK:http://developer.android.com/tools/sdk/ndk/index.html,建议使用最新版的。

一、手动编译

二、vs-android
vs-android is intended to provide a collection of scripts and utilities to support integrated development of Android NDK C/C++ software under Microsoft Visual Studio.

vs-android supports only Visual Studio 2010, 2012 and 2013. Earlier versions lack the MSBuild integration with the C/C++ compilation systems.
vs-android仅适用vs2010以上版本,而且具体使用发现仍有许多问题,编译NDK时出现大量错误。

三、结合方法一和方法二,配合使用vs2005和ndk-build.cmd
我们知道Visual Studio是目前最强大的编译器,尤其针对C/C++的开发时更是无可匹敌的,优势就在于开发C/C++代码的高效,因为通常使用androidstudio或者eclipse开发C/C++效率堪忧,即使使用了相应的插件。具体操作方法如下:
1、在android项目的jni目录下新建.sln解决方案,新建项目时选择空项目,然后把jni目录下的源码文件全部添加到新建项目中去,如图:
打开项目属性-C/C++-常规-附加包含目录,添加NDK的include目录,由于针对不同平台的include目录有很多,可以只选择一个包含即可,这里只是为了在vs中编写代码时能找到相应的声明而已,也就是说我们这里仅仅使用了vs强大的编写C/C++代码的功能,这里我添加的是:D:\ndk\platforms\android-19\arch-x86\usr\include
打开项目属性-生成事件-预生成事件-命令行,添加批处理文件的调用:build.bat。
build.bat内容如下:
cd /d F:\eclipse_workspace\Hellojni\jni
d:\ndk\ndk-build.cmd
其实很简单的命令,仅仅是进入jni目录调用ndk-build执行编译操作。
当然jni目录下的Android.mk文件还是要手动配置的,如:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_LDLIBS += -llog
LOCAL_MODULE := Hellojni
LOCAL_SRC_FILES := main.cpp
include $(BUILD_SHARED_LIBRARY)
然后直接在vs2005里面执行编译命令,输出:
1>------ 已启动生成: 项目: jni, 配置: Debug Win32 ------
1>正在执行预生成事件...
1>[armeabi] Compile++ thumb: Hellojni <= main.cpp
1>f:/eclipse_workspace/Hellojni//jni/main.cpp: In function void msg(JNIEnv*, jobject, jstring):
1>f:/eclipse_workspace/Hellojni//jni/main.cpp:56:2: error: pszstr1 was not declared in this scope
1>make.exe: *** [f:/eclipse_workspace/Hellojni//obj/local/armeabi/objs/Hellojni/main.o] Error 11>生成日志保存在“file://f:\eclipse_workspace\Hellojni\jni\Debug\BuildLog.htm”
1>jni - 1 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========

根据编译输出可以知道main.cpp文件的第56行使用了未定义的变量,这里不能双击定位到错误代码行,需要手动定位到相应代码行,解决掉问题后重新编译:
1>------ 已启动生成: 项目: jni, 配置: Debug Win32 ------
1>正在执行预生成事件...
1>[armeabi] Compile++ thumb: Hellojni <= main.cpp
1>[armeabi] SharedLibrary  : libHellojni.so
1>[armeabi] Install        : libHellojni.so => libs/armeabi/libHellojni.so
1>正在编译...
1>main.cpp
1>d:\ndk\platforms\android-19\arch-x86\usr\include\sys\cdefs.h(252) : fatal error C1189: #error :  "No function renaming possible"1>生成日志保存在“file://f:\eclipse_workspace\Hellojni\jni\Debug\BuildLog.htm”
1>jni - 1 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========
当出现这种编译结果时,实际上hellojni的so文件已经编译成功,后面的错误不用理会。libHellojni.so生成在相对jni目录的..\libs\armeabi下。


四、eclipse
只不过我们不要使用javah生成头文件,全部通过注册的方式导出函数。
评价:eclipse虽说笨重臃肿,确是相当的稳定,而且配置也相当简单。但是在编辑C/C++上无优势,android的java层开发远远不如AndroidStudio来得高效。

五、AndroidStudio
评价:慢,不是一般的慢,在编辑C/C++没优势不说编译速度又是超级慢,弃之。AndroidStudio也许只在android的java层开发才是无敌的。

Windows下Android NDK开发的几种方法总结,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。