標籤:help ini 而在 發布 why ext link 編譯過程 main
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 "[email protected]" ||
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 "[email protected]" ||
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 模擬器下載、編譯及調試