近日有个算法(检测碰撞)需要用C++实现,目的是IOS和ANDROID中共享同一段程序。
下面说说android调用这段程序过程中遇到的一些事情。(过程中网上搜索了一些相关文章,大部分说的是eclipse环境中的教程,所以有必要写这篇文章,免得自己遗忘再走弯路)
算法已经完成,接下来自然的过程就是单步调试和日志打印这段程序。
我的IDE环境:Android Studio 1.5.1,ndk是android-ndk-r10e.
JNIEXPORT jboolean JNICALL Java_com_example_shenzhigang_collisiondetection_Peng_isCollided
这样的代码,等等这些教程,网上多,不再叙述。
接下来单步调试的支持:
步骤1:打开模块的build.gradle文件,添加类似如下代码到defaultConfig节点下
ndk {这里的ldLibs "log"后面会说到, moduleName "HelloJNI"这里的HelloJNI只需要和java代码中
moduleName "HelloJNI"
stl "stlport_static"
ldLibs "log"
}
System.loadLibrary("HelloJNI");
这里对应即可。
debug {
jniDebuggable true
}
步骤3:同步build.gradle文件,不出意外的话如图所示的图标不再有红色叉叉,OK,选择app-native,尽情DEBUG吧.....
===============================================================================================
下面说说如何在jni程序中输出日志,这里也是android studio和eclipse不同的地方,也是我写这文章的主要目的:
步骤1:打开模块的build.gradle文件,添加类似如下代码到defaultConfig下的ndk节点下
ldLibs "log"
顺便说一下,eclipse下是直接修改Android.mk文件,添加LOCAL_LDLIBS:=-L$(SYSROOT)/usr/lib -llog这样的代码。虽然android studio也最终会生成Android.mk文件,但这个文件如果去修改的话,每次build都会被自动覆盖回去的。 #include <android/log.h>
然后使用__android_log_print函数,不再细述。