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

來源:互聯網
上載者:User

標籤: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 模擬器下載、編譯及調試

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.