【问题标题】:Cannot run android emulator using Command line tools on Linux (PANIC: Broken AVD system path.)无法在 Linux 上使用命令行工具运行 android 模拟器(恐慌:损坏的 AVD 系统路径。)
【发布时间】:2020-07-14 11:48:00
【问题描述】:

我正在尝试设置 Jenkins 从机以进行 android 项目的 UI 测试。当我在尝试运行 android 模拟器时遇到此问题时,我已经没有如何继续的想法了:

[myuser@jenkins-slave-002 emulator]$ export ANDROID_SDK_ROOT="/var/lib/android"
[myuser@jenkins-slave-002 emulator]$ ./emulator -avd pixel-2-api28 -no-window -verbose -show-kernel
emulator: Android emulator version 30.0.5.0 (build_id 6306047) (CL:N/A)
emulator: Found AVD name 'pixel-2-api28'
emulator: Found AVD target architecture: x86
emulator: argv[0]: './emulator'; program directory: '/var/lib/android/emulator'
emulator:  Not a directory: /var/lib/android/android/system-images/android-28/google_apis/x86/

PANIC: Broken AVD system path. Check your ANDROID_SDK_ROOT value [/var/lib/android]!

我错过了什么?

/var/lib/android/android/system-images/(...) 中的重复 android 文件夹看起来不正确,但我不知道这是从哪里来的。我觉得应该是/var/lib/android/system-images/(...)

详情:

之前我已经通过这种方式完成了 android sdk 的完整设置

/lib/var/android/ unzip commandlinetools-linux-6200805_latest.zip (taken from https://developer.android.com/studio#command-tools)

我已经使用 sdkmanager --sdk_root=${ANDROID_HOME} "<package>" 安装了软件包

当前 sdkmanager 列表:

[myuser@jenkins-slave-002 bin]$ sdkmanager --sdk_root=${ANDROID_HOME} --list

Installed packages:=====================] 100% Computing updates...             
  Path                                     | Version | Description                             | Location                                 
  -------                                  | ------- | -------                                 | -------                                  
  emulator                                 | 30.0.5  | Android Emulator                        | emulator/                                
  patcher;v4                               | 1       | SDK Patch Applier v4                    | patcher/v4/                              
  platform-tools                           | 29.0.6  | Android SDK Platform-Tools              | platform-tools/                          
  platforms;android-28                     | 6       | Android SDK Platform 28                 | platforms/android-28/                    
  system-images;android-28;google_apis;x86 | 10      | Google APIs Intel x86 Atom System Image | system-images/android-28/google_apis/x86/
  tools                                    | 1.0.0   | Android SDK Tools 1                     | tools/                                   

我以这种方式创建了 avd:

[myuser@jenkins-slave-002 bin]$ avdmanager create avd -n pixel-2-api28 --device "pixel_2" -k "system-images;android-28;google_apis;x86"

Warning: Observed package id 'emulator' in inconsistent location '/var/lib/android/emulator' (Expected '/var/lib/emulator')
Warning: Observed package id 'patcher;v4' in inconsistent location '/var/lib/android/patcher/v4' (Expected '/var/lib/patcher/v4')
Warning: Observed package id 'platform-tools' in inconsistent location '/var/lib/android/platform-tools' (Expected '/var/lib/platform-tools')
Warning: Observed package id 'platforms;android-28' in inconsistent location '/var/lib/android/platforms/android-28' (Expected '/var/lib/platforms/android-28')
Warning: Observed package id 'system-images;android-28;google_apis;x86' in inconsistent location '/var/lib/android/system-images/android-28/google_apis/x86' (Expected '/var/lib/system-images/android-28/google_apis/x86')
Warning: Observed package id 'tools' in inconsistent location '/var/lib/android/tools' (Expected '/var/lib/tools')
Auto-selecting single ABI x86===========] 100% Fetch remote repository...       
Parsing /var/lib/android/emulator/package.xmlParsing /var/lib/android/patcher/v4/package.xmlParsing /var/lib/android/platform-tools/package.xmlParsing /var/lib/android/platforms/android-28/package.xmlParsing /var/lib/android/system-images/android-28/google_apis/x86/package.xmlParsing /var/lib/android/tools/package.xml

我的 .bashrc 包含这个:

export PATH="/var/lib/android/tools:$PATH"
export PATH="/var/lib/android/tools/bin:$PATH"
export ANDROID_SDK_HOME=/var/lib/android
export ANDROID_HOME=/var/lib/android

这些 SDK 路径存在:

/var/lib/android/tools/bin
/var/lib/android/tools/lib
/var/lib/android/tools
/var/lib/android/.android/cache
/var/lib/android/.android/avd/pixel-2-api28.avd
/var/lib/android/.android/avd
/var/lib/android/licenses
/var/lib/android/patcher/v4
/var/lib/android/patcher
/var/lib/android/.temp
/var/lib/android/emulator/
/var/lib/android/platform-tools/
/var/lib/android/system-images/android-28
/var/lib/android/platforms/android-28

环境是在vmware上运行的CentOS 7 linux发行版

【问题讨论】:

    标签: android android-emulator android-sdk-tools android-sdk-manager


    【解决方案1】:

    对于其他对此感兴趣的人:

    虽然您可以按照建议通过编辑 avd 中的 config.ini 来修复症状,但我发现,至少在我的情况下,最初的原因是 android sdk 的目录结构。 在最近的版本中,sdk 似乎想要一个非常精确的结构,特别是:

    <sdk_root> - cmdline-tools - tools - bin
                                       - lib
    

    我不确定名称是否重要,但似乎在 和您的命令行工具“bin”目录之间有两个级别。我怀疑 avdmanager 正在从“bin”中查找固定数量的目录来查找 SDK 目录。 因此,在您的情况下,将您的工具目录放在一个额外的子目录下,更新您的 PATH 变量以指向新位置,然后重试。

    【讨论】:

      【解决方案2】:

      我能够通过修复 /.android/avd/&lt;avd_name&gt;.avd/config.ini 文件中的 image.sysdir.1 条目来运行模拟器。

      我在这个问题中找到了这个提示:PANIC: Broken AVD system path. Check your ANDROID_SDK_ROOT value

      Go to <user_home>/.android/avd/<avd_name> and open config.ini. Find the image.sysdir.1 property. It points at the directory, inside the SDK directory, that contains the actual system image. Make sure that this directory exists and contains files like build.prop, system.img, etc. If it doesn't, then you have to open the SDK Manager and download system images your AVD requires (see below).
      

      【讨论】:

        猜你喜欢
        • 2019-10-21
        • 2017-12-26
        • 1970-01-01
        • 2018-04-29
        • 2014-03-23
        • 2020-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多