弄了好久,出了N多问题
网上有关windows NDK 开发的文章很多这里就不详细说明,紧针对可能遇到的问题进行总结。
一 Windows NDK环境搭建参考:
http://blog.youkuaiyun.com/android_panda/article/details/7607946
http://blog.youkuaiyun.com/pocoyoshamoo/article/details/23533923
http://blog.youkuaiyun.com/watkinsong/article/details/9849973
注意:选择Cywin安装包时必须安装:autoconf2.1、automake1.10、binutils、gcc-core、gcc- g++、gcc4-core、gcc4-g++、gdb、pcre、pcre-devel、gawk、make共12个包。
注意:配置Cywin 的bash_profile文件。
注意:如果无法正常下载相关软件如ADT、SDK、NDK等,可以参考这个网址,有很多你需要的下载资源:http://www.cnblogs.com/tc310/p/3938353.html。
二 NDK 开发注意事项
注意:在“Add Native Support”操作后,项目中会生成jni等文件夹,这个操作是不可逆的,如果手动删除了jni文件夹可能会导致项目错误。
注意:右键,选择项目属性(Properties),在C/C++ Build中设置Native Debug参数,如下图所示,Build Command 默认参数是:ndk-build,如果你想单步调试NDK C/C++代码,必须加上 NDM_DEBUG=1,‘=’号两边没有空格。
注意:编写完代码后,接下来调试程序,如果只调试Java程序,Debug中选择Android Application,如果想调试C/C++程序,Debug中选择 Android Native Application!
注意:真机环境十有八九调试不了C/C++程序,会报错误如下所示 the program is not being run。这个时候就要用模拟器调试。
注意:一定要确定模拟器或真机的CPU,可能是armeabi、armeabi-7va、x86、mips,那么我们的NDK程序只能是对应的一种,即在jni文件夹下的Application.mk中设置lib对应的CPU版本,APP_ABI:= armeabi-v7a 或 APP_ABI:= armeabi。如果设置不对或设置了多个CPU版本,在调试的时候,可能会将错误的gdb传递过去,导致无法进入断点调试。
注意:NDK调试提示No symbol table is loaded. Use the "file" command.
请参见:http://blog.youkuaiyun.com/a19860903/article/details/10500565
注意:其他设置没有问题,但是自己设置的断点就是无效,可能是断点在程序启动前设置的,你可以删除原来断点重新设置,就OK了。
注意:提示Unable to detect device compatibility. Please select a target device.APP_PLATFORM ** is larger than android:minSdkVersion 8. Unable to detect application ABI's 错误。这是因为在AndroidManifest.xml中我们设置了minSdkVersion 为8,但是NDK编译平台(platform)最小的版本仍然大于8,所以需要在jni下的Application.mk中添加 APP_PLATFORM := android-8。
注意:如果你在C++中使用了vector 、queue等STL,需要在Application.mk中设置APP_STL属性,如上图所示,我在项目中使用了Vector,必须在Application.mk进行说明。可能有多个stl参数。
注意:当需要编译多个CPP或.c文件时,需要在LOCAL_SRC_FILES :中设置,不同文件用‘\’隔开,如:
LOCAL_SRC_FILES := Native_algorithm_NSPFA.cpp \ Native_algorithm_NFloyd.cpp \ TNode.cpp
否则会在编译过程中找不到其他的文件,报错。
注意:调试的时候NDK可能会提示一些warning,大可不必理会。