NDK開發,如何配置 debug環境


       剛開始做NDK 開發的時候,Android Studio 還沒提供了 native C/C++ 設置斷點 調試,我們都是通過輸出 日志來調試,這樣費時耗力。Android Studio 應該是在 2.2 版本才提供的設置斷點 debug 功能,同時在該版本也提供了 cmake 編譯。
     我目前在做 NDK 開發的時候,還是習慣用 NDK-Build(也就是設置 Android.mk) 來開發,我先簡單說一下怎么用輸出日志來調試:
1、首先在 Android.mk 設置MODULE 添加日志庫,如下代碼:

include $(CLEAR_VARS)
LOCAL_MODULE := ndktest
LOCAL_SRC_FILES := native_lib.c
LOCAL_LDLIBS += -llog 
include $(BUILD_SHARED_LIBRARY)

 

2、然后在 native_lib.c 實現文件添加:

#include <android/log.h>

//為了方便調用,將輸出宏定義
#define LOG_TAG "NATIVE_OUTPUT"
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__))
#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__))

 

3、最后就能在 native_lib.c 實現文件的 方法里輸出日志了,如:

LOGI("run here");
LOGI("run i=%d", i);

 

上述是比較繁瑣的調試方法,每次寫完日志,又要重新編譯一下代碼。現在敘述一下怎么搭建 native C/C++ 斷點調試方法:
1、首先要把你的 Android Studio 升級到 2.2 或更高,且在Module下 build.gradle 的buildToolsVersion 參數 要 設置 25 或以上: buildToolsVersion '25.0.0'

2、如果你是新創建項目, 你可以在New Project 時候, 在 Application name 選項下 有個復選框(Include C++ support) 選上,IDE 在構建項目的時候,會幫你配置好了 debug 環境。

3、如果你是從舊項目移植過來的(也就是以前用 Android.mk配置),你可以打開 Module下 build.gradle文件
defaultConfig節點中,添加ndk,如下:

ndk {
     moduleName "imagetool"
     abiFilters "armeabi"//編譯支持的平台
     // .. 根據自己的 Application.mk 的配置,按 gradle 規則配置一下
}

 

然后在Android 的節點中,添加 externalNativeBuild 節點:

externalNativeBuild {
    ndkBuild {
        // Android.mk 的相對路徑
         path "src/main/jni/Android.mk"
    }
}

 

接着 sync Project 同步一下項目,你會看見項目多了幾個文件夾:


當你點擊 Run Debug 按鈕 右邊 的Attach debugger to Android process 按鈕,如果有 Native、Dual 選擇:

 


當你點擊 Run Debug 按鈕 右邊 的Attach debugger to Android process 按鈕,如果有 Native、Dual 選擇:

說明你配置成功了, 可以在 native-lib.c 實現文件 設置斷點來調試了。 上述截圖 彈框 是debuger 配置,默認是 auto 選項,你可以設置 成 native 用來debug 你的natvie 代碼。

debug 到 native 的時候如下:

 

你可以使用 LLDB 作為你的Debug 輔助工具, LLDB怎么使用,這一章不細說,你可以查閱其它資料。

參考資料:
https://developer.android.google.cn/studio/debug/index.html
https://developer.android.google.cn/index.html (Android 大陸官網)

tips:假設你已經配置好了NDK開發環境,以及 LLDB 插件。

在 debug的時候如下出現如下錯誤:
Error:FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:externalNativeBuildDebug'.
> Build command failed.
Error while executing process E:\Android\Sdk\ndk-bundle\ndk-build.cmd with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=G:\project\Android\Anti-shake-arithmetic\app\src\main\jni\Android.mk NDK_APPLICATION_MK=G:\project\Android\Anti-shake-arithmetic\app\src\main\jni\Application.mk APP_ABI=armeabi NDK_ALL_ABIS=armeabi NDK_DEBUG=1 APP_PLATFORM=android-15 NDK_OUT=G:/project/Android/Anti-shake-arithmetic/app/build/intermediates/ndkBuild/debug/obj NDK_LIBS_OUT=G:\project\Android\Anti-shake-arithmetic\app\build\intermediates\ndkBuild\debug\lib G:/project/Android/Anti-shake-arithmetic/app/build/intermediates/ndkBuild/debug/obj/local/armeabi/libNDKUtils.so}
[armeabi] StaticLibrary : libclapack1.a
process_begin: CreateProcess(NULL, E:/Android/Sdk/ndk-bundle/build//../toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-ar crsD ....

很有可能是你 defaultConfig節點中,ndk 節點的配置信息與 Application.mk 不匹配,需要你 在ndk 節點添加上去


免責聲明!

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



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