1#!/bin/bash 2set -u 3 4readonly OUT_DIR="$1" 5readonly DIST_DIR="$2" 6readonly SCRIPT_DIR="$(dirname "$0")" 7readonly BASE_DIR=`readlink -m ${SCRIPT_DIR}/../../../../` 8echo "BASE_DIR: $BASE_DIR" 9readonly FAILURE_DIR=layoutlib-test-failures 10readonly FAILURE_ZIP=layoutlib-test-failures.zip 11 12readonly CLEAN_TMP_FILES=1 13readonly USE_SOONG=1 14 15readonly APP_NAME="regression" 16#readonly APP_NAME="test_HelloActivity" 17 18STUDIO_JDK="${BASE_DIR}/prebuilts/jdk/jdk17/linux-x86" 19MISC_COMMON="${BASE_DIR}/prebuilts/misc/common" 20OUT_INTERMEDIATES="${BASE_DIR}/out/soong/.intermediates" 21NATIVE_LIBRARIES="${BASE_DIR}/out/host/linux-x86/lib64/" 22JAVA_LIBRARIES="${BASE_DIR}/out/host/common/obj/JAVA_LIBRARIES/" 23HOST_LIBRARIES="${BASE_DIR}/out/host/linux-x86/" 24SDK="${BASE_DIR}/out/host/linux-x86/sdk/sdk*/android-sdk*" 25SDK_REPO="${BASE_DIR}/out/host/linux-x86/sdk-repo" 26FONT_DIR="${BASE_DIR}/out/host/common/obj/PACKAGING/fonts_intermediates" 27KEYBOARD_DIR="${BASE_DIR}/out/host/common/obj/PACKAGING/keyboards_intermediates" 28ICU_DATA_PATH="${BASE_DIR}/out/host/linux-x86/com.android.i18n/etc/icu/icudt75l.dat" 29TMP_DIR=${OUT_DIR}"/layoutlib_tmp" 30 31PLATFORM=${TMP_DIR}/"android" 32 33if [ ! -d $TMP_DIR ]; then 34 # Copy resources to a temp directory 35 mkdir -p ${TMP_DIR} ${PLATFORM} ${TMP_DIR}/build-tools ${TMP_DIR}/compiled ${TMP_DIR}/manifest 36 37 cp -r ${SDK}/platforms/android*/** ${PLATFORM} 38 39 # Unzip build-tools to access aapt2 40 unzip -q ${SDK_REPO}/sdk-repo-linux-build-tools.zip -d ${TMP_DIR}/build-tools 41 42 # Compile 9-patch files 43 echo \ 44'<?xml version="1.0" encoding="utf-8"?> 45<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.android.layoutlib" />' \ 46> ${TMP_DIR}/manifest/AndroidManifest.xml 47 find ${SDK}/platforms/android*/data/res -name "*.9.png" -print0 | xargs -0 ${TMP_DIR}/build-tools/android-*/aapt2 compile -o ${TMP_DIR}/compiled/ 48 find ${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 49 unzip -q ${TMP_DIR}/compiled.apk -d ${TMP_DIR} 50 for f in ${TMP_DIR}/res/*; do mv "$f" "${f/-v4/}";done 51 cp -RL ${TMP_DIR}/res ${PLATFORM}/data 52fi 53 54 55TEST_JARS="${OUT_INTERMEDIATES}/frameworks/layoutlib/bridge/tests/layoutlib-tests/linux_glibc_common/withres/layoutlib-tests.jar" 56GRADLE_RES="-Dtest_res.dir=${SCRIPT_DIR}/res" 57 58# Run layoutlib tests 59#DEBUGGER=' -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000 ' 60DEBUGGER=' ' 61 62set -x 63${STUDIO_JDK}/bin/java -ea $DEBUGGER \ 64 -Dnative.lib.path=${NATIVE_LIBRARIES} \ 65 -Dfont.dir=${FONT_DIR} \ 66 -Dicu.data.path=${ICU_DATA_PATH} \ 67 -Dkeyboard.dir=${KEYBOARD_DIR} \ 68 -Dplatform.dir=${PLATFORM} \ 69 -Dtest_failure.dir=${OUT_DIR}/${FAILURE_DIR} \ 70 ${GRADLE_RES} \ 71 -cp ${TEST_JARS} \ 72 org.junit.runner.JUnitCore \ 73 com.android.layoutlib.bridge.intensive.Main 74test_exit_code=$? 75set +x 76 77 78# Create zip of all failure screenshots 79rm -f ${OUT_DIR}/${FAILURE_ZIP} 80if [[ -d "${OUT_DIR}/${FAILURE_DIR}" ]]; then 81 zip -q -j -r ${OUT_DIR}/${FAILURE_ZIP} ${OUT_DIR}/${FAILURE_DIR} 82fi 83 84# Move failure zip to dist directory if specified 85if [[ -d "${DIST_DIR}" ]] && [[ -e "${OUT_DIR}/${FAILURE_ZIP}" ]]; then 86 mv ${OUT_DIR}/${FAILURE_ZIP} ${DIST_DIR} 87fi 88 89# Clean 90if [[ $CLEAN_TMP_FILES -eq 1 ]]; then 91 rm -rf ${TMP_DIR} 92 rm -rf ${OUT_DIR}/${FAILURE_DIR} 93fi 94 95exit ${test_exit_code} 96