Android 模拟器下载、编译及调试
Android 模擬器源碼下載
Android 模擬器源碼的下載與 Android AOSP 源碼庫的下載過程類似,可以參考 Google 官方提供的 Android 源碼下載文檔 來了解這個過程。
不同的地方在于,下載 Android 源碼,在初始化 repo 客戶端,初始化對某個分支的下載時,通過如下的命令指定該 Android 分支:
而在下載模擬器源碼時,則需要指定一個模擬器的分支。在 https://android.googlesource.com/platform/manifest/+refs 可以看到所有可以指定的分支,包括 Android 分支和模擬器分支,其中模擬器分支主要有如下這些:
emu-1.4-release emu-1.5-release emu-2.0-release emu-2.2-release emu-2.3-release emu-2.4-arc emu-2.4-release emu-2.5-release emu-master-dev在初始化時,需要通過如下命令初始化對模擬器的下載,比如要下載最新的 2.5 版的 Release 版:
$ repo init -u https://android.googlesource.com/platform/manifest -b emu-2.5-release后面同樣通過 repo sync 命令下載整個源碼樹。
可以將模擬器源碼分支理解為特殊的 Android 源碼分支。
Android 模擬器編譯
得到了 Android 模擬器的源碼之后,進入下面的文件夾:
$ cd external/qemu/android/執行如下命令編譯源碼:
./rebuild.sh --no-tests其中的 --no-tests 告訴編譯系統,編譯完成之后不要執行測試程序,以節省時間,提高效率。
編譯完成之后,產生的模擬器可執行文件及庫文件都位于 external/qemu/objs/ 目錄下:
~/emu-2.4-release/external/qemu/android$ ../objs/ ~/emu-2.4-release/external/qemu/objs$ ls android_emu64_unittests emulator64-mips android_emu_metrics64_unittests emulator64_simg2img bin64 emulator64_test_crasher build emulator64-x86 emugl64_common_host_unittests emulator-check emulator lib emulator64-arm lib64 emulator64_crashreport_unittests lib64GLcommon_unittests emulator64-crash-service lib64OpenglRender_unittests emulator64_img2simg qemu emulator64_libui_unittests resources emulator64_make_ext4fs后面就可以像執行 SDK 中的模擬器那樣,執行我們編譯的模擬器了:
~/emu-2.4-release/external/qemu/objs$ ./emulator -avd Nexus_5_API_21_armAndroid 模擬器調試
要想調試 Android 模擬器,就需要生成帶有調試符號等信息的可執行文件和庫。這需要對我們前面執行的編譯腳本程序 rebuild.sh 做一點微小的修改,在這個文件中會調用 android/configure.sh 程序來多編譯過程做配置:
run android/configure.sh --out-dir=$OUT_DIR "$@" ||panic "Configuration error, please run ./android/configure.sh to see why."默認情況下,這個配置程序生成的配置文件,指導編譯過程生成不含調試符號信息的可執行文件和庫。但可以為 android/configure.sh 程序的執行加上 --symbols 以生成帶有調試符號信息的可執行文件和庫。
rebuild.sh 修改之后,大概就像下面這樣:
run android/configure.sh --symbols --out-dir=$OUT_DIR "$@" ||panic "Configuration error, please run ./android/configure.sh to see why."修改之后,重新進入 external/qemu/android/ 目錄下并執行 rebuild.sh。
這次將產生帶有調試符號信息的可執行文件和庫文件,這些文件位于 external/qemu/objs/build/debug_info 目錄下:
~/emu-2.4-release/external/qemu/objs/build/debug_info$ ls android_emu64_unittests emulator64_img2simg emulator-check android_emu_metrics64_unittests emulator64_libui_unittests lib64 emugl64_common_host_unittests emulator64_make_ext4fs lib64GLcommon_unittests emulator emulator64-mips lib64OpenglRender_unittests emulator64-arm emulator64_simg2img qemu emulator64_crashreport_unittests emulator64_test_crasher emulator64-crash-service emulator64-x86原來不帶調試符號信息的文件依然位于 external/qemu/objs/ 目錄下。
然后就可以通過 GDB 來調試帶符號信息的可執行文件和庫了。進入 external/qemu/objs/build/debug_info 目錄下,執行如下命令:
~/emu-2.4-release/external/qemu/objs/build/debug_info$ gdb ./emulator GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1 Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from emulator...done.該命令用于加載可執行文件。隨后,在 GDB 的調試會話中,為可執行文件設置命令行參數,并設置端點:
(gdb) set args -avd Nexus_5_API_21_arm (gdb) break Thread_pthread.cpp:66 (gdb) break emug::RenderThread::main需要注意的是,為一個類函數設置端點時,需要帶上它的命名空間。
然后啟動可執行程序:
(gdb) run隨后在程序執行到我們加端點的位置時,程序將被斷下來。
Done.
總結
以上是生活随笔為你收集整理的Android 模拟器下载、编译及调试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: live555 源码分析:播放启动
- 下一篇: 在 Android 中使用 OpenGL