diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 7e6510e..28f07c7 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -123,12 +123,112 @@ jobs: run: npm ci - name: Generate Android native project - run: npx expo prebuild --platform android --non-interactive + run: npx expo prebuild --platform android - - name: Configure Gradle + - name: Configure Gradle with Aliyun Maven mirror run: | cd android - cat > gradle.properties << 'GRADLE_PROPS' + + # Update settings.gradle with Aliyun Maven mirror + cat > settings.gradle << 'SETTINGS_EOF' + pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + maven { url 'https://maven.aliyun.com/repository/public' } + maven { url 'https://maven.aliyun.com/repository/google' } + maven { url 'https://maven.aliyun.com/repository/central' } + maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } + } + def reactNativeGradlePlugin = new File( + providers.exec { + workingDir(rootDir) + commandLine("node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })") + }.standardOutput.asText.get().trim() + ).getParentFile().absolutePath + includeBuild(reactNativeGradlePlugin) + + def expoPluginsPath = new File( + providers.exec { + workingDir(rootDir) + commandLine("node", "--print", "require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })") + }.standardOutput.asText.get().trim(), + "../android/expo-gradle-plugin" + ).absolutePath + includeBuild(expoPluginsPath) + } + + plugins { + id("com.facebook.react.settings") + id("expo-autolinking-settings") + } + + dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) + repositories { + google() + mavenCentral() + maven { url 'https://maven.aliyun.com/repository/public' } + maven { url 'https://maven.aliyun.com/repository/google' } + maven { url 'https://maven.aliyun.com/repository/central' } + } + } + + extensions.configure(com.facebook.react.ReactSettingsExtension) { ex -> + if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') { + ex.autolinkLibrariesFromCommand() + } else { + ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand) + } + } + expoAutolinking.useExpoModules() + + rootProject.name = '萝卜社区' + + expoAutolinking.useExpoVersionCatalog() + + include ':app' + includeBuild(expoAutolinking.reactNativeGradlePlugin) + SETTINGS_EOF + + # Update build.gradle with Aliyun Maven mirror + cat > build.gradle << 'BUILD_EOF' + // Top-level build file where you can add configuration options common to all sub-projects/modules. + + buildscript { + repositories { + google() + mavenCentral() + maven { url 'https://maven.aliyun.com/repository/public' } + maven { url 'https://maven.aliyun.com/repository/google' } + maven { url 'https://maven.aliyun.com/repository/central' } + maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } + } + dependencies { + classpath('com.android.tools.build:gradle') + classpath('com.facebook.react:react-native-gradle-plugin') + classpath('org.jetbrains.kotlin:kotlin-gradle-plugin') + } + } + + allprojects { + repositories { + google() + mavenCentral() + maven { url 'https://www.jitpack.io' } + maven { url 'https://maven.aliyun.com/repository/public' } + maven { url 'https://maven.aliyun.com/repository/google' } + maven { url 'https://maven.aliyun.com/repository/central' } + } + } + + apply plugin: "expo-root-project" + apply plugin: "com.facebook.react.rootproject" + BUILD_EOF + + # Update gradle.properties + cat > gradle.properties << 'PROPS_EOF' org.gradle.daemon=false org.gradle.parallel=false org.gradle.configureondemand=false @@ -138,43 +238,13 @@ jobs: android.useAndroidX=true hermesEnabled=true reactNativeArchitectures=arm64-v8a - GRADLE_PROPS - - # Create new settings.gradle with Aliyun Maven mirror - cat > settings.gradle.new << 'SETTINGS_EOF' - pluginManagement { - repositories { - google() - mavenCentral() - gradlePluginPortal() - maven { url 'https://maven.aliyun.com/repository/public' } - maven { url 'https://maven.aliyun.com/repository/google' } - maven { url 'https://maven.aliyun.com/repository/central' } - maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } - } - } - - dependencyResolutionManagement { - repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) - repositories { - google() - mavenCentral() - maven { url 'https://maven.aliyun.com/repository/public' } - maven { url 'https://maven.aliyun.com/repository/google' } - maven { url 'https://maven.aliyun.com/repository/central' } - } - } - SETTINGS_EOF - - # Append original content (skip first pluginManagement block if exists) - tail -n +2 settings.gradle >> settings.gradle.new || true - mv settings.gradle.new settings.gradle - - # Add Aliyun Maven mirror to build.gradle repositories - sed -i '/repositories {/a\ maven { url "https://maven.aliyun.com/repository/public" }\n maven { url "https://maven.aliyun.com/repository/google" }\n maven { url "https://maven.aliyun.com/repository/central" }' build.gradle || true - - # Fix hermesEnabled in build.gradle - sed -i 's/def hermesEnabled = findProperty("hermesEnabled")/def hermesEnabled = findProperty("hermesEnabled") ?: "true"/' app/build.gradle || true + newArchEnabled=true + edgeToEdgeEnabled=true + expo.gif.enabled=true + expo.webp.enabled=true + expo.webp.animated=false + expo.useLegacyPackaging=false + PROPS_EOF - name: Build Android release APK (arm64 only) run: |