用Android Sutdio调试NDK
2019獨角獸企業重金招聘Python工程師標準>>>
網上用Android Studio調試NDK的資料不多且分散。我將這幾天踩過的坑及經驗紀錄一下,方便其它朋友。我將從導入一個NDK Samples中的項目開始。
演示代碼放在GitHub上,每個坑為一次Submit。
開發環境
- 操作系統: Mac OS 10.11.1
- IDE: Android Studio 1.5.1
- NDK: android-ndk-r10e
Native鏈接其它庫
加載NDK Samples中的hello-gl2項目后,直接運行會出現如下錯誤:
Error:(39) undefined reference to `glGetError' Error:(41) undefined reference to `__android_log_print' ...在build.gradle文件中添加命令來鏈接相關庫,具體可見Mac下用Android Studio運行NDK samples。
無法進入Native代碼
解決庫鏈接問題后,程序能運行正確運行在設備上,可無法中斷在Native代碼上的斷點處。
-
看到一些文章,如《AndroidNDK開發在本地C/C++源代碼中設置斷點單步調試詳細教程》說的是ADT上的調試;《Using Eclipse for Android C/C++ Debugging》(需翻墻)說的時間Linux系統上調試。這里我做了如下設置:
- 在AndroidManifest.xml 中添加android:debuggable="true" ;
- 在build.gradle中添加sourceSets.main {..}和task ndkBuild(type: Exec){..}
-
以上還是沒有解決問題,情況類似于stackoverflow上的這個問題。根據回答,我又查看了官網的Android NDK Preview
-
按照官網的調試方法配置Android Native時,提示錯誤:Error: Build type isn't JNI debuggable。參考此處可通過修改build.gradle如下來解決:
- 移除項目下的jniLibs文件夾
目測這個不移除,默認就會調用里面的代碼,而不走新編譯的Native庫。
方法總結
采用實驗版插件調試
更簡單的方法是,按照Experimental Plugin User Guide介紹,在Android Studio中可以采用實驗版插件進行調試。最快捷的方式是直接從Google的GitHub上check最新的代碼即可。
Native引用STL庫
在gl_code.cpp中添加如下代碼:
#include <string> using namespace std;運行程序,報出錯誤string: No such file or directory。解決的方法是:修改build.gradle中的**defaultConfig{..}**如下:
P.S. build.gradle配置修改可參考
注意: 如果按照以上方法配置,將忽略項目中已存在的Android.mk文件而自動生成一個位于build文件夾下的Android.mk。Android Studio默認編譯jni文件夾下東西,且項目中的Application.mk文件配置將失效。上圖鏈接STL庫和設置編譯選項在Application.mk中相應的配置選如下:
APP_STL := gnustl_static APP_CPPFLAGS := -std=c++11示例代碼
ndk-debugging
轉載于:https://my.oschina.net/chicboi/blog/625414
總結
以上是生活随笔為你收集整理的用Android Sutdio调试NDK的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt使用教程之创建Qt Quick应用程
- 下一篇: 基于 SWTBot 进行 Eclipse