xref: /aosp_15_r20/tools/aadevtools/avd/add_avd_img.sh (revision b32fbb6340ee6fe4a25d7b39d84085c084465677)
1*b32fbb63SXin Li#!/bin/bash
2*b32fbb63SXin Li
3*b32fbb63SXin Li# Copyright (C) 2021 The Android Open Source Project
4*b32fbb63SXin Li#
5*b32fbb63SXin Li# Licensed under the Apache License, Version 2.0 (the "License");
6*b32fbb63SXin Li# you may not use this file except in compliance with the License.
7*b32fbb63SXin Li# You may obtain a copy of the License at
8*b32fbb63SXin Li#
9*b32fbb63SXin Li#      http://www.apache.org/licenses/LICENSE-2.0
10*b32fbb63SXin Li#
11*b32fbb63SXin Li# Unless required by applicable law or agreed to in writing, software
12*b32fbb63SXin Li# distributed under the License is distributed on an "AS IS" BASIS,
13*b32fbb63SXin Li# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*b32fbb63SXin Li# See the License for the specific language governing permissions and
15*b32fbb63SXin Li# limitations under the License.
16*b32fbb63SXin Li
17*b32fbb63SXin Lireadme() {
18*b32fbb63SXin Li  echo '''
19*b32fbb63SXin LiAdd an AVD image to Android SDK dir. So you can use team in Android Studio AVD manager. e.g.
20*b32fbb63SXin LiOEM_AVD_ZIP="$HOME/Downloads/sdk-repo-linux-system-images-eng.USER.zip" \
21*b32fbb63SXin Li  VARIANT="avd_car" \
22*b32fbb63SXin Li  API_LEVEL=30 \
23*b32fbb63SXin Li  ./add_avd_img.sh
24*b32fbb63SXin Li'''
25*b32fbb63SXin Li}
26*b32fbb63SXin Li
27*b32fbb63SXin Liif [[ -z $VARIANT || -z $API_LEVEL || -z $OEM_AVD_ZIP  ]]; then
28*b32fbb63SXin Li  readme
29*b32fbb63SXin Li  exit
30*b32fbb63SXin Lifi
31*b32fbb63SXin Li
32*b32fbb63SXin LiMY_NAME=$0
33*b32fbb63SXin LiSCRIPT_NAME=${MY_NAME##*/}
34*b32fbb63SXin LiSCRIPT_DIR=${MY_NAME%/$SCRIPT_NAME}
35*b32fbb63SXin Liecho Running from $SCRIPT_DIR
36*b32fbb63SXin Li
37*b32fbb63SXin Li# set up for Linux or macOS
38*b32fbb63SXin LiOS="$(uname -s)"
39*b32fbb63SXin Liecho "Running on $OS"
40*b32fbb63SXin Liif [[ $OS == "Linux" ]]; then
41*b32fbb63SXin Li  export ANDROID_SDK_DIR="$HOME/Android/Sdk"
42*b32fbb63SXin Li  SED_I_CMD="sed -i "
43*b32fbb63SXin Lielif [[ $OS == "Darwin" ]]; then
44*b32fbb63SXin Li  export ANDROID_SDK_DIR="$HOME/Library/Android/sdk"
45*b32fbb63SXin Li  SED_I_CMD="sed -i ''"
46*b32fbb63SXin Lielse
47*b32fbb63SXin Li  echo "ERROR: this does not work on $OS"
48*b32fbb63SXin Li  exit
49*b32fbb63SXin Lifi
50*b32fbb63SXin Liecho "ANDROID_SDK_DIR=$ANDROID_SDK_DIR"
51*b32fbb63SXin Li
52*b32fbb63SXin LiPKG_XML_TEMPLATE="$SCRIPT_DIR/resource/package_template.xml"
53*b32fbb63SXin Liif [[ ! -e $PKG_XML_TEMPLATE ]]; then
54*b32fbb63SXin Li  echo "Make sure there is package.xml template at: $PKG_XML_TEMPLATE."
55*b32fbb63SXin Li  exit
56*b32fbb63SXin Lifi
57*b32fbb63SXin Liecho "PKG_XML_TEMPLATE=$PKG_XML_TEMPLATE"
58*b32fbb63SXin Li
59*b32fbb63SXin LiSYS_IMG_DIR="$ANDROID_SDK_DIR/system-images"
60*b32fbb63SXin Liif [[ ! -d $SYS_IMG_DIR ]]; then
61*b32fbb63SXin Li  echo "ERROR: can not find the AVD system images dir: $SYS_IMG_DIR"
62*b32fbb63SXin Li  echo "Try to reinstall Android Studio & SDK as https://developer.android.com/studio"
63*b32fbb63SXin Lifi
64*b32fbb63SXin Li
65*b32fbb63SXin Li# expected system-images folder format: android-apiLevel/variant/arch/
66*b32fbb63SXin LiAVD_DIR="$ANDROID_SDK_DIR/system-images/android-$API_LEVEL/$VARIANT"
67*b32fbb63SXin Liif [[ -d $AVD_DIR ]]; then
68*b32fbb63SXin Li  echo "NOTE: $AVD_DIR exists already. Delete it if to replace: rm -r $AVD_DIR"
69*b32fbb63SXin Lielse
70*b32fbb63SXin Li  mkdir -p $AVD_DIR
71*b32fbb63SXin Li  unzip $OEM_AVD_ZIP -d $AVD_DIR
72*b32fbb63SXin Lifi
73*b32fbb63SXin Li
74*b32fbb63SXin LiABI=$(ls $AVD_DIR)
75*b32fbb63SXin Liif [[ $ABI != "x86" && $ABI != "x86_64" && $ABI != "arm64" && $ABI != "arm64-v8a" ]]; then
76*b32fbb63SXin Li  echo "ERROR: AVD image zip file format incorrect as $AVD_DIR should contain x86, x86_64, arm64 or arm64-v8a as: https://source.android.com/devices/automotive/start/avd#pack-an-avd-image-zip-file "
77*b32fbb63SXin Li  exit
78*b32fbb63SXin Lifi
79*b32fbb63SXin Liecho "ABI=$ABI"
80*b32fbb63SXin Li
81*b32fbb63SXin LiPKG_XML_FILE="$AVD_DIR/$ABI/package.xml"
82*b32fbb63SXin Liif [[ -e $PKG_XML_FILE ]]; then
83*b32fbb63SXin Li  echo "Delete $PKG_XML_FILE for this setup."
84*b32fbb63SXin Li  rm $PKG_XML_FILE
85*b32fbb63SXin Lifi
86*b32fbb63SXin Li
87*b32fbb63SXin Liecho "Generate $PKG_XML_FILE accorindly"
88*b32fbb63SXin Lised "s/Pkg.Path/system-images;android-$API_LEVEL;$VARIANT;$ABI/" $PKG_XML_TEMPLATE > $PKG_XML_FILE
89*b32fbb63SXin Li$SED_I_CMD "s/AndroidVersion.ApiLevel/$API_LEVEL/" $PKG_XML_FILE
90*b32fbb63SXin Li$SED_I_CMD "s/SystemImage.TagId/android-automotive/" $PKG_XML_FILE
91*b32fbb63SXin Li$SED_I_CMD "s/SystemImage.TagDisplay/$VARIANT/" $PKG_XML_FILE
92*b32fbb63SXin Li$SED_I_CMD "s/SystemImage.Abi/$ABI/" $PKG_XML_FILE
93*b32fbb63SXin Li$SED_I_CMD "s/Addon.VendorId/$VARIANT/" $PKG_XML_FILE
94*b32fbb63SXin Li$SED_I_CMD "s/Addon.VendorDisplay/$VARIANT/" $PKG_XML_FILE
95*b32fbb63SXin Li$SED_I_CMD "s/Display.Name/$VARIANT/" $PKG_XML_FILE
96*b32fbb63SXin Li
97*b32fbb63SXin Liecho
98*b32fbb63SXin Liecho "Restart Android Studio & select [System Image] in [Virtual Device Configuration], [AVD Manager]"
99*b32fbb63SXin Liecho "ADDED: Hardware Category: Automotive, API Level: $API_LEVEL, ABI: $ABI, Target: $VARIANT"
100*b32fbb63SXin Liecho
101