无法在 Linux 上使用命令行工具 运行 android 模拟器(恐慌:损坏的 AVD 系统路径。)

Cannot run android emulator using Command line tools on Linux (PANIC: Broken AVD system path.)

我正在尝试为 android 项目的 UI 测试设置 Jenkins 从机。当我尝试 运行 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

环境是CentOS 7 linux distribution 运行ning on a vmware

通过修复 /.android/avd/<avd_name>.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).

其他对此感兴趣的人:

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

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

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