1#!/bin/bash 2set -e 3 4echo "Starting $0 at $(date)" 5 6androidxArguments="$*" 7 8SCRIPTS_DIR="$(cd $(dirname $0)/.. && pwd)" 9cd "$SCRIPTS_DIR/../../.." 10echo "Script running from $(pwd)" 11ANDROIDX_DIR="$(pwd)" 12 13# Resolve JDK folders for host OS 14STUDIO_JDK="linux" 15PREBUILT_JDK="linux-x86" 16if [[ $OSTYPE == darwin* ]]; then 17 STUDIO_JDK="mac/Contents/Home" 18 PREBUILT_JDK="darwin-x86" 19fi 20 21# resolve dirs 22export OUT_DIR=$(pwd)/out 23 24if [ -z "$DIST_DIR" ]; then 25 DIST_DIR="$OUT_DIR/dist" 26fi 27mkdir -p "$DIST_DIR" 28 29# resolve GRADLE_USER_HOME 30export GRADLE_USER_HOME="$OUT_DIR/gradle" 31mkdir -p "$GRADLE_USER_HOME" 32 33if [ "$STUDIO_DIR" == "" ]; then 34 STUDIO_DIR="$ANDROIDX_DIR" 35else 36 STUDIO_DIR="$(cd $STUDIO_DIR && pwd)" 37fi 38 39TOOLS_DIR=$STUDIO_DIR/tools 40gw="$TOOLS_DIR/gradlew -Dorg.gradle.jvmargs=-Xmx24g" 41 42plat="linux" 43case "`uname`" in 44 Darwin* ) 45 plat="darwin" 46 ;; 47esac 48 49export ANDROID_HOME="$ANDROIDX_DIR/prebuilts/fullsdk-$plat" 50 51function buildStudio() { 52 STUDIO_BUILD_LOG="$OUT_DIR/studio.log" 53 if JAVA_HOME="$STUDIO_DIR/prebuilts/studio/jdk/jdk17/$STUDIO_JDK" $gw -p $TOOLS_DIR publishLocal --stacktrace --no-daemon > "$STUDIO_BUILD_LOG" 2>&1; then 54 echo built studio successfully 55 else 56 cat "$STUDIO_BUILD_LOG" >&2 57 echo failed to build studio 58 return 1 59 fi 60 61 # stop any remaining Gradle daemons, b/205883835 62 JAVA_HOME="$STUDIO_DIR/prebuilts/studio/jdk/jdk17/$STUDIO_JDK" $gw -p $TOOLS_DIR --stop 63} 64 65function zipStudio() { 66 cd "$STUDIO_DIR/out/" 67 zip -qr "$DIST_DIR/tools.zip" repo 68 cd - 69} 70 71buildStudio 72zipStudio 73 74# list java processes to check for any running kotlin daemons, b/201504768 75function listJavaProcesses() { 76 echo "All java processes:" 77 ps -ef | grep /java || true 78} 79listJavaProcesses 80 81# kill kotlin compile daemons in hopes of addressing memory problems, b/201504768 82function killKotlinDaemons() { 83 ps -ef | grep -i java.*kotlin-daemon-embeddable.*org.jetbrains.kotlin.daemon.KotlinCompileDaemon | grep -v grep | awk '{print $2}' | xargs --no-run-if-empty kill || true 84} 85killKotlinDaemons 86 87listJavaProcesses 88 89# Depend on the generated version.properties file, as the version depends on 90# the release flag 91versionProperties="$STUDIO_DIR/out/build/base/builder-model/build/resources/main/com/android/builder/model/version.properties" 92# Mac grep doesn't support -P, so use perl version of `grep -oP "(?<=buildVersion = ).*"` 93export GRADLE_PLUGIN_VERSION=$(perl -nle'print $& while m{(?<=buildVersion=).*}g' "$versionProperties") 94echo "GRADLE_PLUGIN_VERSION=$GRADLE_PLUGIN_VERSION" 95export LINT_VERSION=$(perl -nle'print $& while m{(?<=baseVersion=).*}g' "$versionProperties") 96echo "LINT_VERSION=$LINT_VERSION" 97export GRADLE_PLUGIN_REPO="$STUDIO_DIR/out/repo:$STUDIO_DIR/prebuilts/tools/common/m2/repository" 98if [ "$USE_ANDROIDX_REMOTE_BUILD_CACHE" == "" ]; then 99 export USE_ANDROIDX_REMOTE_BUILD_CACHE=gcp 100fi 101 102$SCRIPTS_DIR/impl/build.sh $androidxArguments --dependency-verification=off -Pandroidx.validateNoUnrecognizedMessages=false 103 104# stop Gradle daemon to clean up after ourselves 105JAVA_HOME="$STUDIO_DIR/prebuilts/studio/jdk/jdk17/$STUDIO_JDK" $gw -p $TOOLS_DIR --stop 106 107echo "Completing $0 at $(date)" 108