creek

The AI Image Editor of 2030
commit 96ba423a793ef845baa28c707d6051a0401cd4aa
parent 64e6838fdbfe8d8fb1a43362426c4ff145e3e75a
Author: Nilotpal Gupta <nilotpalgupta0701@gmail.com>
Date:   Tue,  2 Dec 2025 18:28:18 +0530

added app release related configs

Diffstat:
M.env | 3+--
A.github/workflows/release.yml | 70++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mandroid/.gitignore | 2+-
Mandroid/app/build.gradle.kts | 37++++++++++++++++++++++++++++++++++---
Aandroid/key.properties | 4++++
Akey.txt | 2++
6 files changed, 112 insertions(+), 6 deletions(-)

diff --git a/.env b/.env @@ -1 +1 @@ -SERVER_URL = https://locustlike-trieciously-rudolph.ngrok-free.dev -\ No newline at end of file +SERVER_URL = https://locustlike-trieciously-rudolph.ngrok-free.dev diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml @@ -0,0 +1,70 @@ +name: Release Android Build + +on: + push: + tags: + - "v*" # Triggers the workflow on tags like v1.0.0, v1.0.1, etc. + +jobs: + build: + name: Build APK and Release + runs-on: ubuntu-latest + + steps: + # 1. Checkout Code (with LFS for your ONNX models) + - name: Checkout code + uses: actions/checkout@v4 + with: + lfs: true + + # 2. Setup Java (Required for Android Build) + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + + # 3. Setup Flutter + - name: Setup Flutter + uses: subosito/flutter-action@v2 + with: + channel: 'stable' + flutter-version: '3.38.x' + + # 4. Create .env file from Secrets + - name: Create .env file + run: echo "${{ secrets.ENV_FILE_CONTENT }}" > .env + + # 5. Decode Keystore (For Signing) + - name: Decode Keystore + run: | + echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > android/app/upload-keystore.jks + + echo "storePassword=${{ secrets.KEYSTORE_PASSWORD }}" >> android/key.properties + echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> android/key.properties + echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> android/key.properties + echo "storeFile=upload-keystore.jks" >> android/key.properties + + # 6. Setup Python 3.11 (Matches your local version) + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + # 7. Install Dependencies + - name: Install dependencies + run: flutter pub get + + # 8. Build APK + # split-per-abi is optional, but --release is mandatory. + # Removing split-per-abi creates one "fat" APK compatible with all devices. + - name: Build Release APK + run: flutter build apk --release + + # 9. Create GitHub Release + - name: Create Release + uses: softprops/action-gh-release@v2 + if: startsWith(github.ref, 'refs/tags/') + with: + files: build/app/outputs/flutter-apk/app-release.apk + generate_release_notes: true diff --git a/android/.gitignore b/android/.gitignore @@ -9,6 +9,6 @@ GeneratedPluginRegistrant.java # Remember to never publicly share your keystore. # See https://flutter.dev/to/reference-keystore -key.properties +# key.properties **/*.keystore **/*.jks diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts @@ -1,3 +1,6 @@ +import java.util.Properties +import java.io.FileInputStream + buildscript { repositories { google() @@ -18,6 +21,13 @@ plugins { id("dev.flutter.flutter-gradle-plugin") } +// 1. Load the key.properties file generated by CI (or your local file) +val keystoreProperties = Properties() +val keystorePropertiesFile = rootProject.file("key.properties") +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(FileInputStream(keystorePropertiesFile)) +} + android { namespace = "com.example.adobe" compileSdk = flutter.compileSdkVersion @@ -50,11 +60,24 @@ android { } } + signingConfigs { + create("release") { + keyAlias = keystoreProperties["keyAlias"] as String? + keyPassword = keystoreProperties["keyPassword"] as String? + storeFile = keystoreProperties["storeFile"]?.let { file(it) } + storePassword = keystoreProperties["storePassword"] as String? + } + } + buildTypes { release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.getByName("debug") + // Signing with the relsease keys, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("release") + + // Optional: Enable shrinking for smaller APKs (recommended for release) + isMinifyEnabled = true + isShrinkResources = true + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } } @@ -64,6 +87,14 @@ chaquopy { version = "3.8" val isWindows = System.getProperty("os.name").lowercase().contains("windows") val pythonFile = if (isWindows) file("../../python_env/Scripts/python.exe") else file("../../python_env/bin/python") + + if (pythonFile.exists()) { + buildPython(pythonFile.absolutePath) + } else { + println("Local python env not found. Using system 'python'.") + buildPython("python") + } + buildPython(pythonFile.absolutePath) pip { install("pillow") diff --git a/android/key.properties b/android/key.properties @@ -0,0 +1,4 @@ +storePassword=interiit +keyPassword=interiit +keyAlias=upload +storeFile=upload-keystore.jks diff --git a/key.txt b/key.txt @@ -0,0 +1 @@ +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 +\ No newline at end of file