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函數,不再細述。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM