1. 程式人生 > >Android 模擬器下載、編譯及調試

Android 模擬器下載、編譯及調試

端點 emulator version rep bug err 2.3 redist ext4

Android 模擬器源碼下載

Android 模擬器源碼的下載與 Android AOSP 源碼庫的下載過程類似,可以參考 Google 官方提供的 Android 源碼下載文檔 來了解這個過程。

不同的地方在於,下載 Android 源碼,在初始化 repo 客戶端,初始化對某個分支的下載時,通過如下的命令指定該 Android 分支:

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

而在下載模擬器源碼時,則需要指定一個模擬器的分支。在 https://android.googlesource.com/platform/manifest/+refs

可以看到所有可以指定的分支,包括 Android 分支和模擬器分支,其中模擬器分支主要有如下這些:

emu-1.4-releaseemu-1.5-releaseemu-2.0-releaseemu-2.2-releaseemu-2.3-releaseemu-2.4-arc
emu-2.4-releaseemu-2.5-releaseemu-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_arm

Android 模擬器調試

要想調試 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.1Copyright (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.



本文來自網易實踐者社區,經作者韓鵬飛授權發布。

了解 網易雲 :

網易雲官網:https://www.163yun.com

雲創大會0元搶購早鳥票:https://yc.163yun.com

雲產品全面促銷5折起:https://www.163yun.com/activity/promotion


Android 模擬器下載、編譯及調試