pipeline { agent { label 'android' } environment { ANDROID_HOME = "${env.HOME}/Android/Sdk" ANDROID_SDK_ROOT = "${env.HOME}/Android/Sdk" JAVA_HOME = '/opt/java/openjdk' PATH = "${env.ANDROID_HOME}/cmdline-tools/latest/bin:${env.ANDROID_HOME}/platform-tools:${env.PATH}" } options { buildDiscarder(logRotator(numToKeepStr: '10')) timeout(time: 30, unit: 'MINUTES') } stages { stage('Verify JDK') { steps { sh 'java -version' sh 'javac -version' } } stage('Bootstrap Android SDK') { steps { sh ''' if [ ! -d "$ANDROID_HOME/cmdline-tools/latest/bin" ]; then echo "Installing Android SDK command-line tools..." mkdir -p "$ANDROID_HOME" CMDLINE_TOOLS_URL="https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip" curl -fsSL -o /tmp/cmdline-tools.zip "$CMDLINE_TOOLS_URL" unzip -qo /tmp/cmdline-tools.zip -d "$ANDROID_HOME/cmdline-tools-tmp" mkdir -p "$ANDROID_HOME/cmdline-tools/latest" mv "$ANDROID_HOME/cmdline-tools-tmp/cmdline-tools/"* "$ANDROID_HOME/cmdline-tools/latest/" rm -rf "$ANDROID_HOME/cmdline-tools-tmp" /tmp/cmdline-tools.zip fi ''' sh ''' yes | sdkmanager --licenses > /dev/null 2>&1 || true sdkmanager --install \ "platform-tools" \ "platforms;android-34" \ "build-tools;34.0.0" ''' } } stage('Build Debug APK') { steps { sh 'chmod +x gradlew' sh './gradlew assembleDebug --no-daemon' } } stage('Build Release APK') { when { expression { try { credentials('joykoo-scanner-keystore') return true } catch (e) { echo 'Signing credentials not configured — skipping release build.' return false } } } environment { KEYSTORE_FILE = credentials('joykoo-scanner-keystore') KEYSTORE_CREDS = credentials('joykoo-scanner-keystore-creds') } steps { sh ''' ./gradlew assembleRelease --no-daemon \ -Pandroid.injected.signing.store.file=$KEYSTORE_FILE \ -Pandroid.injected.signing.store.password=$KEYSTORE_CREDS_PSW \ -Pandroid.injected.signing.key.alias=$KEYSTORE_CREDS_USR \ -Pandroid.injected.signing.key.password=$KEYSTORE_CREDS_PSW ''' } } } post { success { archiveArtifacts artifacts: 'app/build/outputs/apk/**/*.apk', fingerprint: true } failure { echo 'Build failed — check the console output above.' } always { cleanWs() } } }