1#!/bin/bash 2 3readonly OUT_DIR="$1" 4readonly DIST_DIR="$2" 5readonly BUILD_NUMBER="$3" 6 7readonly SCRIPT_DIR="$(dirname "$0")" 8readonly SCRIPT_TO_TOP="../../../../../.." 9 10readonly FAILURE_DIR=layoutlib-test-failures 11readonly FAILURE_ZIP=layoutlib-test-failures.zip 12 13STUDIO_JDK=${SCRIPT_DIR}"/${SCRIPT_TO_TOP}/prebuilts/jdk/jdk11/linux-x86" 14MISC_COMMON=${SCRIPT_DIR}"/${SCRIPT_TO_TOP}/prebuilts/misc/common" 15OUT_INTERMEDIATES=${SCRIPT_DIR}"/${SCRIPT_TO_TOP}/out/soong/.intermediates" 16NATIVE_LIBRARIES=${SCRIPT_DIR}"/${SCRIPT_TO_TOP}/out/host/linux-x86/lib64/" 17JAVA_LIBRARIES=${SCRIPT_DIR}"/${SCRIPT_TO_TOP}/out/soong/.intermediates/platform_testing/libraries/screenshot/deviceless/layoutlib/tests/res/testApp/MyApplication/layoutlib-myapplication/android_common/javac" 18SDK=${SCRIPT_DIR}"/${SCRIPT_TO_TOP}/out/host/linux-x86/sdk/sdk*/android-sdk*" 19SDK_REPO=${SCRIPT_DIR}"/${SCRIPT_TO_TOP}/out/host/linux-x86/sdk-repo" 20FONT_DIR=${SCRIPT_DIR}"/${SCRIPT_TO_TOP}/out/host/common/obj/PACKAGING/fonts_intermediates" 21HYPHEN_DATA_DIR=${SCRIPT_DIR}"/${SCRIPT_TO_TOP}/out/host/common/obj/PACKAGING/hyphen_intermediates" 22KEYBOARD_DIR=${SCRIPT_DIR}"/${SCRIPT_TO_TOP}/out/host/common/obj/PACKAGING/keyboards_intermediates" 23ICU_DATA_PATH=${SCRIPT_DIR}"/${SCRIPT_TO_TOP}/out/host/linux-x86/com.android.i18n/etc/icu/icudt71l.dat" 24TMP_DIR=$(mktemp -d) 25PLATFORM=${TMP_DIR}/"android" 26 27# Copy resources to a temp directory 28cp -r ${SDK}/platforms/android* ${PLATFORM} 29 30# Unzip build-tools to access aapt2 31mkdir ${TMP_DIR}/build-tools 32unzip -q ${SDK_REPO}/sdk-repo-linux-build-tools.zip -d ${TMP_DIR}/build-tools 33 34# Compile 9-patch files 35mkdir ${TMP_DIR}/compiled 36mkdir ${TMP_DIR}/manifest 37echo \ 38'<?xml version="1.0" encoding="utf-8"?> 39<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.android.layoutlib" />' \ 40> ${TMP_DIR}/manifest/AndroidManifest.xml 41find ${SDK}/platforms/android*/data/res -name "*.9.png" -print0 | xargs -0 ${TMP_DIR}/build-tools/android-*/aapt2 compile -o ${TMP_DIR}/compiled/ 42find ${TMP_DIR}/compiled -name "*.flat" -print0 | xargs -0 -s 1000000 ${TMP_DIR}/build-tools/android-*/aapt2 link -o ${TMP_DIR}/compiled.apk --manifest ${TMP_DIR}/manifest/AndroidManifest.xml -R 43unzip -q ${TMP_DIR}/compiled.apk -d ${TMP_DIR} 44for f in ${TMP_DIR}/res/*; do mv "$f" "${f/-v4/}";done 45cp -RL ${TMP_DIR}/res ${PLATFORM}/data 46 47# Run layoutlib tests 48${STUDIO_JDK}/bin/java -ea \ 49 -Dnative.lib.path=${NATIVE_LIBRARIES} \ 50 -Dfont.dir=${FONT_DIR} \ 51 -Dicu.data.path=${ICU_DATA_PATH} \ 52 -Dhyphen.data.dir=${HYPHEN_DATA_DIR} \ 53 -Dkeyboard.dir=${KEYBOARD_DIR} \ 54 -Dplatform.dir=${PLATFORM} \ 55 -Dtest_res.dir=${SCRIPT_DIR}/res \ 56 -Dtest_failure.dir=${OUT_DIR}/${FAILURE_DIR} \ 57 -cp ${MISC_COMMON}/tools-common/tools-common-prebuilt.jar:${MISC_COMMON}/ninepatch/ninepatch-prebuilt.jar:${MISC_COMMON}/sdk-common/sdk-common.jar:${MISC_COMMON}/kxml2/kxml2-2.3.0.jar:${MISC_COMMON}/layoutlib_api/layoutlib_api-prebuilt.jar:${OUT_INTERMEDIATES}/prebuilts/tools/common/m2/trove-prebuilt/linux_glibc_common/combined/trove-prebuilt.jar:${OUT_INTERMEDIATES}/external/junit/junit/linux_glibc_common/javac/junit.jar:${OUT_INTERMEDIATES}/external/guava/guava-jre/linux_glibc_common/javac/guava-jre.jar:${OUT_INTERMEDIATES}/external/hamcrest/hamcrest-core/hamcrest/linux_glibc_common/javac/hamcrest.jar:${OUT_INTERMEDIATES}/external/mockito/mockito/linux_glibc_common/combined/mockito.jar:${OUT_INTERMEDIATES}/external/objenesis/objenesis/linux_glibc_common/javac/objenesis.jar:${OUT_INTERMEDIATES}/frameworks/layoutlib/bridge/layoutlib/linux_glibc_common/withres/layoutlib.jar:${OUT_INTERMEDIATES}/frameworks/layoutlib/temp_layoutlib/linux_glibc_common/gen/temp_layoutlib.jar:${OUT_INTERMEDIATES}/frameworks/layoutlib/bridge/tests/layoutlib-tests/linux_glibc_common/withres/layout-testlib.jar:${OUT_INTERMEDIATES}/platform_testing/libraries/screenshot/deviceless/layoutlib/tests/platform-layoutlib-sample-tests/linux_glibc_common/withres/platform-layoutlib-sample-tests.jar:${OUT_INTERMEDIATES}/platform_testing/libraries/screenshot/deviceless/layoutlib/tests/res/testApp/MyApplication/layoutlib-myapplication/android_common/javac/layoutlib-myapplication.jar \ 58 org.junit.runner.JUnitCore \ 59 com.android.layoutlib.bridge.android.Main 60 61test_exit_code=$? 62 63# Create zip of all failure screenshots 64if [[ -d "${OUT_DIR}/${FAILURE_DIR}" ]]; then 65 zip -q -j -r ${OUT_DIR}/${FAILURE_ZIP} ${OUT_DIR}/${FAILURE_DIR} 66fi 67 68# Move failure zip to dist directory if specified 69if [[ -d "${DIST_DIR}" ]] && [[ -e "${OUT_DIR}/${FAILURE_ZIP}" ]]; then 70 mv ${OUT_DIR}/${FAILURE_ZIP} ${DIST_DIR} 71fi 72 73# Clean 74rm -rf ${TMP_DIR} 75rm -rf ${OUT_DIR}/${FAILURE_DIR} 76 77exit ${test_exit_code} 78 79