跳到主要內容

Run Android VTS with Android R emulator through WSL

Background


  • Android VTS
    The Android Vendor Test Suite (VTS) provides extensive new functionality for Android testing and promotes a test-driven development process.
  • Android R emulator
    Run the latest Android R image from Google CI build artifacts
  • WSL
    WSL is a collection of components that enables native Linux ELF64 binaries to run on Windows. It contains both user mode and kernel mode components. It is primarily comprised of:
    1. User mode session manager service that handles the Linux instance life cycle
    2. Pico provider drivers (lxss.sys, lxcore.sys) that emulate a Linux kernel by translating Linux syscalls
    3. Pico processes that host the unmodified user mode Linux (e.g. /bin/bash)
    It is the space between the user mode Linux binaries and the Windows kernel components where the magic happens. By placing unmodified Linux binaries in Pico processes we enable Linux system calls to be directed into the Windows kernel. The lxss.sys and lxcore.sys drivers translate the Linux system calls into NT APIs and emulate the Linux kernel.

Environmental Requirements

  • Windows 10 64bit computer with Windows build 16215 or later
  • Enable "Windows Subsystem for Linux" optional feature on Windows: check here
  • Android SDK with "emulator", "extras;intel;Hardware_Accelerated_Execution_Manager", "platform-tools", "tools" packages installed
  • Enable Intel(R) Virtualization Technology (VT) and install Intel HAXM

Quick Start

  1. Download android-R.zip and unzip in %SDK_ROOT%\system-images\
  2. Download Pixel_API_30.zip and unzip in %UserProfile%\.android\avd\
  3. Start Android emulator: %SDK_ROOT%\emulator\emulator.exe -avd Pixel_API_30
  4. Check "emulator-5554" in the list of "adb devices"
  5. Create a symlink to let adb.exe can be found in WSL by "adb"
    cd /D %SDK_ROOT%\platform-tools
    mklink adb adb.exe
  6. Download and install Ubuntu 18.04 Aapx through powershell:
    Add-AppxPackage CanonicalGroupLimited.Ubuntu18.04onWindows_1804.2018.817.0_x64__79rhkp1fndgsc.Appx
  7. Download and import my WSL distro backup(eric/1688) through Command Prompt
    wsl --import Ubuntu-18.04 %LOCALAPPDATA%\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState eric-wsl-backup.tar
  8. Run the imported WSL distro from Command Prompt
    wsl --distribution Ubuntu-18.04
  9. In WSL, modify PATH in ~/.bashrc to your Windows adb path
    # for Windows adb.exe
    export PATH=/mnt/c/your/path/to/android_sdk/platform-tools:$PATH
  10. In WSL, run the vts-tradefed
    cd ~/android-vts/tools
    ./vts-tradefed
    run vts-codelab -m VtsCodelabHelloWorldTest
  11. Open the test_result.html report in %LOCALAPPDATA%\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\eric\android-vts\results\2019.12.15_03.59.09
    PS. Do NOT edit/modify files from Windows, only WSL can manipulate files inside lxfs

Start from scratch

  • Prepare Android R system image
    • Download android-sdk_XXXXXXX_linux-x86.zip from Google Android aosp-master grid
      For example:
      click sdk_x86_64-sdk Artifacts link in submit 6073524 and download android-sdk_6073524_linux-x86.zip
    • Unzip android-sdk_XXXXXXX_linux-x86.zip and get system-images\android-R
  • Prepare Pixel_API_30 AVD
    create an API_29 AVD then duplicate it and modify the following
    • Pixel_API_30.ini
      replace Pixel_API_29 to Pixel_API_30
      replace target=android-29 to target=android-R
    • Pixel_API_30.avd\config.ini
      remove all lines contain "PlayStore"
      replace all 29 to 30
      set image.sysdir.1=system-images\android-R\x86_64\
  • Install WSL Terminal
    • Search and install "Ubuntu 18.04 LTS" by Microsoft Store
    • Add-AppxPackage XXX.aapx
    • Use MobaXterm as WSL Terminal
  • Setup Ubuntu distro
    sudo sed -i 's/us.archive.ubuntu.com/free.nchc.org.tw/g' /etc/apt/sources.list
    sudo sed -i 's/archive.ubuntu.com/free.nchc.org.tw/g' /etc/apt/sources.list
    sudo sed -i 's/security.ubuntu.com/free.nchc.org.tw/g' /etc/apt/sources.list
    sudo apt-get clean all
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install python-dev \
    python-protobuf protobuf-compiler \
    python-virtualenv python-pip \
    default-jdk \
    unzip
  • Mount Windows filesystem
    sudo mkdir /mnt/d
    sudo mount -t drvfs D: /mnt/d

