我有一個由基於Java的APK,本機可執行文件和本機庫組成的Android應用程序。 apk通過套接字與本地(根NDK c/C++)可執行文件和庫進行通信。我該如何調試Android本機可執行文件和庫,而不直接集成到APK應用程序中
我不確定它是否重要,但可執行文件和庫是通過cmake編譯的,並被複製爲可執行文件,然後以root身份運行。我需要使用斷點等進行某種類型的調試,而不管它是直接在android studio還是通過命令行。
我有一個由基於Java的APK,本機可執行文件和本機庫組成的Android應用程序。 apk通過套接字與本地(根NDK c/C++)可執行文件和庫進行通信。我該如何調試Android本機可執行文件和庫,而不直接集成到APK應用程序中
我不確定它是否重要,但可執行文件和庫是通過cmake編譯的,並被複製爲可執行文件,然後以root身份運行。我需要使用斷點等進行某種類型的調試,而不管它是直接在android studio還是通過命令行。
您需要在設備上運行gdbserver的,讓它連接到你的可執行
gdbserver的是預建的有NDK,通常在<ndk>/prebuilt/android-arm/gdbserver/
複製gdbserver的二進制文件到您的設備,例如爲了/data/local/tmp
並給它chmod
可執行權限如果你的可執行文件正在運行,發現其與PID
ps
命令和gdb連接到它:
gdbserver :5039 --attach <PID>
注意,5039是通常用於與gdb調試端口號,如果你喜歡,你可以使用自己的
設置從裝置到PC中的端口轉發
adb forward tcp:5039 tcp:5039
運行gdb的局部,注意,您需要手臂有針對性的GDB自帶的NDK太,通常在
<ndk>toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gdb
GDB和你的進程
target remote :5039
而且從在這裏您需要使用符合您的調試期望的gdb命令(設置斷點,載入符號,步進等),例如使用cheatsheet或在通訊中提出要求ents
只要您有本地部分的源代碼並且可以在調試模式下構建它,就可以使用最新版本的Android Studio或命令行lldb或gdb進行調試。您是否嘗試過[這些說明](https://developer3.oculus.com/documentation/mobilesdk/latest/concepts/mobile-studio-debug)? –
我試過以下這些,但是我似乎無法找到當我使用ndk-build時創建的obj目錄。現在我正在使用cmake該目錄似乎不存在。 –
我對Android的cmake用法並不是特別熟悉,但是這一切都歸結爲找到帶有未解決符號的.so文件,只是尋找更大的.so,其大小與其名稱相同 –