on: push: branches: - master jobs: build: runs-on: ubuntu-latest env: # 加速 npm/pnpm 下载 PNPM_REGISTRY: https://registry.npmmirror.com # 加速 Android 构建 GRADLE_OPTS: -Dorg.gradle.daemon=false -Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true -Dorg.gradle.jvmargs="-Xmx4g -XX:+HeapDumpOnOutOfMemoryError" # 使用国内镜像加速 ANDROID_SDK_ROOT: /usr/local/lib/android/sdk steps: - name: 🏗 Setup repo uses: actions/checkout@v3 - name: 🏗 Setup pnpm uses: pnpm/action-setup@v2 with: version: latest run_install: false - name: 🏗 Setup Node uses: actions/setup-node@v3 with: node-version: 18.x cache: pnpm registry-url: 'https://registry.npmmirror.com' - name: ⚡ Configure pnpm for speed run: | pnpm config set registry https://registry.npmmirror.com pnpm config set store-dir ~/.pnpm-store pnpm config set network-timeout 60000 - name: 📦 Install dependencies run: pnpm install - name: 🏗 Setup Java uses: actions/setup-java@v3 with: distribution: 'temurin' java-version: '17' cache: 'gradle' - name: ⚡ Configure Java mirrors for speed run: | # 配置 Maven 使用阿里云镜像 mkdir -p ~/.m2 cat > ~/.m2/settings.xml << EOF aliyunmaven * 阿里云公共仓库 https://maven.aliyun.com/repository/public aliyun-google central 阿里云Google镜像 https://maven.aliyun.com/repository/google EOF - name: 🏗 Setup Android SDK uses: android-actions/setup-android@v3 with: cache-disabled: false - name: ⚡ Cache Gradle dependencies uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper ~/.android/build-cache key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | ${{ runner.os }}-gradle- - name: ⚡ Configure Gradle for speed run: | mkdir -p ~/.gradle cat > ~/.gradle/gradle.properties << EOF org.gradle.daemon=false org.gradle.parallel=true org.gradle.configureondemand=true org.gradle.jvmargs=-Xmx4g -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true android.enableR8.fullMode=true EOF # 配置 Gradle 使用国内镜像 mkdir -p ~/.gradle/init.d cat > ~/.gradle/init.d/mirror.gradle << EOF allprojects { repositories { all { ArtifactRepository repo -> if (repo instanceof MavenArtifactRepository) { def url = repo.url.toString() if (url.startsWith('https://repo1.maven.org/maven2/') || url.startsWith('https://jcenter.bintray.com/') || url.startsWith('https://dl.google.com/dl/android/maven2/')) { project.logger.lifecycle "Repository \${repo.url} replaced by https://maven.aliyun.com/repository/public/." remove repo } } } maven { url 'https://maven.aliyun.com/repository/public/' } maven { url 'https://maven.aliyun.com/repository/google/' } maven { url 'https://maven.aliyun.com/repository/jcenter/' } maven { url 'https://maven.aliyun.com/repository/gradle-plugin/' } } } EOF - name: 🏗 Setup EAS uses: expo/expo-github-action@v8 with: eas-version: latest token: ${{ secrets.EXPO_TOKEN }} packager: pnpm - name: 🚀 Build app run: eas build --platform android --local --non-interactive