Reference

留言

這個網誌中的熱門文章

[Qt][Embedded][PXA270]
Porting Qt 4.8.6 for Creator XScale PXA270

這篇文章介紹這學期我在嵌入式作業系統課程,使用Creator XScale PXA270板子的一些學習筆記與製作final project的一些過程,歡迎各位多多指教~ 背景介紹 Creator XScale PXA270開發版是一塊由 新華電腦(microtime) 公司出品的 模組化XScale/ARM/SoC/FPGA/DSP嵌入式行動通訊發展平台 ,在此課程與final project主要使用的是"Create XScale‐PXA270 子板"與"MTLCD‐0708048 LCD Module",在Create XScale‐PXA270子板上的為Intel(現在已出售給Marvell)的 Xscale系列 PXA270 處理器,基於ARMv5TE架構指令集,在旁附有SDRAM Memory 64MB、Flash Memory 32MB、SD Card Connectors、RJ45 10/100 Base‐T Ethernet Interface、USB 1.1 Device/Host Port各一、AC97 Audio Codec(Line_in、Mic_in、Headphone)、ADC Interface*4、PWM Interface、CMOS Camera Interface、TFT-LCD Interface、GPIO Interface...等;在軟體功能部分,由新華科技提供了GNU GCC cross compiler toolchain(arm-unknown-linux-gnu-gcc 4.0.2)、Uboot 1.1.5、Linux Kernel 2.6.15.3與patch(提供支援子板上的Ethernet、USB Host、TFT‐LCD(Frame buffer、Touch Screen)、AC97‐Codec...等與母板LED、7‐Seg LED、Key Pad...等的device driver)、rootfs,相關的實驗環境設定可以參考 User Guide 。 看到以上這麼多的軟硬體介面,別以為這板子有多強,其實這是 2006 年 ASUS P535 手機使用的規格了,不禁讓人感嘆科技進步之快阿~ 在此附上開發版本尊 Qt 是自由且開放原始碼的跨平台C...

[Android][AOSP][ddmlib][Intelij IDEA][Gradle]搭建Android ddmlib編譯環境

Android ddmlib在AOSP的platform/tools/base的repo內 可以使用以下指令將整個repo的master branch抓回: git clone https://android.googlesource.com/platform/tools/base 取其中的annotations、common、ddmlib 建立Intelij IDEA專案 使用Intelij IDEA開一新的Java Project,GroupId、ArtifictedId、Version隨便,並使用graddle wrapper方式建立專案: GroupId 'com.android.tools.ddms' ArtifictedId = 'ddmlib' Version '1.0-SNAPSHOT' 刪除IDE建立的src資料夾,建立base資料夾,將annotations、common、ddmlib複製進來 參考Android Studio建立的專案,修改build.gradle為: // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { mavenCentral() } } allprojects { repositories { mavenCentral() } } task clean(type: Delete) { delete rootProject.buildDir } 修改settings.gradle,加入annotations、common、ddmlib為include rootProject.name = 'ddmlib' include ':base:annotations' include ':base:common' include ':base:ddmlib' 修改annotations、common、ddmlib內的b...