diff --git a/external/devlib/doc/tools.rst b/external/devlib/doc/tools.rst index d007301bfe6ab43247c9fba3f1ddcc694de912d9..f2758aac3339bb49d4b03a09e7d7896b2fabf0ec 100644 --- a/external/devlib/doc/tools.rst +++ b/external/devlib/doc/tools.rst @@ -4,7 +4,7 @@ Tools Android ------- -``tools/android/install_base.sh`` script installs Android command line tools +``tools/android/setup_host.sh`` script installs Android command line tools for Linux and creates Android Virtual Devices (AVD). The script creates ``android-sdk-linux`` directory under ``tools/android`` and @@ -13,7 +13,7 @@ https://developer.android.com/tools/variables). Your ``ANDROID_USER_HOME`` and ``ANDROID_EMULATOR_HOME`` environment variables point to ``tools/android/android-sdk-linux/.android``. Hence, removing -``android-sdk-linux`` folder will clean all artefacts of ``install_base.sh``. +``android-sdk-linux`` folder will clean all artefacts of ``setup_host.sh``. It fetches Android command line tools, then installs Android SDK Platform-Tools, SDK Platform 31 (for Android 12) & 34 (for Android 14), and @@ -93,7 +93,7 @@ tests for Android, Linux, LocalLinux, and QEMU targets. The Dockerfile forks from ``Ubuntu-22.04``, installs required system packages, checks out ``master`` branch of devlib, installs devlib, creates Android -virtual devices via ``tools/android/install_base.sh``, and QEMU images for +virtual devices via ``tools/android/setup_host.sh``, and QEMU images for aarch64 and x86_84 architectures. Version Android command line tools (``CMDLINE_VERSION``), buildroot diff --git a/external/devlib/tools/android/install_base.sh b/external/devlib/tools/android/setup_host.sh similarity index 83% rename from external/devlib/tools/android/install_base.sh rename to external/devlib/tools/android/setup_host.sh index d1ea7612d944f0bd8d2fc3faa8e20cca0689d84e..60b283cc2b04fb147abaca64b7eaab3afb04fed7 100755 --- a/external/devlib/tools/android/install_base.sh +++ b/external/devlib/tools/android/setup_host.sh @@ -15,12 +15,26 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -# -# Forked from https://github.com/ARM-software/lisa/blob/main/install_base.sh -# + +# Script to install Android SDK tools for LISA & devlib on an Ubuntu-like +# system and creates Android virtual devices. # shellcheck disable=SC2317 +if [[ -z ${ANDROID_HOME:-} ]]; then + ANDROID_HOME="$(dirname "${BASH_SOURCE[0]}")/android-sdk-linux" + export ANDROID_HOME +fi +export ANDROID_USER_HOME="${ANDROID_HOME}/.android" + +ANDROID_CMDLINE_VERSION=${ANDROID_CMDLINE_VERSION:-"11076708"} + +# Android SDK is picky on Java version, so we need to set JAVA_HOME manually. +# In most distributions, Java is installed under /usr/lib/jvm so use that. +# according to the distribution +ANDROID_SDK_JAVA_VERSION=17 + + # Read standard /etc/os-release file and extract the needed field lsb_release # binary is not installed on all distro, but that file is found pretty much # anywhere. @@ -54,13 +68,15 @@ get_android_sdk_host_arch() { echo "${arch}" } -ANDROID_HOME="$(dirname "${0}")/android-sdk-linux" -export ANDROID_HOME -export ANDROID_USER_HOME="${ANDROID_HOME}/.android" +# No need for the whole SDK for this one +install_android_platform_tools() { + echo "Installing Android Platform Tools ..." -mkdir -p "${ANDROID_HOME}/cmdline-tools" + local url="https://dl.google.com/android/repository/platform-tools-latest-linux.zip" -ANDROID_CMDLINE_VERSION=${ANDROID_CMDLINE_VERSION:-"11076708"} + echo "Downloading Android Platform Tools from: ${url}" + wget -qO- "${url}" | bsdtar -xf- -C "${ANDROID_HOME}/" +} cleanup_android_home() { echo "Cleaning up Android SDK: ${ANDROID_HOME}" @@ -85,15 +101,8 @@ install_android_sdk_manager() { chmod +x -R "${ANDROID_HOME}/cmdline-tools/latest/bin" yes | (call_android_sdkmanager --licenses || true) - - echo "Creating the link to skins directory..." - readlink "${ANDROID_HOME}/skins" > /dev/null 2>&1 || ln -sf "../skins" "${ANDROID_HOME}/skins" } -# Android SDK is picky on Java version, so we need to set JAVA_HOME manually. -# In most distributions, Java is installed under /usr/lib/jvm so use that. -# according to the distribution -ANDROID_SDK_JAVA_VERSION=17 find_java_home() { _JAVA_BIN=$(find -L /usr/lib/jvm -path "*${ANDROID_SDK_JAVA_VERSION}*/bin/java" -not -path '*/jre/bin/*' -print -quit) _JAVA_HOME=$(dirname "${_JAVA_BIN}")/../ @@ -115,15 +124,24 @@ call_android_avdmanager() { call_android_sdk avdmanager "$@" } -# Needs install_android_sdk_manager first -install_android_tools() { - local android_sdk_host_arch - android_sdk_host_arch=$(get_android_sdk_host_arch) +install_build_tools() { + yes | call_android_sdkmanager --verbose --channel=0 --install "build-tools;34.0.0" +} +install_platform_tools() { yes | call_android_sdkmanager --verbose --channel=0 --install "platform-tools" +} + +install_platforms() { yes | call_android_sdkmanager --verbose --channel=0 --install "platforms;android-31" yes | call_android_sdkmanager --verbose --channel=0 --install "platforms;android-33" yes | call_android_sdkmanager --verbose --channel=0 --install "platforms;android-34" +} + +install_system_images() { + local android_sdk_host_arch + android_sdk_host_arch=$(get_android_sdk_host_arch) + yes | call_android_sdkmanager --verbose --channel=0 --install "system-images;android-31;google_apis;${android_sdk_host_arch}" yes | call_android_sdkmanager --verbose --channel=0 --install "system-images;android-33;android-desktop;${android_sdk_host_arch}" yes | call_android_sdkmanager --verbose --channel=0 --install "system-images;android-34;google_apis;${android_sdk_host_arch}" @@ -136,15 +154,15 @@ create_android_vds() { local vd_name vd_name="devlib-p6-12" echo "Creating virtual device \"${vd_name}\" (Pixel 6 - Android 12)..." - echo no | call_android_avdmanager -s create avd -n "${vd_name}" -k "system-images;android-31;google_apis;${android_sdk_host_arch}" --skin pixel_6 -b "${android_sdk_host_arch}" -f + echo no | call_android_avdmanager -s create avd -n "${vd_name}" -k "system-images;android-31;google_apis;${android_sdk_host_arch}" -b "${android_sdk_host_arch}" -f vd_name="devlib-p6-14" echo "Creating virtual device \"${vd_name}\" (Pixel 6 - Android 14)..." - echo no | call_android_avdmanager -s create avd -n "${vd_name}" -k "system-images;android-34;google_apis;${android_sdk_host_arch}" --skin pixel_6 -b "${android_sdk_host_arch}" -f + echo no | call_android_avdmanager -s create avd -n "${vd_name}" -k "system-images;android-34;google_apis;${android_sdk_host_arch}" -b "${android_sdk_host_arch}" -f vd_name="devlib-chromeos" echo "Creating virtual device \"${vd_name}\" (ChromeOS - Android 13, Pixel tablet)..." - echo no | call_android_avdmanager -s create avd -n "${vd_name}" -k "system-images;android-33;android-desktop;${android_sdk_host_arch}" --skin pixel_tablet -b "${android_sdk_host_arch}" -f + echo no | call_android_avdmanager -s create avd -n "${vd_name}" -k "system-images;android-33;android-desktop;${android_sdk_host_arch}" -b "${android_sdk_host_arch}" -f } install_apt() { @@ -171,15 +189,16 @@ install_pacman() { apt_packages=( cpu-checker libarchive-tools - wget - unzip qemu-user-static + wget ) # pacman-based distributions like Archlinux or its derivatives pacman_packages=( + coreutils libarchive qemu-user-static + wget ) # Detection based on the package-manager, so that it works on derivatives of @@ -198,9 +217,7 @@ fi if [[ -n "${package_manager}" ]] && ! test_os_release NAME "${expected_distro}"; then unsupported_distro=1 - echo - echo "INFO: the distribution seems based on ${package_manager} but is not ${expected_distro}, some package names might not be right" - echo + echo -e "\nINFO: the distribution seems based on ${package_manager} but is not ${expected_distro}, some package names might not be right\n" else unsupported_distro=0 fi @@ -239,22 +256,34 @@ for arg in "${args[@]}"; do handled=1 ;;& + # Not part of --install-all since that is already satisfied by + # --install-android-tools The advantage of that method is that it does not + # require the Java JDK/JRE to be installed, and is a bit quicker. However, + # it will not provide the build-tools which are needed by devlib. + "--install-android-platform-tools") + install_functions+=(install_android_platform_tools) + handled=1 + ;;& + "--install-android-tools" | "--install-all") install_functions+=( find_java_home install_android_sdk_manager - install_android_tools + install_build_tools + install_platform_tools ) apt_packages+=(openjdk-"${ANDROID_SDK_JAVA_VERSION}"-jre openjdk-"${ANDROID_SDK_JAVA_VERSION}"-jdk) pacman_packages+=(jre"${ANDROID_SDK_JAVA_VERSION}"-openjdk jdk"${ANDROID_SDK_JAVA_VERSION}"-openjdk) - handled=1; + handled=1 ;;& "--create-avds" | "--install-all") install_functions+=( find_java_home install_android_sdk_manager - install_android_tools + install_platform_tools + install_platforms + install_system_images create_android_vds ) handled=1 @@ -286,7 +315,11 @@ ordered_functions=( # cleanup must be done BEFORE installing cleanup_android_home install_android_sdk_manager - install_android_tools + install_android_platform_tools + install_build_tools + install_platform_tools + install_platforms + install_system_images create_android_vds ) @@ -294,6 +327,8 @@ ordered_functions=( # shellcheck disable=SC2207 install_functions=($(echo "${install_functions[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')) +mkdir -p "${ANDROID_HOME}/cmdline-tools" + # Call all the hooks in the order of available_functions ret=0 for f in "${ordered_functions[@]}"; do diff --git a/external/devlib/tools/android/skins/pixel_6/back.webp b/external/devlib/tools/android/skins/pixel_6/back.webp deleted file mode 100644 index a412568027a0add4fc57c42580efa8262068a118..0000000000000000000000000000000000000000 Binary files a/external/devlib/tools/android/skins/pixel_6/back.webp and /dev/null differ diff --git a/external/devlib/tools/android/skins/pixel_6/layout b/external/devlib/tools/android/skins/pixel_6/layout deleted file mode 100644 index ae638d344e802d9630499ea1b0d6f1b2aeb0c3e2..0000000000000000000000000000000000000000 --- a/external/devlib/tools/android/skins/pixel_6/layout +++ /dev/null @@ -1,36 +0,0 @@ -parts { - device { - display { - width 1080 - height 2400 - x 0 - y 0 - } - } - portrait { - background { - image back.webp - } - foreground { - mask mask.webp - cutout hole - } - } -} -layouts { - portrait { - width 1209 - height 2553 - event EV_SW:0:1 - part1 { - name portrait - x 0 - y 0 - } - part2 { - name device - x 60 - y 69 - } - } -} diff --git a/external/devlib/tools/android/skins/pixel_6/mask.webp b/external/devlib/tools/android/skins/pixel_6/mask.webp deleted file mode 100644 index c658b192d586d2f089e49942c2d4bf3e577172ae..0000000000000000000000000000000000000000 Binary files a/external/devlib/tools/android/skins/pixel_6/mask.webp and /dev/null differ diff --git a/external/devlib/tools/android/skins/pixel_tablet/back.webp b/external/devlib/tools/android/skins/pixel_tablet/back.webp deleted file mode 100644 index 63cd8c042f52d07179063bdcb0c815434b5ca628..0000000000000000000000000000000000000000 Binary files a/external/devlib/tools/android/skins/pixel_tablet/back.webp and /dev/null differ diff --git a/external/devlib/tools/android/skins/pixel_tablet/layout b/external/devlib/tools/android/skins/pixel_tablet/layout deleted file mode 100644 index 09d76f9e7c282bf0e5b6ef769d2915e203167344..0000000000000000000000000000000000000000 --- a/external/devlib/tools/android/skins/pixel_tablet/layout +++ /dev/null @@ -1,35 +0,0 @@ -parts { - device { - display { - width 2560 - height 1600 - x 0 - y 0 - } - } - portrait { - background { - image back.webp - } - foreground { - mask mask.webp - } - } -} -layouts { - landscape { - width 2798 - height 1837 - event EV_SW:0:1 - part1 { - name portrait - x 0 - y 0 - } - part2 { - name device - x 119 - y 117 - } - } -} \ No newline at end of file diff --git a/external/devlib/tools/android/skins/pixel_tablet/mask.webp b/external/devlib/tools/android/skins/pixel_tablet/mask.webp deleted file mode 100644 index f7e99b803c1e6354c7d9c5d0b778b0c6d7c4c7ff..0000000000000000000000000000000000000000 Binary files a/external/devlib/tools/android/skins/pixel_tablet/mask.webp and /dev/null differ diff --git a/external/devlib/tools/docker/Dockerfile b/external/devlib/tools/docker/Dockerfile index b96a90352bce282b185efaf4cc05fe88948b4ce7..05fbb38356231666a2e9a6c32412df235e198b90 100644 --- a/external/devlib/tools/docker/Dockerfile +++ b/external/devlib/tools/docker/Dockerfile @@ -24,9 +24,9 @@ FROM ubuntu:22.04 -ENV DEBIAN_FRONTEND noninteractive +ENV DEBIAN_FRONTEND=noninteractive -ENV DEVLIB_REF master +ENV DEVLIB_REF=master RUN apt-get update && \ apt-get install -y --no-install-recommends \ @@ -66,7 +66,7 @@ RUN cd /devlib && \ # Set ANDROID_CMDLINE_VERSION environment variable if you want to use a # specific version of Android command line tools rather than default # which is ``11076708`` as of writing this comment. -RUN cd /devlib/tools/android && ./install_base.sh +RUN cd /devlib/tools/android && ./setup_host.sh # Set BUILDROOT_VERSION environment variable if you want to use a specific # branch of buildroot rather than default which is ``2023.11.1`` as of diff --git a/external/devlib/tools/docker/run_tests.sh b/external/devlib/tools/docker/run_tests.sh index e6e1a8af328a38467a85541dfc0d3b8cc5fd65db..5d32b7d2a6a7ded57895f1c6b9abce9b0558b740 100755 --- a/external/devlib/tools/docker/run_tests.sh +++ b/external/devlib/tools/docker/run_tests.sh @@ -37,5 +37,5 @@ echo "Waiting 30 seconds for Android virtual devices to finish boot up..." sleep 30 cd /devlib -cp -f tools/docker/target_configs.yaml tests/ +cp -f tools/docker/test_config.yml tests/ python3 -m pytest --log-cli-level DEBUG ./tests/test_target.py diff --git a/external/devlib/tools/docker/target_configs.yml b/external/devlib/tools/docker/test_config.yml similarity index 100% rename from external/devlib/tools/docker/target_configs.yml rename to external/devlib/tools/docker/test_config.yml