你的位置:首页 > 操作系统

[操作系统]Android Studio中JNI程序的单步调试和日志打印


近日有个算法(检测碰撞)需要用C++实现,目的是IOS和ANDROID中共享同一段程序。


下面说说android调用这段程序过程中遇到的一些事情。(过程中网上搜索了一些相关文章,大部分说的是eclipse环境中的教程,所以有必要写这篇文章,免得自己遗忘再走弯路)

算法已经完成,接下来自然的过程就是单步调试和日志打印这段程序。
我的IDE环境:Android Studio 1.5.1,ndk是android-ndk-r10e.
 
首先,如何设置ndk目录,如何把.h和.cpp文件放到项目中,如何按照规范写类似 
JNIEXPORT jboolean JNICALL Java_com_example_shenzhigang_collisiondetection_Peng_isCollided

这样的代码,等等这些教程,网上多,不再叙述。
 
接下来单步调试的支持:
步骤1:打开模块的build.gradle文件,添加类似如下代码到defaultConfig节点下
ndk {
moduleName "HelloJNI"
stl "stlport_static"
ldLibs "log"
}
这里的ldLibs "log"后面会说到, moduleName "HelloJNI"这里的HelloJNI只需要和java代码中
System.loadLibrary("HelloJNI");


这里对应即可。
 
步骤2:添加以下代码到buildTypes下(同样是步骤1中的文件)
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都会被自动覆盖回去的。
 
步骤2:这步和eclipse下是相同的,在需要打印日志的文件下,
#include <android/log.h>

然后使用__android_log_print函数,不再细述。