From 513a665a154ea14b94057489e61bb768c465ed2f Mon Sep 17 00:00:00 2001 From: Website Date: Mon, 9 Mar 2026 20:07:02 +0530 Subject: [PATCH 01/66] Enhance Android CI workflow with new branches and JDK 17 Updated the Android CI workflow to include additional branches and modify the build process with JDK 17. --- .github/workflows/android.yml | 98 +++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 .github/workflows/android.yml diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml new file mode 100644 index 000000000..2ba50b011 --- /dev/null +++ b/.github/workflows/android.yml @@ -0,0 +1,98 @@ +name: Build Android Code Studio + +on: + push: + branches: + - "dev" + - "main" + - "indexing" + - "release/**" + paths-ignore: + - '**.md' + - '**.json' + - 'fastlane/**' + - '.github/workflows/crowdin_contributors.yml' + pull_request: + branches: [ "dev" ] + paths-ignore: + - '**.md' + - '**.json' + - 'fastlane/**' + - '.github/workflows/crowdin_contributors.yml' + workflow_dispatch: { } + +jobs: + build_release_apk: + name: Build Debug APK + runs-on: ubuntu-latest + steps: + - name: Cancel previous runs + uses: styfle/cancel-workflow-action@0.12.1 + with: + access_token: ${{ github.token }} + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: 'recursive' + fetch-depth: 0 + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'adopt' + - name: Change Gradle wrapper permissions + run: chmod +x ./gradlew + - name: Restore cache + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-v2-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-gradle- + - name: Create local.properties + run: | + echo "signing.storeFile=signing/signing-key.jks" >> local.properties + echo "signing.storePassword=123456" >> local.properties + echo "signing.keyAlias=android-ide" >> local.properties + echo "signing.keyPassword=123456" >> local.properties + - name: Debug signing setup + run: | + echo "=== Repository structure ===" + find . -name "*.jks" -o -name "local.properties" | head -10 + echo "" + echo "=== local.properties content ===" + cat local.properties || echo "local.properties not found" + echo "" + echo "=== SigningDirectory ===" + ls -la core/app/signing/ || echo "core/app/signing directory not found" + - name: Assemble Debug APK + run: ./gradlew :core:app:assembleDebug + # run: ./gradlew :core:app:assembleRelease + - name: List APK files (debug) + run: ls -la core/app/build/outputs/apk/debug/ + - name: Upload arm64-v8a Release APK + uses: actions/upload-artifact@v4 + with: + name: apk-arm64-v8a-debug + path: core/app/build/outputs/apk/debug/*arm64-v8a*.apk + if: always() + - name: Upload armeabi-v7a Release APK + uses: actions/upload-artifact@v4 + with: + name: apk-armeabi-v7a-release + path: core/app/build/outputs/apk/release/*armeabi-v7a*.apk + if: always() + - name: Upload x86_64 Release APK + uses: actions/upload-artifact@v4 + with: + name: apk-x86_64-release + path: core/app/build/outputs/apk/release/*x86_64*.apk + if: always() + - name: Upload universal Release APK + uses: actions/upload-artifact@v4 + with: + name: apk-universal-release + path: core/app/build/outputs/apk/release/*universal*.apk + if: always() From abf6221a2af39c1f100bc2fc9b5c219afad2b4ab Mon Sep 17 00:00:00 2001 From: Website Date: Mon, 9 Mar 2026 20:08:18 +0530 Subject: [PATCH 02/66] Delete .github/workflows/asm_build.yml --- .github/workflows/asm_build.yml | 98 --------------------------------- 1 file changed, 98 deletions(-) delete mode 100644 .github/workflows/asm_build.yml diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml deleted file mode 100644 index ab87c249a..000000000 --- a/.github/workflows/asm_build.yml +++ /dev/null @@ -1,98 +0,0 @@ -name: Build Android Code Studio - -on: - push: - branches: - - "dev" - - "main" - - "indexing" - - "release/**" - paths-ignore: - - '**.md' - - '**.json' - - 'fastlane/**' - - '.github/workflows/crowdin_contributors.yml' - pull_request: - branches: [ "dev" ] - paths-ignore: - - '**.md' - - '**.json' - - 'fastlane/**' - - '.github/workflows/crowdin_contributors.yml' - workflow_dispatch: { } - -jobs: - build_release_apk: - name: Build Debug APK - runs-on: ubuntu-latest - steps: - - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 - with: - access_token: ${{ github.token }} - - name: Checkout - uses: actions/checkout@v4 - with: - submodules: 'recursive' - fetch-depth: 0 - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - java-version: '17' - distribution: 'adopt' - - name: Change Gradle wrapper permissions - run: chmod +x ./gradlew - - name: Restore cache - uses: actions/cache@v4 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-v2-${{ hashFiles('**/*.gradle*') }} - restore-keys: | - ${{ runner.os }}-gradle- - - name: Create local.properties - run: | - echo "signing.storeFile=signing/signing-key.jks" >> local.properties - echo "signing.storePassword=123456" >> local.properties - echo "signing.keyAlias=android-ide" >> local.properties - echo "signing.keyPassword=123456" >> local.properties - - name: Debug signing setup - run: | - echo "=== Repository structure ===" - find . -name "*.jks" -o -name "local.properties" | head -10 - echo "" - echo "=== local.properties content ===" - cat local.properties || echo "local.properties not found" - echo "" - echo "=== SigningDirectory ===" - ls -la core/app/signing/ || echo "core/app/signing directory not found" - - name: Assemble Debug APK - run: ./gradlew :core:app:assembleDebug - # run: ./gradlew :core:app:assembleRelease - - name: List APK files (debug) - run: ls -la core/app/build/outputs/apk/debug/ - - name: Upload arm64-v8a Release APK - uses: actions/upload-artifact@v4 - with: - name: apk-arm64-v8a-debug - path: core/app/build/outputs/apk/debug/*arm64-v8a*.apk - if: always() - - name: Upload armeabi-v7a Release APK - uses: actions/upload-artifact@v4 - with: - name: apk-armeabi-v7a-release - path: core/app/build/outputs/apk/release/*armeabi-v7a*.apk - if: always() - - name: Upload x86_64 Release APK - uses: actions/upload-artifact@v4 - with: - name: apk-x86_64-release - path: core/app/build/outputs/apk/release/*x86_64*.apk - if: always() - - name: Upload universal Release APK - uses: actions/upload-artifact@v4 - with: - name: apk-universal-release - path: core/app/build/outputs/apk/release/*universal*.apk - if: always() \ No newline at end of file From 9439e19df1111e23be35b67d3153cbd1e989d6d6 Mon Sep 17 00:00:00 2001 From: Website Date: Mon, 9 Mar 2026 20:17:28 +0530 Subject: [PATCH 03/66] Update android.yml --- .github/workflows/android.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 2ba50b011..1a8a0c288 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -95,4 +95,4 @@ jobs: with: name: apk-universal-release path: core/app/build/outputs/apk/release/*universal*.apk - if: always() + From d51977031d3f7b5e012585218f711d8f8df554d3 Mon Sep 17 00:00:00 2001 From: Website Date: Mon, 9 Mar 2026 20:18:35 +0530 Subject: [PATCH 04/66] Add conditional execution to upload artifact step --- .github/workflows/android.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 1a8a0c288..2ba50b011 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -95,4 +95,4 @@ jobs: with: name: apk-universal-release path: core/app/build/outputs/apk/release/*universal*.apk - + if: always() From 0791375b102e438d607d33300c6303819d1ad1e2 Mon Sep 17 00:00:00 2001 From: Website Date: Mon, 9 Mar 2026 21:11:06 +0530 Subject: [PATCH 05/66] Refactor Android CI workflow for debugging APK --- .github/workflows/android.yml | 87 ++++------------------------------- 1 file changed, 9 insertions(+), 78 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 2ba50b011..5864544e0 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -1,35 +1,13 @@ name: Build Android Code Studio - on: push: - branches: - - "dev" - - "main" - - "indexing" - - "release/**" - paths-ignore: - - '**.md' - - '**.json' - - 'fastlane/**' - - '.github/workflows/crowdin_contributors.yml' - pull_request: - branches: [ "dev" ] - paths-ignore: - - '**.md' - - '**.json' - - 'fastlane/**' - - '.github/workflows/crowdin_contributors.yml' + branches: [ "main", "dev" ] workflow_dispatch: { } jobs: - build_release_apk: - name: Build Debug APK + build: runs-on: ubuntu-latest steps: - - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 - with: - access_token: ${{ github.token }} - name: Checkout uses: actions/checkout@v4 with: @@ -39,60 +17,13 @@ jobs: uses: actions/setup-java@v4 with: java-version: '17' - distribution: 'adopt' - - name: Change Gradle wrapper permissions + distribution: 'temurin' + - name: Grant Gradle Permissions run: chmod +x ./gradlew - - name: Restore cache - uses: actions/cache@v4 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-v2-${{ hashFiles('**/*.gradle*') }} - restore-keys: | - ${{ runner.os }}-gradle- - - name: Create local.properties - run: | - echo "signing.storeFile=signing/signing-key.jks" >> local.properties - echo "signing.storePassword=123456" >> local.properties - echo "signing.keyAlias=android-ide" >> local.properties - echo "signing.keyPassword=123456" >> local.properties - - name: Debug signing setup - run: | - echo "=== Repository structure ===" - find . -name "*.jks" -o -name "local.properties" | head -10 - echo "" - echo "=== local.properties content ===" - cat local.properties || echo "local.properties not found" - echo "" - echo "=== SigningDirectory ===" - ls -la core/app/signing/ || echo "core/app/signing directory not found" - - name: Assemble Debug APK - run: ./gradlew :core:app:assembleDebug - # run: ./gradlew :core:app:assembleRelease - - name: List APK files (debug) - run: ls -la core/app/build/outputs/apk/debug/ - - name: Upload arm64-v8a Release APK - uses: actions/upload-artifact@v4 - with: - name: apk-arm64-v8a-debug - path: core/app/build/outputs/apk/debug/*arm64-v8a*.apk - if: always() - - name: Upload armeabi-v7a Release APK - uses: actions/upload-artifact@v4 - with: - name: apk-armeabi-v7a-release - path: core/app/build/outputs/apk/release/*armeabi-v7a*.apk - if: always() - - name: Upload x86_64 Release APK - uses: actions/upload-artifact@v4 - with: - name: apk-x86_64-release - path: core/app/build/outputs/apk/release/*x86_64*.apk - if: always() - - name: Upload universal Release APK + - name: Build Debug APK + run: ./gradlew assembleDebug + - name: Upload APK uses: actions/upload-artifact@v4 with: - name: apk-universal-release - path: core/app/build/outputs/apk/release/*universal*.apk - if: always() + name: debug-apk + path: app/build/outputs/apk/debug/*.apk From 4337f43033a4786e53b4b4fb2f1e18685cebfc2a Mon Sep 17 00:00:00 2001 From: Website Date: Mon, 9 Mar 2026 21:28:01 +0530 Subject: [PATCH 06/66] Update Android workflow to include more branches and steps --- .github/workflows/android.yml | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 5864544e0..4248c089e 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -1,11 +1,13 @@ name: Build Android Code Studio + on: push: - branches: [ "main", "dev" ] + branches: [ "dev", "main", "indexing", "release/**" ] workflow_dispatch: { } jobs: - build: + build_release_apk: + name: Build All APKs runs-on: ubuntu-latest steps: - name: Checkout @@ -17,13 +19,26 @@ jobs: uses: actions/setup-java@v4 with: java-version: '17' - distribution: 'temurin' - - name: Grant Gradle Permissions + distribution: 'adopt' + - name: Change Gradle wrapper permissions run: chmod +x ./gradlew - - name: Build Debug APK + - name: Restore cache + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-v2-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-gradle- + + # Yahan humne path ko handle kiya hai taaki error na aaye + - name: Assemble All APKs run: ./gradlew assembleDebug - - name: Upload APK + + - name: Upload APKs uses: actions/upload-artifact@v4 with: - name: debug-apk - path: app/build/outputs/apk/debug/*.apk + name: all-debug-apks + path: '**/build/outputs/apk/debug/*.apk' + if: always() From 332e70c23d81ee766161fbbddc7779c63c921df4 Mon Sep 17 00:00:00 2001 From: Website Date: Mon, 9 Mar 2026 21:28:51 +0530 Subject: [PATCH 07/66] Update android.yml From dd8fcd2e80d6250e660a652d566c3a8df7d6e0fd Mon Sep 17 00:00:00 2001 From: Website Date: Mon, 9 Mar 2026 21:48:44 +0530 Subject: [PATCH 08/66] Disable custom signing configuration Comment out the signingConfigs block in build.gradle.kts --- core/app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/app/build.gradle.kts b/core/app/build.gradle.kts index bd088ccb5..aeef4594a 100755 --- a/core/app/build.gradle.kts +++ b/core/app/build.gradle.kts @@ -73,7 +73,7 @@ android { experimentalProperties["android.experimental.enableGlobalSynthetics"] = true - signingConfigs { + /* signingConfigs { create("custom") { val keyStorePath = "${rootProject.projectDir}/signing/signing-key.jks" val keyStoreFile = file(keyStorePath) @@ -87,7 +87,7 @@ android { keyPassword = signing_keyPassword } } - +*/ androidResources { generateLocaleConfig = true } buildFeatures { From cc3d399d1340279359716c9d5ad60a8ffd45507c Mon Sep 17 00:00:00 2001 From: Website Date: Mon, 9 Mar 2026 22:03:00 +0530 Subject: [PATCH 09/66] Refactor Android build workflow for debugging --- .github/workflows/android.yml | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 4248c089e..655fca842 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -2,12 +2,11 @@ name: Build Android Code Studio on: push: - branches: [ "dev", "main", "indexing", "release/**" ] + branches: [ "dev", "main" ] workflow_dispatch: { } jobs: - build_release_apk: - name: Build All APKs + build: runs-on: ubuntu-latest steps: - name: Checkout @@ -19,26 +18,14 @@ jobs: uses: actions/setup-java@v4 with: java-version: '17' - distribution: 'adopt' - - name: Change Gradle wrapper permissions + distribution: 'temurin' + - name: Grant Gradle Permissions run: chmod +x ./gradlew - - name: Restore cache - uses: actions/cache@v4 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-v2-${{ hashFiles('**/*.gradle*') }} - restore-keys: | - ${{ runner.os }}-gradle- - - # Yahan humne path ko handle kiya hai taaki error na aaye - - name: Assemble All APKs - run: ./gradlew assembleDebug - - - name: Upload APKs + - name: Build Debug APK + # Root se build command chalayein, ye saare dependencies resolve kar lega + run: ./gradlew :core:app:assembleDebug -x validateSigningDebug + - name: Upload APK uses: actions/upload-artifact@v4 with: - name: all-debug-apks - path: '**/build/outputs/apk/debug/*.apk' - if: always() + name: AndroidCodeStudio-Debug + path: core/app/build/outputs/apk/debug/*.apk From 4aec83bf9ca4b2d7481ae58697fbe070c7717731 Mon Sep 17 00:00:00 2001 From: Website Date: Mon, 9 Mar 2026 22:11:03 +0530 Subject: [PATCH 10/66] Comment out debug build type in build.gradle.kts Comment out the debug build type configuration in build.gradle.kts. --- core/app/build.gradle.kts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/app/build.gradle.kts b/core/app/build.gradle.kts index aeef4594a..2dba5bfd2 100755 --- a/core/app/build.gradle.kts +++ b/core/app/build.gradle.kts @@ -95,11 +95,12 @@ android { dataBinding = true } - buildTypes { + /* +buildTypes { debug { signingConfig = signingConfigs.getByName("custom") } - +*/ release { isShrinkResources = false signingConfig = signingConfigs.getByName("custom") From 70ffc040847626aa1062870ae4f504a016f1fd76 Mon Sep 17 00:00:00 2001 From: Website Date: Mon, 9 Mar 2026 22:26:51 +0530 Subject: [PATCH 11/66] Clean up build.gradle.kts by removing debug config Removed commented-out debug build type configuration. --- core/app/build.gradle.kts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/core/app/build.gradle.kts b/core/app/build.gradle.kts index 2dba5bfd2..af3a8aaa5 100755 --- a/core/app/build.gradle.kts +++ b/core/app/build.gradle.kts @@ -95,13 +95,7 @@ android { dataBinding = true } - /* -buildTypes { - debug { - signingConfig = signingConfigs.getByName("custom") - } -*/ - release { +release { isShrinkResources = false signingConfig = signingConfigs.getByName("custom") } From e3c9ac901d5e8fef91e7cc50c8760162d22a5772 Mon Sep 17 00:00:00 2001 From: Website Date: Mon, 9 Mar 2026 22:27:46 +0530 Subject: [PATCH 12/66] Enhance Android CI workflow with caching and updates --- .github/workflows/android.yml | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 655fca842..a6c2af3f5 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -9,23 +9,39 @@ jobs: build: runs-on: ubuntu-latest steps: - - name: Checkout + - name: Checkout Code uses: actions/checkout@v4 with: submodules: 'recursive' fetch-depth: 0 + - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' + - name: Grant Gradle Permissions run: chmod +x ./gradlew - - name: Build Debug APK - # Root se build command chalayein, ye saare dependencies resolve kar lega - run: ./gradlew :core:app:assembleDebug -x validateSigningDebug - - name: Upload APK + + - name: Cache Gradle Packages + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: Build Android Code Studio (Assemble) + # -x validateSigningDebug signing key ki zaroorat ko khatam kar dega + # --parallel gradle ko tezi se modules compile karne mein madad karega + run: ./gradlew :core:app:assembleDebug -x validateSigningDebug --parallel + + - name: Upload Debug APK uses: actions/upload-artifact@v4 with: name: AndroidCodeStudio-Debug path: core/app/build/outputs/apk/debug/*.apk + if-no-files-found: error From 7dffd75f953da56bd18b8e6f667da6c0dd76f7b7 Mon Sep 17 00:00:00 2001 From: Website Date: Mon, 9 Mar 2026 22:41:29 +0530 Subject: [PATCH 13/66] Refactor Android build workflow for optimization --- .github/workflows/android.yml | 44 +++++++++++++---------------------- 1 file changed, 16 insertions(+), 28 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index a6c2af3f5..6eaf55474 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -1,47 +1,35 @@ -name: Build Android Code Studio +name: Android Build Pipeline on: push: - branches: [ "dev", "main" ] + branches: [ "main", "dev" ] workflow_dispatch: { } jobs: build: runs-on: ubuntu-latest steps: - - name: Checkout Code + - name: Checkout Source Code uses: actions/checkout@v4 with: submodules: 'recursive' - fetch-depth: 0 - - - name: Set up JDK 17 + + - name: Setup JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - - - name: Grant Gradle Permissions - run: chmod +x ./gradlew - - - name: Cache Gradle Packages - uses: actions/cache@v4 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - - name: Build Android Code Studio (Assemble) - # -x validateSigningDebug signing key ki zaroorat ko khatam kar dega - # --parallel gradle ko tezi se modules compile karne mein madad karega - run: ./gradlew :core:app:assembleDebug -x validateSigningDebug --parallel - - - name: Upload Debug APK + + - name: Build Project + # Memory Optimization: Heap size kam karke crash roko + run: | + chmod +x ./gradlew + ./gradlew :core:app:assembleDebug -x validateSigningDebug \ + -Dorg.gradle.jvmargs="-Xmx1024m -XX:+UseParallelGC" \ + --no-daemon --max-workers=2 + + - name: Upload Build Artifact uses: actions/upload-artifact@v4 with: - name: AndroidCodeStudio-Debug + name: app-release path: core/app/build/outputs/apk/debug/*.apk - if-no-files-found: error From 91263444273b6acc769b568c8a2c45f46e0dc8b0 Mon Sep 17 00:00:00 2001 From: Website Date: Mon, 9 Mar 2026 22:52:00 +0530 Subject: [PATCH 14/66] Refactor Android CI workflow steps and names --- .github/workflows/android.yml | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 6eaf55474..3a9611d4d 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -9,27 +9,32 @@ jobs: build: runs-on: ubuntu-latest steps: - - name: Checkout Source Code + - name: Checkout Code uses: actions/checkout@v4 with: submodules: 'recursive' - - - name: Setup JDK 17 + fetch-depth: 0 + + - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - - - name: Build Project - # Memory Optimization: Heap size kam karke crash roko + + - name: Build Android Code Studio + # Memory limit aur worker count ko control kiya hai taaki RAM crash na ho run: | chmod +x ./gradlew - ./gradlew :core:app:assembleDebug -x validateSigningDebug \ - -Dorg.gradle.jvmargs="-Xmx1024m -XX:+UseParallelGC" \ - --no-daemon --max-workers=2 - - - name: Upload Build Artifact + ./gradlew :core:app:assembleDebug \ + -x validateSigningDebug \ + --no-daemon \ + --parallel \ + --max-workers=2 \ + -Dorg.gradle.jvmargs="-Xmx2048m -XX:MaxMetaspaceSize=512m" + + - name: Upload APKs uses: actions/upload-artifact@v4 with: - name: app-release - path: core/app/build/outputs/apk/debug/*.apk + name: AndroidCodeStudio-Build + path: '**/build/outputs/apk/debug/*.apk' + if-no-files-found: error From 48332b5b2f7a86f85315aa97bd7fcc359d4f60d0 Mon Sep 17 00:00:00 2001 From: Website Date: Mon, 9 Mar 2026 23:01:03 +0530 Subject: [PATCH 15/66] Enhance Android CI workflow with caching and optimizations Updated Android build workflow to cache dependencies and optimize resource usage. --- .github/workflows/android.yml | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 3a9611d4d..653a40c1c 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -21,20 +21,31 @@ jobs: java-version: '17' distribution: 'temurin' - - name: Build Android Code Studio - # Memory limit aur worker count ko control kiya hai taaki RAM crash na ho + - name: Cache Dependencies + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: Build with Optimized Resources run: | chmod +x ./gradlew - ./gradlew :core:app:assembleDebug \ - -x validateSigningDebug \ - --no-daemon \ - --parallel \ - --max-workers=2 \ - -Dorg.gradle.jvmargs="-Xmx2048m -XX:MaxMetaspaceSize=512m" + # Yahan 'assemble' command sabhi modules ki dependency resolve karegi + # --refresh-dependencies se purani corrupt files refresh ho jayengi + ./gradlew assemble -x validateSigningDebug --refresh-dependencies \ + --parallel --no-daemon \ + -Dorg.gradle.jvmargs="-Xmx4g -XX:MaxMetaspaceSize=1g -XX:+UseParallelGC" + env: + MAIN_VERSION: "1.0.0" + REVISION_NUM: "03" - name: Upload APKs uses: actions/upload-artifact@v4 with: name: AndroidCodeStudio-Build - path: '**/build/outputs/apk/debug/*.apk' + path: '**/build/outputs/apk/**/*.apk' if-no-files-found: error From cf8ae9bcbd861929cdefdb89e4afd01b2e45b23d Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 09:30:41 +0530 Subject: [PATCH 16/66] Refactor Android CI workflow for build optimization Removed caching of Gradle dependencies and added permissions fix for gradlew script. Updated build command to optimize resource usage. --- .github/workflows/android.yml | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 653a40c1c..e4bbc3fc5 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -21,24 +21,19 @@ jobs: java-version: '17' distribution: 'temurin' - - name: Cache Dependencies - uses: actions/cache@v4 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- + - name: Fix Composite Builds Permissions + # Composite builds ke andar ke gradlew ko bhi permission deni hogi + run: | + chmod +x ./gradlew + find . -name "gradlew" -exec chmod +x {} + - name: Build with Optimized Resources run: | - chmod +x ./gradlew - # Yahan 'assemble' command sabhi modules ki dependency resolve karegi - # --refresh-dependencies se purani corrupt files refresh ho jayengi - ./gradlew assemble -x validateSigningDebug --refresh-dependencies \ - --parallel --no-daemon \ - -Dorg.gradle.jvmargs="-Xmx4g -XX:MaxMetaspaceSize=1g -XX:+UseParallelGC" + # --configure-on-demand se sirf zaruri modules load honge + # jvmargs ko 4GB rakha hai taki RAM crash na ho + ./gradlew assembleDebug -x validateSigningDebug \ + --no-daemon --max-workers=2 --configure-on-demand \ + -Dorg.gradle.jvmargs="-Xmx4096m -XX:+UseParallelGC" env: MAIN_VERSION: "1.0.0" REVISION_NUM: "03" @@ -48,4 +43,3 @@ jobs: with: name: AndroidCodeStudio-Build path: '**/build/outputs/apk/**/*.apk' - if-no-files-found: error From c8c31e4b8a91446db1f35791490c11186eb1aee1 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 09:38:09 +0530 Subject: [PATCH 17/66] Update Android CI workflow for project structure and build --- .github/workflows/android.yml | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index e4bbc3fc5..e9cbaf984 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -21,19 +21,22 @@ jobs: java-version: '17' distribution: 'temurin' - - name: Fix Composite Builds Permissions - # Composite builds ke andar ke gradlew ko bhi permission deni hogi + - name: Fix Project Structure + # Agar build-logic mein settings file nahi hai, toh ek khali file bana do + # taaki Gradle crash na ho. run: | + mkdir -p composite-builds/build-logic + touch composite-builds/build-logic/settings.gradle chmod +x ./gradlew - find . -name "gradlew" -exec chmod +x {} + - - name: Build with Optimized Resources + - name: Build Android Code Studio + # Hum -P (Properties) ka use karenge taaki dependencies refresh ho jayein run: | - # --configure-on-demand se sirf zaruri modules load honge - # jvmargs ko 4GB rakha hai taki RAM crash na ho - ./gradlew assembleDebug -x validateSigningDebug \ - --no-daemon --max-workers=2 --configure-on-demand \ - -Dorg.gradle.jvmargs="-Xmx4096m -XX:+UseParallelGC" + ./gradlew :core:app:assembleDebug \ + -x validateSigningDebug \ + --no-daemon \ + --stacktrace \ + -Dorg.gradle.jvmargs="-Xmx4g -XX:+UseParallelGC" env: MAIN_VERSION: "1.0.0" REVISION_NUM: "03" From 0532868611b72ffeb18957bf405e4b8900b8e0f2 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 09:41:54 +0530 Subject: [PATCH 18/66] Update Android build pipeline with new branches and steps --- .github/workflows/android.yml | 57 ++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index e9cbaf984..8b56197fc 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -2,14 +2,23 @@ name: Android Build Pipeline on: push: - branches: [ "main", "dev" ] + branches: [ "main", "dev", "indexing", "release/**" ] workflow_dispatch: { } jobs: build: + name: Build All APK Variants runs-on: ubuntu-latest + + # Heap space aur RAM errors ko root se khatam karne ke liye environment settings + env: + JAVA_OPTS: "-Xmx4096m -XX:+UseParallelGC" + GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx4096m -XX:MaxMetaspaceSize=1024m' -Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true" + MAIN_VERSION: "1.0.0" + REVISION_NUM: "03" + steps: - - name: Checkout Code + - name: Checkout Source Code uses: actions/checkout@v4 with: submodules: 'recursive' @@ -21,28 +30,34 @@ jobs: java-version: '17' distribution: 'temurin' - - name: Fix Project Structure - # Agar build-logic mein settings file nahi hai, toh ek khali file bana do - # taaki Gradle crash na ho. + - name: Fix Project Permissions and Structure run: | - mkdir -p composite-builds/build-logic - touch composite-builds/build-logic/settings.gradle chmod +x ./gradlew + # Saare sub-modules ke gradlew ko permission dena + find . -name "gradlew" -exec chmod +x {} + + # Missing settings files ka placeholder banana taaki composite build fail na ho + mkdir -p composite-builds/build-logic + [ -f composite-builds/build-logic/settings.gradle ] || touch composite-builds/build-logic/settings.gradle + [ -f composite-builds/build-logic/build.gradle ] || touch composite-builds/build-logic/build.gradle - - name: Build Android Code Studio - # Hum -P (Properties) ka use karenge taaki dependencies refresh ho jayein - run: | - ./gradlew :core:app:assembleDebug \ - -x validateSigningDebug \ - --no-daemon \ - --stacktrace \ - -Dorg.gradle.jvmargs="-Xmx4g -XX:+UseParallelGC" - env: - MAIN_VERSION: "1.0.0" - REVISION_NUM: "03" - - - name: Upload APKs + - name: Cache Gradle Dependencies + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: Full Project Compile (Assemble) + # 'assemble' command pure project ke saare modules (core, termux, etc) ko build karegi + # -x validateSigningDebug se bina signing key ke APK ban jayegi + run: ./gradlew assemble -x validateSigningDebug --no-daemon --stacktrace + + - name: Upload All Generated APKs uses: actions/upload-artifact@v4 with: - name: AndroidCodeStudio-Build + name: AndroidCodeStudio-Full-APKs path: '**/build/outputs/apk/**/*.apk' + if-no-files-found: error From 96fb848a9893d82d60577b26fea6da26656ce864 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 09:50:44 +0530 Subject: [PATCH 19/66] Add asm_build.yml workflow file --- .github/workflows/android.yml | 63 --------------------- .github/workflows/asm_build.yml | 98 +++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 63 deletions(-) delete mode 100644 .github/workflows/android.yml create mode 100644 .github/workflows/asm_build.yml diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml deleted file mode 100644 index 8b56197fc..000000000 --- a/.github/workflows/android.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: Android Build Pipeline - -on: - push: - branches: [ "main", "dev", "indexing", "release/**" ] - workflow_dispatch: { } - -jobs: - build: - name: Build All APK Variants - runs-on: ubuntu-latest - - # Heap space aur RAM errors ko root se khatam karne ke liye environment settings - env: - JAVA_OPTS: "-Xmx4096m -XX:+UseParallelGC" - GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx4096m -XX:MaxMetaspaceSize=1024m' -Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true" - MAIN_VERSION: "1.0.0" - REVISION_NUM: "03" - - steps: - - name: Checkout Source Code - uses: actions/checkout@v4 - with: - submodules: 'recursive' - fetch-depth: 0 - - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - java-version: '17' - distribution: 'temurin' - - - name: Fix Project Permissions and Structure - run: | - chmod +x ./gradlew - # Saare sub-modules ke gradlew ko permission dena - find . -name "gradlew" -exec chmod +x {} + - # Missing settings files ka placeholder banana taaki composite build fail na ho - mkdir -p composite-builds/build-logic - [ -f composite-builds/build-logic/settings.gradle ] || touch composite-builds/build-logic/settings.gradle - [ -f composite-builds/build-logic/build.gradle ] || touch composite-builds/build-logic/build.gradle - - - name: Cache Gradle Dependencies - uses: actions/cache@v4 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - - name: Full Project Compile (Assemble) - # 'assemble' command pure project ke saare modules (core, termux, etc) ko build karegi - # -x validateSigningDebug se bina signing key ke APK ban jayegi - run: ./gradlew assemble -x validateSigningDebug --no-daemon --stacktrace - - - name: Upload All Generated APKs - uses: actions/upload-artifact@v4 - with: - name: AndroidCodeStudio-Full-APKs - path: '**/build/outputs/apk/**/*.apk' - if-no-files-found: error diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml new file mode 100644 index 000000000..2ba50b011 --- /dev/null +++ b/.github/workflows/asm_build.yml @@ -0,0 +1,98 @@ +name: Build Android Code Studio + +on: + push: + branches: + - "dev" + - "main" + - "indexing" + - "release/**" + paths-ignore: + - '**.md' + - '**.json' + - 'fastlane/**' + - '.github/workflows/crowdin_contributors.yml' + pull_request: + branches: [ "dev" ] + paths-ignore: + - '**.md' + - '**.json' + - 'fastlane/**' + - '.github/workflows/crowdin_contributors.yml' + workflow_dispatch: { } + +jobs: + build_release_apk: + name: Build Debug APK + runs-on: ubuntu-latest + steps: + - name: Cancel previous runs + uses: styfle/cancel-workflow-action@0.12.1 + with: + access_token: ${{ github.token }} + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: 'recursive' + fetch-depth: 0 + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'adopt' + - name: Change Gradle wrapper permissions + run: chmod +x ./gradlew + - name: Restore cache + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-v2-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-gradle- + - name: Create local.properties + run: | + echo "signing.storeFile=signing/signing-key.jks" >> local.properties + echo "signing.storePassword=123456" >> local.properties + echo "signing.keyAlias=android-ide" >> local.properties + echo "signing.keyPassword=123456" >> local.properties + - name: Debug signing setup + run: | + echo "=== Repository structure ===" + find . -name "*.jks" -o -name "local.properties" | head -10 + echo "" + echo "=== local.properties content ===" + cat local.properties || echo "local.properties not found" + echo "" + echo "=== SigningDirectory ===" + ls -la core/app/signing/ || echo "core/app/signing directory not found" + - name: Assemble Debug APK + run: ./gradlew :core:app:assembleDebug + # run: ./gradlew :core:app:assembleRelease + - name: List APK files (debug) + run: ls -la core/app/build/outputs/apk/debug/ + - name: Upload arm64-v8a Release APK + uses: actions/upload-artifact@v4 + with: + name: apk-arm64-v8a-debug + path: core/app/build/outputs/apk/debug/*arm64-v8a*.apk + if: always() + - name: Upload armeabi-v7a Release APK + uses: actions/upload-artifact@v4 + with: + name: apk-armeabi-v7a-release + path: core/app/build/outputs/apk/release/*armeabi-v7a*.apk + if: always() + - name: Upload x86_64 Release APK + uses: actions/upload-artifact@v4 + with: + name: apk-x86_64-release + path: core/app/build/outputs/apk/release/*x86_64*.apk + if: always() + - name: Upload universal Release APK + uses: actions/upload-artifact@v4 + with: + name: apk-universal-release + path: core/app/build/outputs/apk/release/*universal*.apk + if: always() From 85e81f4545dad3a1c9dc6efe9c900bda2d4d1d0a Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 09:52:54 +0530 Subject: [PATCH 20/66] Enable custom signing configuration in build.gradle.kts Uncomment signingConfigs block and update release build type to use custom signing config. --- core/app/build.gradle.kts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/core/app/build.gradle.kts b/core/app/build.gradle.kts index af3a8aaa5..bd088ccb5 100755 --- a/core/app/build.gradle.kts +++ b/core/app/build.gradle.kts @@ -73,7 +73,7 @@ android { experimentalProperties["android.experimental.enableGlobalSynthetics"] = true - /* signingConfigs { + signingConfigs { create("custom") { val keyStorePath = "${rootProject.projectDir}/signing/signing-key.jks" val keyStoreFile = file(keyStorePath) @@ -87,7 +87,7 @@ android { keyPassword = signing_keyPassword } } -*/ + androidResources { generateLocaleConfig = true } buildFeatures { @@ -95,7 +95,12 @@ android { dataBinding = true } -release { + buildTypes { + debug { + signingConfig = signingConfigs.getByName("custom") + } + + release { isShrinkResources = false signingConfig = signingConfigs.getByName("custom") } From 4a733b2183598065868fec65f5e3452eec3673cc Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 10:18:00 +0530 Subject: [PATCH 21/66] Update asm_build.yml --- .github/workflows/asm_build.yml | 112 ++++++++++++++++---------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 2ba50b011..c07bbb02f 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -10,89 +10,89 @@ on: paths-ignore: - '**.md' - '**.json' - - 'fastlane/**' - - '.github/workflows/crowdin_contributors.yml' pull_request: branches: [ "dev" ] - paths-ignore: - - '**.md' - - '**.json' - - 'fastlane/**' - - '.github/workflows/crowdin_contributors.yml' workflow_dispatch: { } jobs: - build_release_apk: - name: Build Debug APK + build_all_variants: + name: Build Debug and Release APKs runs-on: ubuntu-latest + + # Heap space aur RAM errors ko khatam karne ke liye global environment settings + env: + JAVA_OPTS: "-Xmx4096m -XX:+UseParallelGC" + GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx4096m -XX:MaxMetaspaceSize=1024m' -Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true" + MAIN_VERSION: "1.0.0" + REVISION_NUM: "03" + steps: - - name: Cancel previous runs + - name: Cancel Previous Runs uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ github.token }} - - name: Checkout + + - name: Checkout Source Code uses: actions/checkout@v4 with: submodules: 'recursive' fetch-depth: 0 + - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' - distribution: 'adopt' - - name: Change Gradle wrapper permissions - run: chmod +x ./gradlew - - name: Restore cache - uses: actions/cache@v4 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-v2-${{ hashFiles('**/*.gradle*') }} - restore-keys: | - ${{ runner.os }}-gradle- - - name: Create local.properties + distribution: 'temurin' + + - name: Fix Project Permissions & Composite Structure + # Missing composite folders aur gradlew permissions ko fix karna run: | + chmod +x ./gradlew + find . -name "gradlew" -exec chmod +x {} + + # Force create missing build-logic files if they are empty or missing + mkdir -p composite-builds/build-logic + [ -f composite-builds/build-logic/settings.gradle ] || touch composite-builds/build-logic/settings.gradle + # Ensure local.properties exists for SDK path + echo "sdk.dir=$ANDROID_SDK_ROOT" > local.properties echo "signing.storeFile=signing/signing-key.jks" >> local.properties echo "signing.storePassword=123456" >> local.properties echo "signing.keyAlias=android-ide" >> local.properties echo "signing.keyPassword=123456" >> local.properties - - name: Debug signing setup - run: | - echo "=== Repository structure ===" - find . -name "*.jks" -o -name "local.properties" | head -10 - echo "" - echo "=== local.properties content ===" - cat local.properties || echo "local.properties not found" - echo "" - echo "=== SigningDirectory ===" - ls -la core/app/signing/ || echo "core/app/signing directory not found" - - name: Assemble Debug APK - run: ./gradlew :core:app:assembleDebug - # run: ./gradlew :core:app:assembleRelease - - name: List APK files (debug) - run: ls -la core/app/build/outputs/apk/debug/ - - name: Upload arm64-v8a Release APK - uses: actions/upload-artifact@v4 - with: - name: apk-arm64-v8a-debug - path: core/app/build/outputs/apk/debug/*arm64-v8a*.apk - if: always() - - name: Upload armeabi-v7a Release APK - uses: actions/upload-artifact@v4 + + - name: Cache Gradle Dependencies + uses: actions/cache@v4 with: - name: apk-armeabi-v7a-release - path: core/app/build/outputs/apk/release/*armeabi-v7a*.apk - if: always() - - name: Upload x86_64 Release APK + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-v3-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + + - name: Build All APKs (Debug & Release) + # assembleDebug aur assembleRelease dono ek sath banenge + # -x validateSigningDebug signing errors ko ignore karne ke liye hai + run: | + ./gradlew :core:app:assembleDebug :core:app:assembleRelease \ + -x validateSigningDebug \ + --no-daemon --stacktrace --max-workers=2 + + - name: Upload Debug APKs uses: actions/upload-artifact@v4 with: - name: apk-x86_64-release - path: core/app/build/outputs/apk/release/*x86_64*.apk + name: AndroidCodeStudio-Debug-APKs + path: 'core/app/build/outputs/apk/debug/*.apk' if: always() - - name: Upload universal Release APK + + - name: Upload Release APKs uses: actions/upload-artifact@v4 with: - name: apk-universal-release - path: core/app/build/outputs/apk/release/*universal*.apk + name: AndroidCodeStudio-Release-APKs + path: 'core/app/build/outputs/apk/release/*.apk' if: always() + + - name: Failure Diagnosis Report + if: failure() + run: | + echo "Checking for APKs in unexpected locations..." + find . -name "*.apk" + echo "Checking if 'appintro' or other modules are visible..." + ./gradlew projects From 0c52fc8eb40efdb5a7c8e53d2cd06ba7bea2eb03 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 10:25:36 +0530 Subject: [PATCH 22/66] Refactor GitHub Actions workflow for APK builds Updated workflow to build all APK variants and improved project structure handling. --- .github/workflows/asm_build.yml | 69 ++++++++++----------------------- 1 file changed, 20 insertions(+), 49 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index c07bbb02f..25b3480c6 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -2,36 +2,19 @@ name: Build Android Code Studio on: push: - branches: - - "dev" - - "main" - - "indexing" - - "release/**" - paths-ignore: - - '**.md' - - '**.json' - pull_request: - branches: [ "dev" ] + branches: [ "dev", "main", "indexing", "release/**" ] workflow_dispatch: { } jobs: - build_all_variants: + build_all_apks: name: Build Debug and Release APKs runs-on: ubuntu-latest - # Heap space aur RAM errors ko khatam karne ke liye global environment settings + # Global settings for High-Memory Projects env: - JAVA_OPTS: "-Xmx4096m -XX:+UseParallelGC" GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx4096m -XX:MaxMetaspaceSize=1024m' -Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true" - MAIN_VERSION: "1.0.0" - REVISION_NUM: "03" steps: - - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@0.12.1 - with: - access_token: ${{ github.token }} - - name: Checkout Source Code uses: actions/checkout@v4 with: @@ -44,20 +27,18 @@ jobs: java-version: '17' distribution: 'temurin' - - name: Fix Project Permissions & Composite Structure - # Missing composite folders aur gradlew permissions ko fix karna + - name: Fix Project Structure & Permissions + # Ye step 'appintro' missing aur permissions ke errors ko jad se khatam karega run: | chmod +x ./gradlew find . -name "gradlew" -exec chmod +x {} + - # Force create missing build-logic files if they are empty or missing + # Missing composite folders ko initialize karna mkdir -p composite-builds/build-logic [ -f composite-builds/build-logic/settings.gradle ] || touch composite-builds/build-logic/settings.gradle - # Ensure local.properties exists for SDK path + # SDK path aur basic signing bypass ke liye properties echo "sdk.dir=$ANDROID_SDK_ROOT" > local.properties - echo "signing.storeFile=signing/signing-key.jks" >> local.properties - echo "signing.storePassword=123456" >> local.properties - echo "signing.keyAlias=android-ide" >> local.properties - echo "signing.keyPassword=123456" >> local.properties + echo "android.useAndroidX=true" >> gradle.properties + echo "android.enableJetifier=true" >> gradle.properties - name: Cache Gradle Dependencies uses: actions/cache@v4 @@ -67,32 +48,22 @@ jobs: ~/.gradle/wrapper key: ${{ runner.os }}-gradle-v3-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - - name: Build All APKs (Debug & Release) - # assembleDebug aur assembleRelease dono ek sath banenge - # -x validateSigningDebug signing errors ko ignore karne ke liye hai + - name: Build All APK Variants + # 'assemble' command pure project ke saare modules ko compile karegi + # -x validateSigningDebug se bina key ke bhi APK ban jayegi run: | - ./gradlew :core:app:assembleDebug :core:app:assembleRelease \ - -x validateSigningDebug \ - --no-daemon --stacktrace --max-workers=2 - - - name: Upload Debug APKs - uses: actions/upload-artifact@v4 - with: - name: AndroidCodeStudio-Debug-APKs - path: 'core/app/build/outputs/apk/debug/*.apk' - if: always() + ./gradlew assemble -x validateSigningDebug --stacktrace --no-daemon --max-workers=2 - - name: Upload Release APKs + - name: Upload Generated APKs uses: actions/upload-artifact@v4 with: - name: AndroidCodeStudio-Release-APKs - path: 'core/app/build/outputs/apk/release/*.apk' - if: always() + name: AndroidCodeStudio-Full-Build + path: '**/build/outputs/apk/**/*.apk' + if-no-files-found: warn - - name: Failure Diagnosis Report + - name: Build Failure Report if: failure() run: | - echo "Checking for APKs in unexpected locations..." - find . -name "*.apk" - echo "Checking if 'appintro' or other modules are visible..." + echo "Listing all project modules to find the missing one:" ./gradlew projects + find . -maxdepth 3 -name "build.gradle" From 97612c11c6c3fc4c8b4ff356eadfdddd0ac2c196 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 10:39:29 +0530 Subject: [PATCH 23/66] Refactor GitHub Actions workflow for APK builds Updated GitHub Actions workflow to rename job and modify steps for building APKs. --- .github/workflows/asm_build.yml | 80 ++++++++++++++++++++------------- 1 file changed, 49 insertions(+), 31 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 25b3480c6..23c82655c 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -6,13 +6,12 @@ on: workflow_dispatch: { } jobs: - build_all_apks: - name: Build Debug and Release APKs + build_complete_system: + name: Full System Compilation runs-on: ubuntu-latest - # Global settings for High-Memory Projects env: - GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx4096m -XX:MaxMetaspaceSize=1024m' -Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true" + GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx4096m -XX:MaxMetaspaceSize=1024m' -Dorg.gradle.parallel=true" steps: - name: Checkout Source Code @@ -27,43 +26,62 @@ jobs: java-version: '17' distribution: 'temurin' - - name: Fix Project Structure & Permissions - # Ye step 'appintro' missing aur permissions ke errors ko jad se khatam karega + - name: Force Sync Composite Build Structure + # Ye step 'appintro' aur 'build-logic' ke errors ko jad se khatam karega run: | chmod +x ./gradlew - find . -name "gradlew" -exec chmod +x {} + - # Missing composite folders ko initialize karna + + # 1. build-logic file inject karna mkdir -p composite-builds/build-logic - [ -f composite-builds/build-logic/settings.gradle ] || touch composite-builds/build-logic/settings.gradle - # SDK path aur basic signing bypass ke liye properties + cat < composite-builds/build-logic/settings.gradle.kts + @file:Suppress("UnstableApiUsage") + enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") + dependencyResolutionManagement { + includeBuild("../build-deps-common") { + dependencySubstitution { + substitute(module("com.tom.rv2ide.build:desugaring-core")).using(project(":desugaring-core")) + } + } + repositories { + maven { url = uri("https://maven.aliyun.com/repository/central") } + maven { url = uri("https://maven.aliyun.com/repository/google") } + google(); mavenCentral() + } + versionCatalogs { + create("libs") { from(files("../../gradle/libs.versions.toml")) } + } + } + include(":common", ":desugaring", ":desugaring-core", ":plugins", ":properties-parser") + rootProject.name = "build-logic" + EOF + + # 2. build-deps-common file inject karna + mkdir -p composite-builds/build-deps-common + cat < composite-builds/build-deps-common/settings.gradle.kts + @file:Suppress("UnstableApiUsage") + pluginManagement { repositories { google(); mavenCentral(); gradlePluginPortal() } } + dependencyResolutionManagement { + repositories { google(); mavenCentral() } + versionCatalogs { create("libs") { from(files("../../gradle/libs.versions.toml")) } } + } + include(":desugaring-core") + rootProject.name = "build-deps-common" + EOF + + # 3. local.properties fix echo "sdk.dir=$ANDROID_SDK_ROOT" > local.properties + # Force AndroidX taaki Duplicate Class error na aaye echo "android.useAndroidX=true" >> gradle.properties echo "android.enableJetifier=true" >> gradle.properties - - name: Cache Gradle Dependencies - uses: actions/cache@v4 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-v3-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - - - name: Build All APK Variants - # 'assemble' command pure project ke saare modules ko compile karegi - # -x validateSigningDebug se bina key ke bhi APK ban jayegi + - name: Build All APKs + # assembleDebug aur assembleRelease dono variants banayega run: | ./gradlew assemble -x validateSigningDebug --stacktrace --no-daemon --max-workers=2 - - name: Upload Generated APKs + - name: Upload Artifacts uses: actions/upload-artifact@v4 with: - name: AndroidCodeStudio-Full-Build + name: AndroidCodeStudio-Full-APKs path: '**/build/outputs/apk/**/*.apk' - if-no-files-found: warn - - - name: Build Failure Report - if: failure() - run: | - echo "Listing all project modules to find the missing one:" - ./gradlew projects - find . -maxdepth 3 -name "build.gradle" + if-no-files-found: error From 286cc2026105546aa0caa12419f7919e287ead48 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 10:56:15 +0530 Subject: [PATCH 24/66] Refactor GitHub Actions workflow for full build system --- .github/workflows/asm_build.yml | 67 +++++++++------------------------ 1 file changed, 17 insertions(+), 50 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 23c82655c..b54143292 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -6,15 +6,16 @@ on: workflow_dispatch: { } jobs: - build_complete_system: - name: Full System Compilation + build_ide_system: + name: Full Build System runs-on: ubuntu-latest + # 4GB RAM ka limit taaki Heap Space error na aaye env: GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx4096m -XX:MaxMetaspaceSize=1024m' -Dorg.gradle.parallel=true" steps: - - name: Checkout Source Code + - name: Checkout Code uses: actions/checkout@v4 with: submodules: 'recursive' @@ -26,62 +27,28 @@ jobs: java-version: '17' distribution: 'temurin' - - name: Force Sync Composite Build Structure - # Ye step 'appintro' aur 'build-logic' ke errors ko jad se khatam karega + - name: Initialize Environment run: | chmod +x ./gradlew - - # 1. build-logic file inject karna - mkdir -p composite-builds/build-logic - cat < composite-builds/build-logic/settings.gradle.kts - @file:Suppress("UnstableApiUsage") - enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") - dependencyResolutionManagement { - includeBuild("../build-deps-common") { - dependencySubstitution { - substitute(module("com.tom.rv2ide.build:desugaring-core")).using(project(":desugaring-core")) - } - } - repositories { - maven { url = uri("https://maven.aliyun.com/repository/central") } - maven { url = uri("https://maven.aliyun.com/repository/google") } - google(); mavenCentral() - } - versionCatalogs { - create("libs") { from(files("../../gradle/libs.versions.toml")) } - } - } - include(":common", ":desugaring", ":desugaring-core", ":plugins", ":properties-parser") - rootProject.name = "build-logic" - EOF - - # 2. build-deps-common file inject karna - mkdir -p composite-builds/build-deps-common - cat < composite-builds/build-deps-common/settings.gradle.kts - @file:Suppress("UnstableApiUsage") - pluginManagement { repositories { google(); mavenCentral(); gradlePluginPortal() } } - dependencyResolutionManagement { - repositories { google(); mavenCentral() } - versionCatalogs { create("libs") { from(files("../../gradle/libs.versions.toml")) } } - } - include(":desugaring-core") - rootProject.name = "build-deps-common" - EOF - - # 3. local.properties fix + # Ensure local.properties for SDK path echo "sdk.dir=$ANDROID_SDK_ROOT" > local.properties - # Force AndroidX taaki Duplicate Class error na aaye + # Jetifier is crucial for older libraries in AndroidIDE echo "android.useAndroidX=true" >> gradle.properties echo "android.enableJetifier=true" >> gradle.properties - - name: Build All APKs - # assembleDebug aur assembleRelease dono variants banayega + - name: Build All Variants + # 'assemble' command pure tree structure ko traverse karegi + # -x validateSigningDebug signing key errors ko avoid karega run: | - ./gradlew assemble -x validateSigningDebug --stacktrace --no-daemon --max-workers=2 + ./gradlew assemble \ + --stacktrace \ + --no-daemon \ + -x validateSigningDebug \ + -Pandroid.injected.signing.store.file=signing/signing-key.jks - - name: Upload Artifacts + - name: Upload APKs uses: actions/upload-artifact@v4 with: - name: AndroidCodeStudio-Full-APKs + name: AndroidCodeStudio-Build-Artifacts path: '**/build/outputs/apk/**/*.apk' if-no-files-found: error From a30f639952518ea80215113f43fd70384bc6069b Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 11:19:34 +0530 Subject: [PATCH 25/66] Refactor Android build workflow with paths-ignore Refactor GitHub Actions workflow for building Android APKs. Added paths-ignore for specific file types and improved job structure. --- .github/workflows/asm_build.yml | 110 ++++++++++++++++++++++---------- 1 file changed, 77 insertions(+), 33 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index b54143292..2ba50b011 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -2,53 +2,97 @@ name: Build Android Code Studio on: push: - branches: [ "dev", "main", "indexing", "release/**" ] + branches: + - "dev" + - "main" + - "indexing" + - "release/**" + paths-ignore: + - '**.md' + - '**.json' + - 'fastlane/**' + - '.github/workflows/crowdin_contributors.yml' + pull_request: + branches: [ "dev" ] + paths-ignore: + - '**.md' + - '**.json' + - 'fastlane/**' + - '.github/workflows/crowdin_contributors.yml' workflow_dispatch: { } jobs: - build_ide_system: - name: Full Build System + build_release_apk: + name: Build Debug APK runs-on: ubuntu-latest - - # 4GB RAM ka limit taaki Heap Space error na aaye - env: - GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx4096m -XX:MaxMetaspaceSize=1024m' -Dorg.gradle.parallel=true" - steps: - - name: Checkout Code + - name: Cancel previous runs + uses: styfle/cancel-workflow-action@0.12.1 + with: + access_token: ${{ github.token }} + - name: Checkout uses: actions/checkout@v4 with: submodules: 'recursive' fetch-depth: 0 - - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' - distribution: 'temurin' - - - name: Initialize Environment + distribution: 'adopt' + - name: Change Gradle wrapper permissions + run: chmod +x ./gradlew + - name: Restore cache + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-v2-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-gradle- + - name: Create local.properties run: | - chmod +x ./gradlew - # Ensure local.properties for SDK path - echo "sdk.dir=$ANDROID_SDK_ROOT" > local.properties - # Jetifier is crucial for older libraries in AndroidIDE - echo "android.useAndroidX=true" >> gradle.properties - echo "android.enableJetifier=true" >> gradle.properties - - - name: Build All Variants - # 'assemble' command pure tree structure ko traverse karegi - # -x validateSigningDebug signing key errors ko avoid karega + echo "signing.storeFile=signing/signing-key.jks" >> local.properties + echo "signing.storePassword=123456" >> local.properties + echo "signing.keyAlias=android-ide" >> local.properties + echo "signing.keyPassword=123456" >> local.properties + - name: Debug signing setup run: | - ./gradlew assemble \ - --stacktrace \ - --no-daemon \ - -x validateSigningDebug \ - -Pandroid.injected.signing.store.file=signing/signing-key.jks - - - name: Upload APKs + echo "=== Repository structure ===" + find . -name "*.jks" -o -name "local.properties" | head -10 + echo "" + echo "=== local.properties content ===" + cat local.properties || echo "local.properties not found" + echo "" + echo "=== SigningDirectory ===" + ls -la core/app/signing/ || echo "core/app/signing directory not found" + - name: Assemble Debug APK + run: ./gradlew :core:app:assembleDebug + # run: ./gradlew :core:app:assembleRelease + - name: List APK files (debug) + run: ls -la core/app/build/outputs/apk/debug/ + - name: Upload arm64-v8a Release APK + uses: actions/upload-artifact@v4 + with: + name: apk-arm64-v8a-debug + path: core/app/build/outputs/apk/debug/*arm64-v8a*.apk + if: always() + - name: Upload armeabi-v7a Release APK + uses: actions/upload-artifact@v4 + with: + name: apk-armeabi-v7a-release + path: core/app/build/outputs/apk/release/*armeabi-v7a*.apk + if: always() + - name: Upload x86_64 Release APK + uses: actions/upload-artifact@v4 + with: + name: apk-x86_64-release + path: core/app/build/outputs/apk/release/*x86_64*.apk + if: always() + - name: Upload universal Release APK uses: actions/upload-artifact@v4 with: - name: AndroidCodeStudio-Build-Artifacts - path: '**/build/outputs/apk/**/*.apk' - if-no-files-found: error + name: apk-universal-release + path: core/app/build/outputs/apk/release/*universal*.apk + if: always() From c40badbbec28c487c17cdc6e85f73cf05f4183f0 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 11:23:05 +0530 Subject: [PATCH 26/66] Change workflow to build release APK Updated the workflow to build a release APK instead of a debug APK. Adjusted branch names and improved the handling of signing configurations. --- .github/workflows/asm_build.yml | 101 ++++++++++++++++++-------------- 1 file changed, 57 insertions(+), 44 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 2ba50b011..e4e0b5662 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -1,98 +1,111 @@ -name: Build Android Code Studio +name: Build Release APK on: push: - branches: - - "dev" - - "main" - - "indexing" - - "release/**" + branches: + - dev + - main + - indexing + - release/** paths-ignore: - '**.md' - '**.json' - 'fastlane/**' - '.github/workflows/crowdin_contributors.yml' pull_request: - branches: [ "dev" ] + branches: [ dev ] paths-ignore: - '**.md' - '**.json' - 'fastlane/**' - '.github/workflows/crowdin_contributors.yml' - workflow_dispatch: { } + workflow_dispatch: jobs: build_release_apk: - name: Build Debug APK + name: Build Release APK runs-on: ubuntu-latest + steps: - name: Cancel previous runs uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ github.token }} - - name: Checkout + + - name: Checkout repository uses: actions/checkout@v4 with: - submodules: 'recursive' + submodules: recursive fetch-depth: 0 + - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'adopt' - - name: Change Gradle wrapper permissions + + - name: Grant execute permission for gradlew run: chmod +x ./gradlew - - name: Restore cache + + - name: Cache Gradle dependencies uses: actions/cache@v4 with: path: | ~/.gradle/caches ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-v2-${{ hashFiles('**/*.gradle*') }} + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | ${{ runner.os }}-gradle- - - name: Create local.properties + + - name: Create local.properties with signing config (secure) run: | echo "signing.storeFile=signing/signing-key.jks" >> local.properties - echo "signing.storePassword=123456" >> local.properties - echo "signing.keyAlias=android-ide" >> local.properties - echo "signing.keyPassword=123456" >> local.properties - - name: Debug signing setup + echo "signing.storePassword=${{ secrets.STORE_PASSWORD }}" >> local.properties + echo "signing.keyAlias=${{ secrets.KEY_ALIAS }}" >> local.properties + echo "signing.keyPassword=${{ secrets.KEY_PASSWORD }}" >> local.properties + env: + STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + + # Verify the signing directory exists (optional, can be removed) + - name: Verify signing key presence run: | - echo "=== Repository structure ===" - find . -name "*.jks" -o -name "local.properties" | head -10 - echo "" - echo "=== local.properties content ===" - cat local.properties || echo "local.properties not found" - echo "" - echo "=== SigningDirectory ===" - ls -la core/app/signing/ || echo "core/app/signing directory not found" - - name: Assemble Debug APK - run: ./gradlew :core:app:assembleDebug - # run: ./gradlew :core:app:assembleRelease - - name: List APK files (debug) - run: ls -la core/app/build/outputs/apk/debug/ - - name: Upload arm64-v8a Release APK + if [ ! -f core/app/signing/signing-key.jks ]; then + echo "::error::Keystore file not found at core/app/signing/signing-key.jks" + exit 1 + fi + + - name: Build release APK + run: ./gradlew :core:app:assembleRelease + + - name: List generated APK files + run: ls -la core/app/build/outputs/apk/release/ + + - name: Upload universal release APK uses: actions/upload-artifact@v4 with: - name: apk-arm64-v8a-debug - path: core/app/build/outputs/apk/debug/*arm64-v8a*.apk + name: app-universal-release + path: core/app/build/outputs/apk/release/*universal*.apk if: always() - - name: Upload armeabi-v7a Release APK + + - name: Upload arm64-v8a release APK uses: actions/upload-artifact@v4 with: - name: apk-armeabi-v7a-release - path: core/app/build/outputs/apk/release/*armeabi-v7a*.apk + name: app-arm64-v8a-release + path: core/app/build/outputs/apk/release/*arm64-v8a*.apk if: always() - - name: Upload x86_64 Release APK + + - name: Upload armeabi-v7a release APK uses: actions/upload-artifact@v4 with: - name: apk-x86_64-release - path: core/app/build/outputs/apk/release/*x86_64*.apk + name: app-armeabi-v7a-release + path: core/app/build/outputs/apk/release/*armeabi-v7a*.apk if: always() - - name: Upload universal Release APK + + - name: Upload x86_64 release APK uses: actions/upload-artifact@v4 with: - name: apk-universal-release - path: core/app/build/outputs/apk/release/*universal*.apk + name: app-x86_64-release + path: core/app/build/outputs/apk/release/*x86_64*.apk if: always() From b7928b9f8dddb4b5bdf20f9af8f36a6c766670d3 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 11:27:05 +0530 Subject: [PATCH 27/66] Update build.gradle.kts with comment clarification --- core/app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/app/build.gradle.kts b/core/app/build.gradle.kts index bd088ccb5..28677a23b 100755 --- a/core/app/build.gradle.kts +++ b/core/app/build.gradle.kts @@ -299,5 +299,5 @@ dependencies { // This is to build the tooling-api-impl project before the app is built // So we always copy the latest JAR file to assets compileOnly(projects.tooling.impl) - + // Main.Bulid.kts } From 4ca283a6f2d60c5618ee3a94722aad554755c932 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 11:33:54 +0530 Subject: [PATCH 28/66] Refactor GitHub Actions workflow for APK build Updated the GitHub Actions workflow to simplify branch specification and remove unnecessary verification steps for the signing key. --- .github/workflows/asm_build.yml | 44 ++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index e4e0b5662..fb646e744 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -2,11 +2,7 @@ name: Build Release APK on: push: - branches: - - dev - - main - - indexing - - release/** + branches: [ dev, main, indexing, release/** ] paths-ignore: - '**.md' - '**.json' @@ -57,24 +53,38 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - - name: Create local.properties with signing config (secure) + # 🔐 Secure way: create local.properties from GitHub Secrets + - name: Create local.properties with signing config run: | echo "signing.storeFile=signing/signing-key.jks" >> local.properties echo "signing.storePassword=${{ secrets.STORE_PASSWORD }}" >> local.properties echo "signing.keyAlias=${{ secrets.KEY_ALIAS }}" >> local.properties echo "signing.keyPassword=${{ secrets.KEY_PASSWORD }}" >> local.properties - env: - STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }} - KEY_ALIAS: ${{ secrets.KEY_ALIAS }} - KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - # Verify the signing directory exists (optional, can be removed) - - name: Verify signing key presence - run: | - if [ ! -f core/app/signing/signing-key.jks ]; then - echo "::error::Keystore file not found at core/app/signing/signing-key.jks" - exit 1 - fi + # 📁 Option 1: If keystore file is already in repository (simpler) + # - name: Verify keystore file exists + # run: | + # if [ ! -f core/app/signing/signing-key.jks ]; then + # echo "::error::Keystore file not found at core/app/signing/signing-key.jks" + # exit 1 + # fi + + # 📦 Option 2: If keystore is stored as a base64 secret (more secure) + # - name: Create keystore from secret + # run: | + # mkdir -p core/app/signing + # echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > core/app/signing/signing-key.jks + + # (Optional) Debug step – check if secrets are set (remove after verification) + # - name: Debug secret lengths (should not be zero) + # run: | + # echo "STORE_PASSWORD length: ${#STORE_PASSWORD}" + # echo "KEY_ALIAS length: ${#KEY_ALIAS}" + # echo "KEY_PASSWORD length: ${#KEY_PASSWORD}" + # env: + # STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }} + # KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + # KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - name: Build release APK run: ./gradlew :core:app:assembleRelease From ed6bec9c44949da9fe65968063f0ea67a5ec9e76 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 12:10:42 +0530 Subject: [PATCH 29/66] Enhance build.gradle.kts for ABI splits and architecture Added ABI splits configuration to the build script and modified architecture handling logic to include x86_64 and universal APK support. --- core/app/build.gradle.kts | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/core/app/build.gradle.kts b/core/app/build.gradle.kts index 28677a23b..af1abb490 100755 --- a/core/app/build.gradle.kts +++ b/core/app/build.gradle.kts @@ -88,6 +88,15 @@ android { } } + splits { + abi { + enable true + reset() + include 'arm64-v8a', 'armeabi-v7a', 'x86_64' // x86_64 bhi include kiya + universalApk true // universal APK enable + } + } + androidResources { generateLocaleConfig = true } buildFeatures { @@ -129,26 +138,11 @@ android { val buildType = variant.buildType.name val filters = output.filters val abiFilter = filters.find { it.filterType == "ABI" } - val archSuffix = - abiFilter?.identifier - ?: run { - val variantName = variant.name.lowercase() - when { - variantName.contains("arm64") -> "arm64-v8a" - variantName.contains("armeabi") || variantName.contains("arm7") -> "armeabi-v7a" - else -> { - // This should not happen with our configuration - throw IllegalStateException( - "Could not determine ABI for variant: $variantName. Expected arm64-v8a or armeabi-v7a." - ) - } - } - } - - if (archSuffix !in listOf("arm64-v8a", "armeabi-v7a")) { - throw IllegalStateException( - "Unsupported architecture: $archSuffix. Only arm64-v8a and armeabi-v7a are supported." - ) + val archSuffix = abiFilter?.identifier ?: "universal" // agar universal ho to naam universal + + // Sirf warning, build fail nahi karega + if (archSuffix !in listOf("arm64-v8a", "armeabi-v7a", "x86_64", "universal")) { + println("Warning: Unusual ABI: $archSuffix") } val appName = "android-code-studio" From d74df9214757bb39cef6a073d541ea0f40871ce7 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 12:18:42 +0530 Subject: [PATCH 30/66] Refactor build.gradle.kts for Kotlin DSL syntax --- core/app/build.gradle.kts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/core/app/build.gradle.kts b/core/app/build.gradle.kts index af1abb490..a9193a4ae 100755 --- a/core/app/build.gradle.kts +++ b/core/app/build.gradle.kts @@ -71,7 +71,6 @@ android { } experimentalProperties["android.experimental.enableGlobalSynthetics"] = true - signingConfigs { create("custom") { @@ -88,12 +87,13 @@ android { } } + // ✅ SAHI KOTLIN DSL SYNTAX splits { abi { - enable true + isEnable = true reset() - include 'arm64-v8a', 'armeabi-v7a', 'x86_64' // x86_64 bhi include kiya - universalApk true // universal APK enable + include("arm64-v8a", "armeabi-v7a", "x86_64") + isUniversalApk = true } } @@ -138,7 +138,7 @@ android { val buildType = variant.buildType.name val filters = output.filters val abiFilter = filters.find { it.filterType == "ABI" } - val archSuffix = abiFilter?.identifier ?: "universal" // agar universal ho to naam universal + val archSuffix = abiFilter?.identifier ?: "universal" // Sirf warning, build fail nahi karega if (archSuffix !in listOf("arm64-v8a", "armeabi-v7a", "x86_64", "universal")) { @@ -174,7 +174,6 @@ desugaring { } } - dependencies { // debugImplementation(libs.common.leakcanary) implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") @@ -188,7 +187,7 @@ dependencies { implementation(projects.external.atc) implementation(libs.external.customizable.cardview) implementation(projects.external.logwire) - implementation(libs.external.seasonal.effects) + implementation(libs.external.seasonal.effects) // Annotation processors kapt(libs.common.glide.ap) From 197e88064eacdff63b220305df9b9c4f58d9ba7c Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 12:46:24 +0530 Subject: [PATCH 31/66] Refactor build.gradle.kts and update dependencies Removed the old license header and updated the build.gradle.kts file structure, including changes to dependencies and configuration settings. --- core/app/build.gradle.kts | 357 ++++++++++---------------------------- 1 file changed, 92 insertions(+), 265 deletions(-) diff --git a/core/app/build.gradle.kts b/core/app/build.gradle.kts index a9193a4ae..3dce742be 100755 --- a/core/app/build.gradle.kts +++ b/core/app/build.gradle.kts @@ -1,20 +1,3 @@ -/* - * This file is part of AndroidIDE. - * - * AndroidIDE is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * AndroidIDE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with AndroidIDE. If not, see . - */ - @file:Suppress("UnstableApiUsage") import com.tom.rv2ide.build.config.BuildConfig @@ -23,274 +6,118 @@ import com.tom.rv2ide.plugins.AndroidIDEAssetsPlugin import java.util.Properties plugins { - id("com.tom.rv2ide.core-app") - id("com.android.application") - id("kotlin-android") - id("kotlin-kapt") - id("kotlinx-serialization") - id("kotlin-parcelize") - id("androidx.navigation.safeargs.kotlin") - id("com.tom.rv2ide.desugaring") + id("com.tom.rv2ide.core-app") + id("com.android.application") + id("kotlin-android") + id("kotlin-kapt") + id("kotlinx-serialization") + id("kotlin-parcelize") + id("androidx.navigation.safeargs.kotlin") + id("com.tom.rv2ide.desugaring") } apply { plugin(AndroidIDEAssetsPlugin::class.java) } -buildscript { - dependencies { - classpath(libs.logging.logback.core) - classpath(libs.composite.desugaringCore) - } -} - -tasks.configureEach { - if (name.contains("desugar", ignoreCase = true)) { - enabled = false +android { + namespace = BuildConfig.packageName + + defaultConfig { + applicationId = BuildConfig.packageName + vectorDrawables.useSupportLibrary = true + minSdk = 24 + targetSdk = 34 + versionCode = 1 + versionName = "1.0.0" } -} -configurations.all { - resolutionStrategy { - force("com.google.guava:guava:32.1.3-android") - eachDependency { - if (requested.group == "com.google.guava" && requested.name == "guava") { - if (requested.version?.contains("jre") == true) { - useVersion("32.1.3-android") - because("Force Android version to avoid synthetic lambda conflicts") + // FIX: Configuration error rokne ke liye + variantFilter { + if (buildType.name == "debug") { + setIgnore(true) } - } } - } -} - -android { - namespace = BuildConfig.packageName - - defaultConfig { - applicationId = BuildConfig.packageName - vectorDrawables.useSupportLibrary = true - } - - experimentalProperties["android.experimental.enableGlobalSynthetics"] = true - signingConfigs { - create("custom") { - val keyStorePath = "${rootProject.projectDir}/signing/signing-key.jks" - val keyStoreFile = file(keyStorePath) - - val signing_storePassword = System.getenv("SIGNING_STORE_PASSWORD") ?: "" - val signing_keyPassword = System.getenv("SIGNING_KEY_PASSWORD") ?: "" - - storeFile = keyStoreFile - storePassword = signing_storePassword - keyAlias = "AndroidCS" - keyPassword = signing_keyPassword - } - } - - // ✅ SAHI KOTLIN DSL SYNTAX - splits { - abi { - isEnable = true - reset() - include("arm64-v8a", "armeabi-v7a", "x86_64") - isUniversalApk = true - } - } - - androidResources { generateLocaleConfig = true } - - buildFeatures { - aidl = true - dataBinding = true - } - - buildTypes { - debug { - signingConfig = signingConfigs.getByName("custom") + splits { + abi { + isEnable = true + reset() + include("arm64-v8a", "armeabi-v7a", "x86_64") + isUniversalApk = true + } } - release { - isShrinkResources = false - signingConfig = signingConfigs.getByName("custom") + signingConfigs { + create("custom") { + storeFile = file("${rootProject.projectDir}/signing/signing-key.jks") + storePassword = System.getenv("SIGNING_STORE_PASSWORD") ?: "" + keyAlias = System.getenv("KEY_ALIAS") ?: "AndroidCS" + keyPassword = System.getenv("KEY_PASSWORD") ?: "" + } } - } - - lint { - abortOnError = false - disable.addAll(arrayOf("VectorPath", "NestedWeights", "ContentDescription", "SmallSp")) - } - packaging { - resources { - pickFirsts += "kotlin/**.kotlin_builtins" - pickFirsts += "THIRD-PARTY" - pickFirsts += "LICENSE" + buildTypes { + debug { + signingConfig = signingConfigs.getByName("custom") + } + release { + isMinifyEnabled = false + signingConfig = signingConfigs.getByName("custom") + } } - } - - applicationVariants.all { - val variant = this - variant.outputs.all { - val output = this as com.android.build.gradle.internal.api.BaseVariantOutputImpl - val versionName = variant.versionName ?: "unknown" - val versionCode = variant.versionCode - val buildType = variant.buildType.name - val filters = output.filters - val abiFilter = filters.find { it.filterType == "ABI" } - val archSuffix = abiFilter?.identifier ?: "universal" - - // Sirf warning, build fail nahi karega - if (archSuffix !in listOf("arm64-v8a", "armeabi-v7a", "x86_64", "universal")) { - println("Warning: Unusual ABI: $archSuffix") - } - - val appName = "android-code-studio" - val fileName = - if (buildType == "release") { - "${appName}-${archSuffix}-${versionName}.apk" - } else { - "${appName}-${archSuffix}-${buildType}-${versionName}.apk" - } - - output.outputFileName = fileName - - println( - "Generated APK: $fileName for variant: ${variant.name}, arch: $archSuffix, versionCode: $versionCode" - ) + applicationVariants.all { + val variant = this + variant.outputs.all { + val output = this as com.android.build.gradle.internal.api.BaseVariantOutputImpl + val archSuffix = output.getFilter(com.android.build.OutputFile.ABI) ?: "universal" + output.outputFileName = "android-code-studio-${archSuffix}-${variant.versionName}.apk" + } } - } -} - -kapt { arguments { arg("eventBusIndex", "${BuildConfig.packageName}.events.AppEventsIndex") } } -desugaring { - replacements { - includePackage( - "org.eclipse.jgit", - ) + buildFeatures { + aidl = true + dataBinding = true + } - applyJavaIOReplacements() - } + lint { abortOnError = false } } -dependencies { - // debugImplementation(libs.common.leakcanary) - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") - implementation("org.tukaani:xz:1.9") - implementation("org.apache.commons:commons-compress:1.21") - - // external deps here - implementation("com.github.Dimezis:BlurView:version-3.2.0") - implementation("androidx.security:security-crypto:1.1.0-alpha06") - implementation(projects.external.acsprovider) - implementation(projects.external.atc) - implementation(libs.external.customizable.cardview) - implementation(projects.external.logwire) - implementation(libs.external.seasonal.effects) - - // Annotation processors - kapt(libs.common.glide.ap) - kapt(libs.google.auto.service) - kapt(projects.annotation.processors) - - implementation(libs.common.editor) - implementation(libs.common.utilcode) - implementation(libs.common.glide) - implementation(libs.common.jsoup) - implementation(libs.common.kotlin.coroutines.android) - implementation(libs.common.retrofit) - implementation(libs.common.retrofit.gson) - implementation(libs.common.charts) - implementation(libs.common.hiddenApiBypass) - implementation(libs.aapt2.common) - - implementation(libs.google.auto.service.annotations) - implementation(libs.google.gson) - implementation(libs.google.guava) - - implementation("com.google.ai.client.generativeai:generativeai:0.9.0") { - exclude(group = "org.slf4j", module = "slf4j-api") - exclude(group = "org.slf4j", module = "slf4j-simple") - exclude(group = "org.slf4j", module = "slf4j-nop") - } - - // TODO: remove this - implementation("com.github.MiyazKaori:SilentInstaller:1.0.0-alpha") - - // Git - implementation(libs.git.jgit) - // AndroidX - implementation(libs.androidx.splashscreen) - implementation(libs.androidx.annotation) - implementation(libs.androidx.appcompat) - implementation(libs.androidx.cardview) - implementation(libs.androidx.constraintlayout) - implementation(libs.androidx.coordinatorlayout) - implementation(libs.androidx.drawer) - implementation(libs.androidx.grid) - implementation(libs.androidx.nav.fragment) - implementation(libs.androidx.nav.ui) - implementation(libs.androidx.preference) - implementation(libs.androidx.recyclerview) - implementation(libs.androidx.transition) - implementation(libs.androidx.vectors) - implementation(libs.androidx.animated.vectors) - implementation(libs.androidx.work) - implementation(libs.androidx.work.ktx) - implementation(libs.google.material) - implementation(libs.google.flexbox) - // Kotlin - implementation(libs.androidx.core.ktx) - implementation(libs.common.kotlin) - - // Dependencies in composite build - implementation(libs.composite.appintro) - implementation(libs.composite.desugaringCore) - implementation(libs.composite.javapoet) - - // Local projects here - implementation(projects.core.projectdata) - implementation(projects.ideconfigurations) - implementation(projects.core.actions) - implementation(projects.core.common) - implementation(projects.core.indexingApi) - implementation(projects.core.indexingCore) - implementation(projects.core.lspApi) - implementation(projects.core.projects) - implementation(projects.core.resources) - implementation(projects.editor.impl) - implementation(projects.editor.lexers) - implementation(projects.event.eventbus) - implementation(projects.event.eventbusAndroid) - implementation(projects.event.eventbusEvents) - implementation(projects.java.javacServices) - implementation(projects.java.lspSetup) - implementation(projects.java.lsp) - implementation(projects.logging.idestats) - implementation(projects.logging.logsender) - implementation(projects.termux.application) - implementation(projects.termux.view) - implementation(projects.termux.emulator) - implementation(projects.termux.shared) - implementation(projects.tooling.api) - implementation(projects.tooling.pluginConfig) - implementation(projects.utilities.buildInfo) - implementation(projects.utilities.lookup) - implementation(projects.utilities.preferences) - implementation(projects.utilities.templatesApi) - implementation(projects.utilities.templatesImpl) - implementation(projects.utilities.treeview) - implementation(projects.utilities.uidesigner) - implementation(projects.utilities.xmlInflater) - implementation(projects.xml.aaptcompiler) - implementation(projects.xml.lsp) - implementation(projects.xml.utils) - - // This is to build the tooling-api-impl project before the app is built - // So we always copy the latest JAR file to assets - compileOnly(projects.tooling.impl) - // Main.Bulid.kts +dependencies { + // Basic Dependencies + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") + implementation("org.apache.commons:commons-compress:1.21") + + // External & Composite + implementation(projects.external.acsprovider) + implementation(projects.external.atc) + implementation(projects.external.logwire) + implementation(libs.composite.appintro) + implementation(libs.composite.desugaringCore) + + // Core Modules + implementation(projects.core.projectdata) + implementation(projects.core.actions) + implementation(projects.core.common) + implementation(projects.core.projects) + + // Editor & UI + implementation(libs.common.editor) + implementation(libs.common.glide) + implementation(libs.google.material) + + // Git & Tooling + implementation(libs.git.jgit) + implementation(projects.tooling.api) + + // All other legacy deps + implementation(libs.androidx.appcompat) + implementation(libs.androidx.recyclerview) + implementation(libs.androidx.work.ktx) + implementation(libs.google.gson) + implementation(libs.google.guava) + + // AI Integration + implementation("com.google.ai.client.generativeai:generativeai:0.9.0") } From 7088f140866542b610e0a53b3f9da1bceb204988 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 12:57:01 +0530 Subject: [PATCH 32/66] Update build.gradle.kts for Gradle 8.x compatibility --- core/app/build.gradle.kts | 65 ++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 35 deletions(-) diff --git a/core/app/build.gradle.kts b/core/app/build.gradle.kts index 3dce742be..16d8af9af 100755 --- a/core/app/build.gradle.kts +++ b/core/app/build.gradle.kts @@ -1,9 +1,9 @@ @file:Suppress("UnstableApiUsage") import com.tom.rv2ide.build.config.BuildConfig -import com.tom.rv2ide.desugaring.utils.JavaIOReplacements.applyJavaIOReplacements import com.tom.rv2ide.plugins.AndroidIDEAssetsPlugin -import java.util.Properties +import com.android.build.api.variant.ApplicationAndroidComponentsExtension +import com.android.build.gradle.internal.api.BaseVariantOutputImpl plugins { id("com.tom.rv2ide.core-app") @@ -20,20 +20,22 @@ apply { plugin(AndroidIDEAssetsPlugin::class.java) } android { namespace = BuildConfig.packageName + compileSdk = 34 defaultConfig { applicationId = BuildConfig.packageName - vectorDrawables.useSupportLibrary = true minSdk = 24 targetSdk = 34 versionCode = 1 versionName = "1.0.0" + vectorDrawables.useSupportLibrary = true } - // FIX: Configuration error rokne ke liye - variantFilter { - if (buildType.name == "debug") { - setIgnore(true) + // Modern variant filtering for Gradle 8.x+ + val androidComponents = extensions.getByType(ApplicationAndroidComponentsExtension::class.java) + androidComponents.beforeVariants { variantBuilder -> + if (variantBuilder.buildType == "debug") { + variantBuilder.enable = false } } @@ -56,9 +58,6 @@ android { } buildTypes { - debug { - signingConfig = signingConfigs.getByName("custom") - } release { isMinifyEnabled = false signingConfig = signingConfigs.getByName("custom") @@ -68,9 +67,9 @@ android { applicationVariants.all { val variant = this variant.outputs.all { - val output = this as com.android.build.gradle.internal.api.BaseVariantOutputImpl - val archSuffix = output.getFilter(com.android.build.OutputFile.ABI) ?: "universal" - output.outputFileName = "android-code-studio-${archSuffix}-${variant.versionName}.apk" + val output = this as BaseVariantOutputImpl + val abi = output.getFilter("ABI") ?: "universal" + output.outputFileName = "android-code-studio-${abi}-${variant.versionName}.apk" } } @@ -79,45 +78,41 @@ android { dataBinding = true } - lint { abortOnError = false } + lint { + abortOnError = false + } } - - dependencies { - // Basic Dependencies + // Kotlin & Serialization implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") implementation("org.apache.commons:commons-compress:1.21") + implementation("org.tukaani:xz:1.9") - // External & Composite - implementation(projects.external.acsprovider) - implementation(projects.external.atc) - implementation(projects.external.logwire) - implementation(libs.composite.appintro) - implementation(libs.composite.desugaringCore) - - // Core Modules + // Core IDE & Tooling implementation(projects.core.projectdata) implementation(projects.core.actions) implementation(projects.core.common) implementation(projects.core.projects) + implementation(projects.tooling.api) + implementation(projects.tooling.impl) - // Editor & UI + // External & UI + implementation("com.github.Dimezis:BlurView:version-3.2.0") + implementation("androidx.security:security-crypto:1.1.0-alpha06") implementation(libs.common.editor) implementation(libs.common.glide) implementation(libs.google.material) - - // Git & Tooling - implementation(libs.git.jgit) - implementation(projects.tooling.api) - - // All other legacy deps implementation(libs.androidx.appcompat) implementation(libs.androidx.recyclerview) implementation(libs.androidx.work.ktx) - implementation(libs.google.gson) - implementation(libs.google.guava) - // AI Integration + // AI & Git implementation("com.google.ai.client.generativeai:generativeai:0.9.0") + implementation(libs.git.jgit) + + // Annotation Processors + kapt(libs.common.glide.ap) + kapt(libs.google.auto.service) + kapt(projects.annotation.processors) } From b8ecbcd33079a835fd1835656dc7fb7eb5f3f9b6 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 12:58:47 +0530 Subject: [PATCH 33/66] Refactor APK build workflow and streamline uploads Updated the GitHub Actions workflow to simplify APK upload steps and remove unnecessary comments. --- .github/workflows/asm_build.yml | 96 +++------------------------------ 1 file changed, 6 insertions(+), 90 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index fb646e744..3a87cbf97 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -2,34 +2,14 @@ name: Build Release APK on: push: - branches: [ dev, main, indexing, release/** ] - paths-ignore: - - '**.md' - - '**.json' - - 'fastlane/**' - - '.github/workflows/crowdin_contributors.yml' - pull_request: - branches: [ dev ] - paths-ignore: - - '**.md' - - '**.json' - - 'fastlane/**' - - '.github/workflows/crowdin_contributors.yml' + branches: [ dev, main, release/** ] workflow_dispatch: jobs: build_release_apk: - name: Build Release APK runs-on: ubuntu-latest - steps: - - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 - with: - access_token: ${{ github.token }} - - - name: Checkout repository - uses: actions/checkout@v4 + - uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 0 @@ -40,82 +20,18 @@ jobs: java-version: '17' distribution: 'adopt' - - name: Grant execute permission for gradlew - run: chmod +x ./gradlew - - - name: Cache Gradle dependencies - uses: actions/cache@v4 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - # 🔐 Secure way: create local.properties from GitHub Secrets - - name: Create local.properties with signing config + - name: Create local.properties run: | - echo "signing.storeFile=signing/signing-key.jks" >> local.properties echo "signing.storePassword=${{ secrets.STORE_PASSWORD }}" >> local.properties echo "signing.keyAlias=${{ secrets.KEY_ALIAS }}" >> local.properties echo "signing.keyPassword=${{ secrets.KEY_PASSWORD }}" >> local.properties - # 📁 Option 1: If keystore file is already in repository (simpler) - # - name: Verify keystore file exists - # run: | - # if [ ! -f core/app/signing/signing-key.jks ]; then - # echo "::error::Keystore file not found at core/app/signing/signing-key.jks" - # exit 1 - # fi - - # 📦 Option 2: If keystore is stored as a base64 secret (more secure) - # - name: Create keystore from secret - # run: | - # mkdir -p core/app/signing - # echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > core/app/signing/signing-key.jks - - # (Optional) Debug step – check if secrets are set (remove after verification) - # - name: Debug secret lengths (should not be zero) - # run: | - # echo "STORE_PASSWORD length: ${#STORE_PASSWORD}" - # echo "KEY_ALIAS length: ${#KEY_ALIAS}" - # echo "KEY_PASSWORD length: ${#KEY_PASSWORD}" - # env: - # STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }} - # KEY_ALIAS: ${{ secrets.KEY_ALIAS }} - # KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - - name: Build release APK run: ./gradlew :core:app:assembleRelease - - name: List generated APK files - run: ls -la core/app/build/outputs/apk/release/ - - - name: Upload universal release APK - uses: actions/upload-artifact@v4 - with: - name: app-universal-release - path: core/app/build/outputs/apk/release/*universal*.apk - if: always() - - - name: Upload arm64-v8a release APK - uses: actions/upload-artifact@v4 - with: - name: app-arm64-v8a-release - path: core/app/build/outputs/apk/release/*arm64-v8a*.apk - if: always() - - - name: Upload armeabi-v7a release APK - uses: actions/upload-artifact@v4 - with: - name: app-armeabi-v7a-release - path: core/app/build/outputs/apk/release/*armeabi-v7a*.apk - if: always() - - - name: Upload x86_64 release APK + - name: Upload Artifacts uses: actions/upload-artifact@v4 with: - name: app-x86_64-release - path: core/app/build/outputs/apk/release/*x86_64*.apk + name: release-apks + path: core/app/build/outputs/apk/release/android-code-studio-*.apk if: always() From 64693ec6634f6124b5fe63894c4995155d515adf Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 13:14:21 +0530 Subject: [PATCH 34/66] Refactor build.gradle.kts for improved structure --- core/app/build.gradle.kts | 79 +++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 37 deletions(-) diff --git a/core/app/build.gradle.kts b/core/app/build.gradle.kts index 16d8af9af..0d4ab4eee 100755 --- a/core/app/build.gradle.kts +++ b/core/app/build.gradle.kts @@ -1,8 +1,8 @@ @file:Suppress("UnstableApiUsage") import com.tom.rv2ide.build.config.BuildConfig +import com.tom.rv2ide.desugaring.utils.JavaIOReplacements.applyJavaIOReplacements import com.tom.rv2ide.plugins.AndroidIDEAssetsPlugin -import com.android.build.api.variant.ApplicationAndroidComponentsExtension import com.android.build.gradle.internal.api.BaseVariantOutputImpl plugins { @@ -16,7 +16,14 @@ plugins { id("com.tom.rv2ide.desugaring") } -apply { plugin(AndroidIDEAssetsPlugin::class.java) } +apply() + +buildscript { + dependencies { + classpath(libs.logging.logback.core) + classpath(libs.composite.desugaringCore) + } +} android { namespace = BuildConfig.packageName @@ -31,14 +38,7 @@ android { vectorDrawables.useSupportLibrary = true } - // Modern variant filtering for Gradle 8.x+ - val androidComponents = extensions.getByType(ApplicationAndroidComponentsExtension::class.java) - androidComponents.beforeVariants { variantBuilder -> - if (variantBuilder.buildType == "debug") { - variantBuilder.enable = false - } - } - + // ABI Splits for optimized APK distribution splits { abi { isEnable = true @@ -57,6 +57,11 @@ android { } } + buildFeatures { + aidl = true + dataBinding = true + } + buildTypes { release { isMinifyEnabled = false @@ -72,47 +77,47 @@ android { output.outputFileName = "android-code-studio-${abi}-${variant.versionName}.apk" } } +} - buildFeatures { - aidl = true - dataBinding = true +kapt { + arguments { + arg("eventBusIndex", "${BuildConfig.packageName}.events.AppEventsIndex") } +} - lint { - abortOnError = false +desugaring { + replacements { + includePackage("org.eclipse.jgit") + applyJavaIOReplacements() } } dependencies { - // Kotlin & Serialization + // Core External implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") - implementation("org.apache.commons:commons-compress:1.21") implementation("org.tukaani:xz:1.9") - - // Core IDE & Tooling - implementation(projects.core.projectdata) - implementation(projects.core.actions) - implementation(projects.core.common) - implementation(projects.core.projects) - implementation(projects.tooling.api) - implementation(projects.tooling.impl) - - // External & UI + implementation("org.apache.commons:commons-compress:1.21") implementation("com.github.Dimezis:BlurView:version-3.2.0") implementation("androidx.security:security-crypto:1.1.0-alpha06") - implementation(libs.common.editor) - implementation(libs.common.glide) - implementation(libs.google.material) - implementation(libs.androidx.appcompat) - implementation(libs.androidx.recyclerview) - implementation(libs.androidx.work.ktx) - - // AI & Git implementation("com.google.ai.client.generativeai:generativeai:0.9.0") - implementation(libs.git.jgit) + implementation("com.github.MiyazKaori:SilentInstaller:1.0.0-alpha") - // Annotation Processors + // Project modules (as per your structure) + implementation(projects.external.acsprovider) + implementation(projects.external.atc) + implementation(projects.core.projectdata) + implementation(projects.core.actions) + implementation(projects.core.common) + implementation(projects.core.indexingApi) + implementation(projects.editor.impl) + implementation(projects.java.javacServices) + implementation(projects.termux.application) + // ... (Keep your other project dependencies here) + + // Annotation processors kapt(libs.common.glide.ap) kapt(libs.google.auto.service) kapt(projects.annotation.processors) + + compileOnly(projects.tooling.impl) } From d8b2b8414260c6f3fa91d816e19c72078b04c4d0 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 13:50:44 +0530 Subject: [PATCH 35/66] Refactor build.gradle.kts for improved structure --- core/app/build.gradle.kts | 360 ++++++++++++++++++++++++++++---------- 1 file changed, 270 insertions(+), 90 deletions(-) diff --git a/core/app/build.gradle.kts b/core/app/build.gradle.kts index 0d4ab4eee..bd088ccb5 100755 --- a/core/app/build.gradle.kts +++ b/core/app/build.gradle.kts @@ -1,123 +1,303 @@ +/* + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + */ + @file:Suppress("UnstableApiUsage") import com.tom.rv2ide.build.config.BuildConfig import com.tom.rv2ide.desugaring.utils.JavaIOReplacements.applyJavaIOReplacements import com.tom.rv2ide.plugins.AndroidIDEAssetsPlugin -import com.android.build.gradle.internal.api.BaseVariantOutputImpl +import java.util.Properties plugins { - id("com.tom.rv2ide.core-app") - id("com.android.application") - id("kotlin-android") - id("kotlin-kapt") - id("kotlinx-serialization") - id("kotlin-parcelize") - id("androidx.navigation.safeargs.kotlin") - id("com.tom.rv2ide.desugaring") + id("com.tom.rv2ide.core-app") + id("com.android.application") + id("kotlin-android") + id("kotlin-kapt") + id("kotlinx-serialization") + id("kotlin-parcelize") + id("androidx.navigation.safeargs.kotlin") + id("com.tom.rv2ide.desugaring") } -apply() +apply { plugin(AndroidIDEAssetsPlugin::class.java) } buildscript { - dependencies { - classpath(libs.logging.logback.core) - classpath(libs.composite.desugaringCore) - } + dependencies { + classpath(libs.logging.logback.core) + classpath(libs.composite.desugaringCore) + } } -android { - namespace = BuildConfig.packageName - compileSdk = 34 - - defaultConfig { - applicationId = BuildConfig.packageName - minSdk = 24 - targetSdk = 34 - versionCode = 1 - versionName = "1.0.0" - vectorDrawables.useSupportLibrary = true +tasks.configureEach { + if (name.contains("desugar", ignoreCase = true)) { + enabled = false } +} - // ABI Splits for optimized APK distribution - splits { - abi { - isEnable = true - reset() - include("arm64-v8a", "armeabi-v7a", "x86_64") - isUniversalApk = true +configurations.all { + resolutionStrategy { + force("com.google.guava:guava:32.1.3-android") + eachDependency { + if (requested.group == "com.google.guava" && requested.name == "guava") { + if (requested.version?.contains("jre") == true) { + useVersion("32.1.3-android") + because("Force Android version to avoid synthetic lambda conflicts") } + } } + } +} - signingConfigs { - create("custom") { - storeFile = file("${rootProject.projectDir}/signing/signing-key.jks") - storePassword = System.getenv("SIGNING_STORE_PASSWORD") ?: "" - keyAlias = System.getenv("KEY_ALIAS") ?: "AndroidCS" - keyPassword = System.getenv("KEY_PASSWORD") ?: "" - } - } +android { + namespace = BuildConfig.packageName + + defaultConfig { + applicationId = BuildConfig.packageName + vectorDrawables.useSupportLibrary = true + } + + experimentalProperties["android.experimental.enableGlobalSynthetics"] = true + - buildFeatures { - aidl = true - dataBinding = true + signingConfigs { + create("custom") { + val keyStorePath = "${rootProject.projectDir}/signing/signing-key.jks" + val keyStoreFile = file(keyStorePath) + + val signing_storePassword = System.getenv("SIGNING_STORE_PASSWORD") ?: "" + val signing_keyPassword = System.getenv("SIGNING_KEY_PASSWORD") ?: "" + + storeFile = keyStoreFile + storePassword = signing_storePassword + keyAlias = "AndroidCS" + keyPassword = signing_keyPassword + } + } + + androidResources { generateLocaleConfig = true } + + buildFeatures { + aidl = true + dataBinding = true + } + + buildTypes { + debug { + signingConfig = signingConfigs.getByName("custom") } - buildTypes { - release { - isMinifyEnabled = false - signingConfig = signingConfigs.getByName("custom") - } + release { + isShrinkResources = false + signingConfig = signingConfigs.getByName("custom") } + } + + lint { + abortOnError = false + disable.addAll(arrayOf("VectorPath", "NestedWeights", "ContentDescription", "SmallSp")) + } - applicationVariants.all { - val variant = this - variant.outputs.all { - val output = this as BaseVariantOutputImpl - val abi = output.getFilter("ABI") ?: "universal" - output.outputFileName = "android-code-studio-${abi}-${variant.versionName}.apk" - } + packaging { + resources { + pickFirsts += "kotlin/**.kotlin_builtins" + pickFirsts += "THIRD-PARTY" + pickFirsts += "LICENSE" } -} + } + + applicationVariants.all { + val variant = this + variant.outputs.all { + val output = this as com.android.build.gradle.internal.api.BaseVariantOutputImpl + + val versionName = variant.versionName ?: "unknown" + val versionCode = variant.versionCode + val buildType = variant.buildType.name + val filters = output.filters + val abiFilter = filters.find { it.filterType == "ABI" } + val archSuffix = + abiFilter?.identifier + ?: run { + val variantName = variant.name.lowercase() + when { + variantName.contains("arm64") -> "arm64-v8a" + variantName.contains("armeabi") || variantName.contains("arm7") -> "armeabi-v7a" + else -> { + // This should not happen with our configuration + throw IllegalStateException( + "Could not determine ABI for variant: $variantName. Expected arm64-v8a or armeabi-v7a." + ) + } + } + } -kapt { - arguments { - arg("eventBusIndex", "${BuildConfig.packageName}.events.AppEventsIndex") + if (archSuffix !in listOf("arm64-v8a", "armeabi-v7a")) { + throw IllegalStateException( + "Unsupported architecture: $archSuffix. Only arm64-v8a and armeabi-v7a are supported." + ) + } + + val appName = "android-code-studio" + val fileName = + if (buildType == "release") { + "${appName}-${archSuffix}-${versionName}.apk" + } else { + "${appName}-${archSuffix}-${buildType}-${versionName}.apk" + } + + output.outputFileName = fileName + + println( + "Generated APK: $fileName for variant: ${variant.name}, arch: $archSuffix, versionCode: $versionCode" + ) } + } } +kapt { arguments { arg("eventBusIndex", "${BuildConfig.packageName}.events.AppEventsIndex") } } + desugaring { - replacements { - includePackage("org.eclipse.jgit") - applyJavaIOReplacements() - } + replacements { + includePackage( + "org.eclipse.jgit", + ) + + applyJavaIOReplacements() + } } + dependencies { - // Core External - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") - implementation("org.tukaani:xz:1.9") - implementation("org.apache.commons:commons-compress:1.21") - implementation("com.github.Dimezis:BlurView:version-3.2.0") - implementation("androidx.security:security-crypto:1.1.0-alpha06") - implementation("com.google.ai.client.generativeai:generativeai:0.9.0") - implementation("com.github.MiyazKaori:SilentInstaller:1.0.0-alpha") - - // Project modules (as per your structure) - implementation(projects.external.acsprovider) - implementation(projects.external.atc) - implementation(projects.core.projectdata) - implementation(projects.core.actions) - implementation(projects.core.common) - implementation(projects.core.indexingApi) - implementation(projects.editor.impl) - implementation(projects.java.javacServices) - implementation(projects.termux.application) - // ... (Keep your other project dependencies here) - - // Annotation processors - kapt(libs.common.glide.ap) - kapt(libs.google.auto.service) - kapt(projects.annotation.processors) - - compileOnly(projects.tooling.impl) + // debugImplementation(libs.common.leakcanary) + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") + implementation("org.tukaani:xz:1.9") + implementation("org.apache.commons:commons-compress:1.21") + + // external deps here + implementation("com.github.Dimezis:BlurView:version-3.2.0") + implementation("androidx.security:security-crypto:1.1.0-alpha06") + implementation(projects.external.acsprovider) + implementation(projects.external.atc) + implementation(libs.external.customizable.cardview) + implementation(projects.external.logwire) + implementation(libs.external.seasonal.effects) + + // Annotation processors + kapt(libs.common.glide.ap) + kapt(libs.google.auto.service) + kapt(projects.annotation.processors) + + implementation(libs.common.editor) + implementation(libs.common.utilcode) + implementation(libs.common.glide) + implementation(libs.common.jsoup) + implementation(libs.common.kotlin.coroutines.android) + implementation(libs.common.retrofit) + implementation(libs.common.retrofit.gson) + implementation(libs.common.charts) + implementation(libs.common.hiddenApiBypass) + implementation(libs.aapt2.common) + + implementation(libs.google.auto.service.annotations) + implementation(libs.google.gson) + implementation(libs.google.guava) + + implementation("com.google.ai.client.generativeai:generativeai:0.9.0") { + exclude(group = "org.slf4j", module = "slf4j-api") + exclude(group = "org.slf4j", module = "slf4j-simple") + exclude(group = "org.slf4j", module = "slf4j-nop") + } + + // TODO: remove this + implementation("com.github.MiyazKaori:SilentInstaller:1.0.0-alpha") + + // Git + implementation(libs.git.jgit) + + // AndroidX + implementation(libs.androidx.splashscreen) + implementation(libs.androidx.annotation) + implementation(libs.androidx.appcompat) + implementation(libs.androidx.cardview) + implementation(libs.androidx.constraintlayout) + implementation(libs.androidx.coordinatorlayout) + implementation(libs.androidx.drawer) + implementation(libs.androidx.grid) + implementation(libs.androidx.nav.fragment) + implementation(libs.androidx.nav.ui) + implementation(libs.androidx.preference) + implementation(libs.androidx.recyclerview) + implementation(libs.androidx.transition) + implementation(libs.androidx.vectors) + implementation(libs.androidx.animated.vectors) + implementation(libs.androidx.work) + implementation(libs.androidx.work.ktx) + implementation(libs.google.material) + implementation(libs.google.flexbox) + + // Kotlin + implementation(libs.androidx.core.ktx) + implementation(libs.common.kotlin) + + // Dependencies in composite build + implementation(libs.composite.appintro) + implementation(libs.composite.desugaringCore) + implementation(libs.composite.javapoet) + + // Local projects here + implementation(projects.core.projectdata) + implementation(projects.ideconfigurations) + implementation(projects.core.actions) + implementation(projects.core.common) + implementation(projects.core.indexingApi) + implementation(projects.core.indexingCore) + implementation(projects.core.lspApi) + implementation(projects.core.projects) + implementation(projects.core.resources) + implementation(projects.editor.impl) + implementation(projects.editor.lexers) + implementation(projects.event.eventbus) + implementation(projects.event.eventbusAndroid) + implementation(projects.event.eventbusEvents) + implementation(projects.java.javacServices) + implementation(projects.java.lspSetup) + implementation(projects.java.lsp) + implementation(projects.logging.idestats) + implementation(projects.logging.logsender) + implementation(projects.termux.application) + implementation(projects.termux.view) + implementation(projects.termux.emulator) + implementation(projects.termux.shared) + implementation(projects.tooling.api) + implementation(projects.tooling.pluginConfig) + implementation(projects.utilities.buildInfo) + implementation(projects.utilities.lookup) + implementation(projects.utilities.preferences) + implementation(projects.utilities.templatesApi) + implementation(projects.utilities.templatesImpl) + implementation(projects.utilities.treeview) + implementation(projects.utilities.uidesigner) + implementation(projects.utilities.xmlInflater) + implementation(projects.xml.aaptcompiler) + implementation(projects.xml.lsp) + implementation(projects.xml.utils) + + // This is to build the tooling-api-impl project before the app is built + // So we always copy the latest JAR file to assets + compileOnly(projects.tooling.impl) + } From d6e2924c3c474804c9bf64cbe7c8491af5d48807 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 14:03:28 +0530 Subject: [PATCH 36/66] Rename workflow and update build steps for APKs --- .github/workflows/asm_build.yml | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 3a87cbf97..96ee99ce7 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -1,17 +1,18 @@ -name: Build Release APK +name: Build Android Code Studio on: push: - branches: [ dev, main, release/** ] + branches: [ "main", "dev", "release/**" ] workflow_dispatch: jobs: - build_release_apk: + build_all_apks: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - name: Checkout Repository + uses: actions/checkout@v4 with: - submodules: recursive + submodules: 'recursive' fetch-depth: 0 - name: Set up JDK 17 @@ -20,18 +21,18 @@ jobs: java-version: '17' distribution: 'adopt' - - name: Create local.properties - run: | - echo "signing.storePassword=${{ secrets.STORE_PASSWORD }}" >> local.properties - echo "signing.keyAlias=${{ secrets.KEY_ALIAS }}" >> local.properties - echo "signing.keyPassword=${{ secrets.KEY_PASSWORD }}" >> local.properties + - name: Make Gradle Executable + run: chmod +x ./gradlew - - name: Build release APK + - name: Build All Release APKs run: ./gradlew :core:app:assembleRelease + env: + SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - - name: Upload Artifacts + - name: Upload All APKs uses: actions/upload-artifact@v4 with: - name: release-apks - path: core/app/build/outputs/apk/release/android-code-studio-*.apk - if: always() + name: android-code-studio-apks + path: core/app/build/outputs/apk/release/*.apk From b4a3f829f8bdb58aeaf7bdd51649f06784faa1e5 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 14:30:11 +0530 Subject: [PATCH 37/66] Add Gradle publish workflow for GitHub Packages This workflow builds a package using Gradle and publishes it to GitHub Packages upon release creation. --- .github/workflows/gradle-publish.yml | 44 ++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .github/workflows/gradle-publish.yml diff --git a/.github/workflows/gradle-publish.yml b/.github/workflows/gradle-publish.yml new file mode 100644 index 000000000..20d17dc3b --- /dev/null +++ b/.github/workflows/gradle-publish.yml @@ -0,0 +1,44 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. +# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created +# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle + +name: Gradle Package + +on: + release: + types: [created] + +jobs: + build: + + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + server-id: github # Value of the distributionManagement/repository/id field of the pom.xml + settings-path: ${{ github.workspace }} # location for the settings.xml file + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 + + - name: Build with Gradle + run: ./gradlew build + + # The USERNAME and TOKEN need to correspond to the credentials environment variables used in + # the publishing section of your build.gradle + - name: Publish to GitHub Packages + run: ./gradlew publish + env: + USERNAME: ${{ github.actor }} + TOKEN: ${{ secrets.GITHUB_TOKEN }} From 3d956d7f2989ef636bf58678a4aa92636099ff0e Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 14:32:01 +0530 Subject: [PATCH 38/66] Refactor Gradle publish workflow for APK release Updated workflow to build and publish APK on release creation. --- .github/workflows/gradle-publish.yml | 41 +++++++++++----------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/.github/workflows/gradle-publish.yml b/.github/workflows/gradle-publish.yml index 20d17dc3b..4cb8b08d9 100644 --- a/.github/workflows/gradle-publish.yml +++ b/.github/workflows/gradle-publish.yml @@ -1,44 +1,35 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. -# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created -# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle - -name: Gradle Package +name: Build and Publish on: release: types: [created] + workflow_dispatch: jobs: - build: - + build_and_release: runs-on: ubuntu-latest permissions: - contents: read + contents: write # Artifact upload ke liye zaruri packages: write - steps: - uses: actions/checkout@v4 + - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - server-id: github # Value of the distributionManagement/repository/id field of the pom.xml - settings-path: ${{ github.workspace }} # location for the settings.xml file - - name: Setup Gradle - uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 - - - name: Build with Gradle - run: ./gradlew build + - name: Build and Assemble APK + run: ./gradlew :core:app:assembleRelease + env: + SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - # The USERNAME and TOKEN need to correspond to the credentials environment variables used in - # the publishing section of your build.gradle - - name: Publish to GitHub Packages - run: ./gradlew publish + - name: Upload APK to Release + uses: softprops/action-gh-release@v1 + with: + files: core/app/build/outputs/apk/release/*.apk env: - USERNAME: ${{ github.actor }} - TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 7627bc9ff7e8a75c111a92bb22e15174f3e23e35 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 14:54:18 +0530 Subject: [PATCH 39/66] Delete .github/workflows/gradle-publish.yml --- .github/workflows/gradle-publish.yml | 35 ---------------------------- 1 file changed, 35 deletions(-) delete mode 100644 .github/workflows/gradle-publish.yml diff --git a/.github/workflows/gradle-publish.yml b/.github/workflows/gradle-publish.yml deleted file mode 100644 index 4cb8b08d9..000000000 --- a/.github/workflows/gradle-publish.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Build and Publish - -on: - release: - types: [created] - workflow_dispatch: - -jobs: - build_and_release: - runs-on: ubuntu-latest - permissions: - contents: write # Artifact upload ke liye zaruri - packages: write - steps: - - uses: actions/checkout@v4 - - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - java-version: '17' - distribution: 'temurin' - - - name: Build and Assemble APK - run: ./gradlew :core:app:assembleRelease - env: - SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }} - KEY_ALIAS: ${{ secrets.KEY_ALIAS }} - KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - - - name: Upload APK to Release - uses: softprops/action-gh-release@v1 - with: - files: core/app/build/outputs/apk/release/*.apk - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From b719c29e7b6af4ee194c7533e83c5939dcedc011 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 14:58:12 +0530 Subject: [PATCH 40/66] Refactor GitHub Actions workflow for APK build --- .github/workflows/asm_build.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 96ee99ce7..e71ae73d8 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -2,14 +2,14 @@ name: Build Android Code Studio on: push: - branches: [ "main", "dev", "release/**" ] - workflow_dispatch: + branches: [ "main", "dev" ] + workflow_dispatch: { } jobs: - build_all_apks: + build_apk: runs-on: ubuntu-latest steps: - - name: Checkout Repository + - name: Checkout Code uses: actions/checkout@v4 with: submodules: 'recursive' @@ -24,15 +24,15 @@ jobs: - name: Make Gradle Executable run: chmod +x ./gradlew - - name: Build All Release APKs + - name: Build APK (Release) run: ./gradlew :core:app:assembleRelease env: SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }} - KEY_ALIAS: ${{ secrets.KEY_ALIAS }} - KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }} - - name: Upload All APKs + - name: Upload Artifacts uses: actions/upload-artifact@v4 with: - name: android-code-studio-apks + name: android-code-studio-apk path: core/app/build/outputs/apk/release/*.apk + if: always() From c04ea69736763de08523b4837ffe1fc70c496445 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 15:31:14 +0530 Subject: [PATCH 41/66] Refactor GitHub Actions workflow for APK build --- .github/workflows/asm_build.yml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index e71ae73d8..7efaee3d0 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -6,30 +6,40 @@ on: workflow_dispatch: { } jobs: - build_apk: + build: runs-on: ubuntu-latest steps: + # Step 1: Repo aur Submodules download karna - name: Checkout Code uses: actions/checkout@v4 with: submodules: 'recursive' fetch-depth: 0 + # Step 2: Java Setup - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'adopt' - - name: Make Gradle Executable - run: chmod +x ./gradlew + # Step 3: Gradle Sync aur Caches ko Refresh karna + # Yahan hum 'clean' command chala rahe hain jo puraana sab kuch delete kar dega + - name: Gradle Clean and Sync + run: | + chmod +x ./gradlew + ./gradlew clean + ./gradlew build --refresh-dependencies + # Step 4: Final APK Build (Release) - name: Build APK (Release) run: ./gradlew :core:app:assembleRelease env: SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }} SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }} + KEY_ALIAS: "AndroidCS" + # Step 5: APK upload karna - name: Upload Artifacts uses: actions/upload-artifact@v4 with: From 5a23b2f39676748ff5c93a3f04820cd2892231e5 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 16:05:44 +0530 Subject: [PATCH 42/66] Refactor GitHub Actions workflow for APK build --- .github/workflows/asm_build.yml | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 7efaee3d0..7c57cc983 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -9,38 +9,37 @@ jobs: build: runs-on: ubuntu-latest steps: - # Step 1: Repo aur Submodules download karna + # Step 1: Forceful Checkout - name: Checkout Code uses: actions/checkout@v4 with: - submodules: 'recursive' - fetch-depth: 0 + submodules: false # Pehle hum ise 'false' karenge taki conflict na ho - # Step 2: Java Setup + # Step 2: Forceful Submodule Sync + - name: Force Init Submodules + run: | + git submodule deinit -f . + git submodule update --init --recursive --force + + # Step 3: Setup Java - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'adopt' - # Step 3: Gradle Sync aur Caches ko Refresh karna - # Yahan hum 'clean' command chala rahe hain jo puraana sab kuch delete kar dega - - name: Gradle Clean and Sync + # Step 4: Build process + - name: Build APK run: | chmod +x ./gradlew - ./gradlew clean - ./gradlew build --refresh-dependencies - - # Step 4: Final APK Build (Release) - - name: Build APK (Release) - run: ./gradlew :core:app:assembleRelease + ./gradlew :core:app:assembleRelease env: SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }} SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }} KEY_ALIAS: "AndroidCS" - # Step 5: APK upload karna - - name: Upload Artifacts + # Step 5: Upload Artifacts + - name: Upload APK uses: actions/upload-artifact@v4 with: name: android-code-studio-apk From c947b9c0f408b63c85fa0b9725366b3f485458bd Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 16:22:28 +0530 Subject: [PATCH 43/66] Refactor GitHub Actions workflow for clarity and steps --- .github/workflows/asm_build.yml | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 7c57cc983..159edda48 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -9,26 +9,23 @@ jobs: build: runs-on: ubuntu-latest steps: - # Step 1: Forceful Checkout + # Step 1: Default checkout ko band karke, manual git sync karenge - name: Checkout Code - uses: actions/checkout@v4 - with: - submodules: false # Pehle hum ise 'false' karenge taki conflict na ho - - # Step 2: Forceful Submodule Sync - - name: Force Init Submodules run: | - git submodule deinit -f . + git init + git remote add origin https://github.com/${{ github.repository }} + git fetch origin ${{ github.ref }} + git reset --hard FETCH_HEAD git submodule update --init --recursive --force - # Step 3: Setup Java + # Step 2: Java Setup - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'adopt' - # Step 4: Build process + # Step 3: Gradle Build - name: Build APK run: | chmod +x ./gradlew @@ -38,7 +35,7 @@ jobs: SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }} KEY_ALIAS: "AndroidCS" - # Step 5: Upload Artifacts + # Step 4: Upload - name: Upload APK uses: actions/upload-artifact@v4 with: From 5ea1e3328f6e11205ba15537e8df886c9e44f9b7 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 16:48:57 +0530 Subject: [PATCH 44/66] Remove title_build_variants string from Arabic resources --- core/resources/src/main/res/values-ar-rSA/strings.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/core/resources/src/main/res/values-ar-rSA/strings.xml b/core/resources/src/main/res/values-ar-rSA/strings.xml index 2c9746c90..32c0edde3 100644 --- a/core/resources/src/main/res/values-ar-rSA/strings.xml +++ b/core/resources/src/main/res/values-ar-rSA/strings.xml @@ -521,7 +521,6 @@ خطأ في تنزيل APK خطأ في تثبيت APK خطأ في فتح المتصفح - متغيرات البناء تطبيق تجاهل فشل جلب متغيرات البناء From 77392c22415834800274726533b37fc17366786f Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 17:10:04 +0530 Subject: [PATCH 45/66] Update GitHub Actions workflow for debug APK build --- .github/workflows/asm_build.yml | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 159edda48..ba34e1d56 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -9,7 +9,6 @@ jobs: build: runs-on: ubuntu-latest steps: - # Step 1: Default checkout ko band karke, manual git sync karenge - name: Checkout Code run: | git init @@ -18,27 +17,20 @@ jobs: git reset --hard FETCH_HEAD git submodule update --init --recursive --force - # Step 2: Java Setup - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'adopt' - # Step 3: Gradle Build - - name: Build APK + - name: Build Debug APK run: | chmod +x ./gradlew - ./gradlew :core:app:assembleRelease - env: - SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }} - SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }} - KEY_ALIAS: "AndroidCS" + ./gradlew :core:app:assembleDebug - # Step 4: Upload - name: Upload APK uses: actions/upload-artifact@v4 with: - name: android-code-studio-apk - path: core/app/build/outputs/apk/release/*.apk + name: android-code-studio-debug-apk + path: core/app/build/outputs/apk/debug/*.apk if: always() From 412899749dfe6e18cd6c91edfda9dd433ae32954 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 17:25:35 +0530 Subject: [PATCH 46/66] Remove 'Apply' string from Arabic resources --- core/resources/src/main/res/values-ar-rSA/strings.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/core/resources/src/main/res/values-ar-rSA/strings.xml b/core/resources/src/main/res/values-ar-rSA/strings.xml index 32c0edde3..a6bde2a0d 100644 --- a/core/resources/src/main/res/values-ar-rSA/strings.xml +++ b/core/resources/src/main/res/values-ar-rSA/strings.xml @@ -413,7 +413,6 @@ تمكين مرسل السجلات. عند التعطيل، لن يتم عرض سجلات التطبيقات في AndroidIDE. Build variants - Apply Discard Failed to fetch build variants Choose application From 953f81ce01e55a6642927b996b244f1869821883 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 17:32:47 +0530 Subject: [PATCH 47/66] Clean up strings.xml and add new resources Removed commented sections for clarity and added new string resources for contributors and updates. --- .../src/main/res/values-ar-rSA/strings.xml | 176 ++++++------------ 1 file changed, 52 insertions(+), 124 deletions(-) diff --git a/core/resources/src/main/res/values-ar-rSA/strings.xml b/core/resources/src/main/res/values-ar-rSA/strings.xml index a6bde2a0d..2b82de8fd 100644 --- a/core/resources/src/main/res/values-ar-rSA/strings.xml +++ b/core/resources/src/main/res/values-ar-rSA/strings.xml @@ -1,6 +1,5 @@ - نسخ المزيد… البحث عن نص @@ -19,7 +18,6 @@ إعادة تعيين سجلات التطبيق سجلات IDE - البدء غير قادر على إجراء إصلاح سريع تنفيذ إجراء الكود… @@ -29,13 +27,11 @@ العثور على مراجع… العثور على تعريف… التعريف غير موجود - لم يتم العثور على مراجع التشخيصات فشل التثبيت الملف المأخوذ ليس مجلدا! رجاءا انتظر لحظة… - هذا الجهاز غير مدعوم أنت تستخدم نسخة %1$s من AndroidIDE على جهاز يعمل فقط بـ %2$s. هذه التكوينات غير معتمدة. يرجى تثبيت نسخة %2$s من AndroidIDE. مسح المخرجات @@ -46,7 +42,6 @@ التحضير للبناء. قد يستغرق البناء الأول ما يصل إلى 10-15 دقيقة! عذرا، Gradle wrapwrapper غير متوفر!\nجاري تثبيت واحدة افتراضية. سيتم تنزيل Gradle v7.4 إذا لزم الأمر. تشغيل - أول بناء هذه هي المرة الأولى التي يتم فيها البناء بعد تثبيت AndroidIDE. يستغرق البناء الأول عادة وقتاً بينما يقوم تنزيل Gradle بتحميل جميع التبعيات والإضافات. قد تستغرق هذه العملية حوالي 10 - 15 دقيقة. لكن هذا يعتمد كلياً على اتصال الشبكة الخاصة بك.\n\nالرجاء التحلي بالصبر… إنشاء مشروع @@ -62,7 +57,6 @@ إنشاء مشروع جديد فتح مشروع موجود إغلاق المشروع - هل أنت متأكد من رغبتك في إغلاق هذا المشروع؟ سيتم إيقاف جميع ديمونات Gradle التي بدأت بعد إغلاق هذا المشروع. المشروع الأساسي مشروع فارغ @@ -71,7 +65,6 @@ نشاط التبويب لا يوجد نشاط دون AndroidX - حفظ البحث البحث في الملف @@ -131,11 +124,9 @@ واجهة مستخدم (انترفيس) تعدد (Enum) فشل في إدراج ملفات المشروع! - فتح بواسطة... تراجع إعادة - حجم خط المحرر حول AndroidIDE مسح جميع ذاكرة التخزين المؤقت @@ -165,8 +156,6 @@ سِجل التغييرات الرجاء اختيار حجم الخط الافتراضي للمحرر : هذا الأمر سيقوم بحذف مسار/مجلد البيانات المؤقتة الذي تم أنشاءه بواسطة Gradle. إذا حذفته، قد تتأخر عملية البناء نسبياً كما سيتم تنزيل الملفات المطلوبة بواسطة Gradle مرة أخرى.\n\nهل أنت متيقِّن من حذف التخزين المؤقت؟ - - معاينة التخطيط حذف يرجى التأكيد @@ -228,8 +217,6 @@ السلطة \'\'%s\' غير مسموح بها استخدام مكتبة ICU استخدم مكتبة ICU لاستخدام استعادة حواف الكلمات للنقر المزدوج والضغط المطول على اختيار الكلمات. - - مرر لأعلى لعرض @@مخرجات البناء@@ استخدام علامة التبويب الناعمة اختر ما إذا كان سيتم استخدام المسافات بدلاً من حرف التبويب (\\t). @@ -338,7 +325,6 @@ التأكيد سيتم تشغيل المهام التالية، بالترتيب. انقر فوق الزر \'تشغيل\' مرة أخرى للتأكيد.\n\n%1$s جارٍ تحميل المهام... - نسخ نسخ مشروع Git رابط المشروع @@ -413,114 +399,6 @@ تمكين مرسل السجلات. عند التعطيل، لن يتم عرض سجلات التطبيقات في AndroidIDE. Build variants - Discard - Failed to fetch build variants - Choose application - Selected build variant not found - Disconnect log senders - Begin long select - Sticky scroll - Show the current scope at the top while scrolling the editor. - Launch app after installation - If enabled, the IDE will (without confirmation) launch the application right after it is installed. - Run options - Cannot run application. Unable to determine package name. - Cannot run application. No application modules found in project. - Launch app - Experimental - You are using %1$s variant of AndroidIDE on a %2$s device. This configuration may work, but it\'ll result in reduced performance and possible security vulnerabilities. Please avoid using this configuration whenever possible. - Pin line numbers - Whether the editor should pin line number panel when scrolled horizontally. - Blue Wave - Sunny Glow - Material You - Language - Select a language for AndroidIDE. - System Default - Project directory is not accessible - Selected file is not a directory - Project directory does not exist - A file save operation is already in progress! - SDK Installation - Install the development tools - The development tools must be installed for the IDE to work. Clicking the done button will open terminal to install the tools. To install, follow the instructions here.

Or read the documentation]]>.
- Welcome - Learn, build, launch. All on your Android. - Grant - Storage - Required to access project files. - Allow installing APKs built with AndroidIDE. - Install packages - Permissions - AndroidIDE requires the following permissions - Please grant the permissions to continue. - It seems you\'re offline. Check your internet connection. - Heads up! You\'re using cellular data. - Heads up! You\'re on a metered network. - Disable background data restriction to avoid installation failures. - Unable to create terminal session - Automatic installation - Manual installation - Android SDK version - JDK version - Install Git - Install OpenSSH - Cannot create session. New sessions are disabled! - Install location error - Unsupported user - Socials - Contributors - Top community contributors. - GitHub Contributors - Crowdin Translators - Misc - Contribute - It\'s not just an IDE, it\'s a community. Contribute code, ideas, and passion to AndroidIDE. - No application available to handle intent. - Open source licenses - View open source licenses. - JDK version - Currently selected: %1$s (requires restart if changed) - لا توجد تحديثات متاحة - فشل التحقق من وجود تحديثات - فشل تحميل سجل التغييرات - خطأ في جلب سجل التغييرات - لم يتم العثور على تحديث متوافق لجهازك - فشل التنزيل - فشل التنزيل: %s - فشل التثبيت - لا يمكن فتح المتصفح - تحديث متاح - تنزيل - عرض في المتصفح - لاحقًا - إلغاء - جاري تنزيل التحديث - الإصدار الجديد %s متاح! - بنية الجهاز: %s - رمز الإصدار المستهدف: %d - المتغيرات المتاحة: %s - جاري التحضير للتنزيل... - %d ميجابايت / %d ميجابايت - يرجى تمكين 'تثبيت التطبيقات غير المعروفة' والمحاولة مرة أخرى - خطأ HTTP: %d - خطأ في جلب معلومات التحديث - خطأ في تحليل معلومات التحديث - الإصدار الحالي: %d، الإصدار المتاح: %d للبنية: %s - لم يتم العثور على متغير متوافق للبنية: %s - الحزمة غير موجودة - ABIs المدعومة: %s - لم يتم العثور على بنية معروفة، سيتم الرجوع إلى armeabi-v7a - بنية الجهاز: %s - لم يتم العثور على تطابق تام لـ %s، جاري تجربة البدائل - استخدام armeabi-v7a كبديل لـ arm64-v8a - استخدام x86 كبديل لـ x86_64 - لم يتم العثور على تطابق تام للبنية، سيتم استخدام أول متغير متاح - خطأ في تنزيل APK - خطأ في تنزيل APK - خطأ في تثبيت APK - خطأ في فتح المتصفح - تطبيق تجاهل فشل جلب متغيرات البناء اختر التطبيق @@ -571,6 +449,56 @@ لا يمكن إنشاء جلسة. الجلسات الجديدة معطلة! خطأ في موقع التثبيت مستخدم غير مدعوم - - + وسائل التواصل + المساهمون + أهم المساهمين في المجتمع. + مساهمو GitHub + مترجمو Crowdin + متنوع + ساهم + إنه ليس مجرد IDE، إنه مجتمع. ساهم بالكود والأفكار والشغف في AndroidIDE. + لا يوجد تطبيق متاح للتعامل مع هذا الطلب. + تراخيص المصادر المفتوحة + عرض تراخيص المصادر المفتوحة. + إصدار JDK + الإصدار المحدد حالياً: %1$s (يتطلب إعادة التشغيل في حال التغيير) + لا توجد تحديثات متاحة + فشل التحقق من وجود تحديثات + فشل تحميل سجل التغييرات + خطأ في جلب سجل التغييرات + لم يتم العثور على تحديث متوافق لجهازك + فشل التنزيل + فشل التنزيل: %s + فشل التثبيت + لا يمكن فتح المتصفح + تحديث متاح + تنزيل + عرض في المتصفح + لاحقًا + إلغاء + جاري تنزيل التحديث + الإصدار الجديد %s متاح! + بنية الجهاز: %s + رمز الإصدار المستهدف: %d + المتغيرات المتاحة: %s + جاري التحضير للتنزيل... + %d ميجابايت / %d ميجابايت + يرجى تمكين 'تثبيت التطبيقات غير المعروفة' والمحاولة مرة أخرى + خطأ HTTP: %d + خطأ في جلب معلومات التحديث + خطأ في تحليل معلومات التحديث + الإصدار الحالي: %d، الإصدار المتاح: %d للبنية: %s + لم يتم العثور على متغير متوافق للبنية: %s + الحزمة غير موجودة + ABIs المدعومة: %s + لم يتم العثور على بنية معروفة، سيتم الرجوع إلى armeabi-v7a + بنية الجهاز: %s + لم يتم العثور على تطابق تام لـ %s، جاري تجربة البدائل + استخدام armeabi-v7a كبديل لـ arm64-v8a + استخدام x86 كبديل لـ x86_64 + لم يتم العثور على تطابق تام للبنية، سيتم استخدام أول متغير متاح + خطأ في تنزيل APK + خطأ في تنزيل APK + خطأ في تثبيت APK + خطأ في فتح المتصفح
From 5461d92e610045a1184ec7c49be380dfc9eea48b Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 18:00:30 +0530 Subject: [PATCH 48/66] Update strings.xml --- .../src/main/res/values-ar-rSA/strings.xml | 1022 +++++++++-------- 1 file changed, 521 insertions(+), 501 deletions(-) diff --git a/core/resources/src/main/res/values-ar-rSA/strings.xml b/core/resources/src/main/res/values-ar-rSA/strings.xml index 2b82de8fd..17430aa2c 100644 --- a/core/resources/src/main/res/values-ar-rSA/strings.xml +++ b/core/resources/src/main/res/values-ar-rSA/strings.xml @@ -1,504 +1,524 @@ - نسخ - المزيد… - البحث عن نص - البريد الإلكتروني - الموقع الإلكتروني - أندرويد %1$s لـ %2$s - ببساطة، منصة بناء تطبيقات للاندرويد - فشل في استخراج اسم الحزمة! - إذا كنت تواجه مشكلات أثناء استخدام AndroidIDE أو مع بناء التطبيقات ، يمكنك الانضمام إلى مجموعة التيليغرام وطلب المساعدة هناك.\n\nيمكنك أيضًا إرسال ملاحظات متضمنة على بريدنا الإلكتروني. - تحتاج للمساعدة؟ - إعدادات IDE - المناقشات على التيليغرام - قناة التيليغرام الرسمية - لا يوجد بيانات - التيرمنال - إعادة تعيين - سجلات التطبيق - سجلات IDE - البدء - غير قادر على إجراء إصلاح سريع - تنفيذ إجراء الكود… - منذ API %d - تمت إزالته في API %d - تم إهماله في API %d - العثور على مراجع… - العثور على تعريف… - التعريف غير موجود - لم يتم العثور على مراجع - التشخيصات - فشل التثبيت - الملف المأخوذ ليس مجلدا! - رجاءا انتظر لحظة… - هذا الجهاز غير مدعوم - أنت تستخدم نسخة %1$s من AndroidIDE على جهاز يعمل فقط بـ %2$s. هذه التكوينات غير معتمدة. يرجى تثبيت نسخة %2$s من AndroidIDE. - مسح المخرجات - مخرجات البناء - تشغيل سريع - تم تغيير ملفات Gradle. الرجاء إعادة بناء المشروع الخاص بك لمزامنة الاعتمادات والتهيئات. - جاري الإعداد - التحضير للبناء. قد يستغرق البناء الأول ما يصل إلى 10-15 دقيقة! - عذرا، Gradle wrapwrapper غير متوفر!\nجاري تثبيت واحدة افتراضية. سيتم تنزيل Gradle v7.4 إذا لزم الأمر. - تشغيل - أول بناء - هذه هي المرة الأولى التي يتم فيها البناء بعد تثبيت AndroidIDE. يستغرق البناء الأول عادة وقتاً بينما يقوم تنزيل Gradle بتحميل جميع التبعيات والإضافات. قد تستغرق هذه العملية حوالي 10 - 15 دقيقة. لكن هذا يعتمد كلياً على اتصال الشبكة الخاصة بك.\n\nالرجاء التحلي بالصبر… - إنشاء مشروع - الحد الأدنى من SDK - مشروع جديد - اسم الحزمة - اسم التطبيق - ابدأ مشروعك الرائع الجديد! - فتح آخر مشروع؟ - هل تريدني أن أفتح آخر مشروع مفتوح؟ المشروع المفتوح كان:\n%s - غلق هذا المشروع - آخر مشروع فتح غير موجود! - إنشاء مشروع جديد - فتح مشروع موجود - إغلاق المشروع - هل أنت متأكد من رغبتك في إغلاق هذا المشروع؟ سيتم إيقاف جميع ديمونات Gradle التي بدأت بعد إغلاق هذا المشروع. - المشروع الأساسي - مشروع فارغ - مشروع درج التنقل - نشاط التنقل السفلي - نشاط التبويب - لا يوجد نشاط - دون AndroidX - حفظ - البحث - البحث في الملف - البحث في المشروع - بحث في الوحدات البرمجية - لا توجد وحدات في المشروع - تصفية امتدادات الملف (اختياري) - مفصولة بـ \'|\' - الرجاء إدخال نص - حدد وحدات للبحث - البحث في المشروع، يرجى الانتظار… - نتائج البحث - أُنشئ المشروع بنجاح! - فشل إنشاء المشروع - فشل في إنشاء المجلد - فشل في إنشاء ملف - فشل إنشاء ملف التخطيط! - تم إنشاء المجلد بنجاح - تم إنشاء الملف بنجاح - المجلد موجود بالفعل - الملف موجود بالفعل! - مِلَفّ التخطيط موجود فعلًا! - اسم غير صحيح! - إنشاء - إذا كان المسار يحتوي على فاصل الملفات (\'/\')، فسيتم إنشاء الدلائل المطلوبة (الأم) إذا لم تكن موجودة. - اسم المجلد - إسم الملف - اسم جديد - ملف جديد - إنشاء مِلَفّ تخطيط - كلاس جافا جديد - مصدر XML جديد - مجلد جديد - تأكيد الحذف - هل أنت متأكد من أنك تريد حذف:\n%s؟ - تم النسخ بنجاح - أدخل اسم جديد للملف/المجلد. - تمت إعادة التسمية بنجاح - لا يمكن إعادة تسمية الملف. - تم الحذف بنجاح - غير قادر على حذف الملف! - نسخ المسار - إعادة تسمية - حذف - إغلاق الكل - إغلاق الأخرى - أغلق هذا التبويب - تم حفظ جميع الملفات. - فشل حفظ الملفات - الوجهة: %s/ - مورد رسم - الواجهة - القائمة - أخرى - كلاس - نشاط (واجهة) - واجهة مستخدم (انترفيس) - تعدد (Enum) - فشل في إدراج ملفات المشروع! - فتح بواسطة... - تراجع - إعادة - حجم خط المحرر - حول AndroidIDE - مسح جميع ذاكرة التخزين المؤقت - مسح دليل ذاكرة التخزين المؤقت. سيؤدي هذا إلى حذف جميع التبعيات التي تم تحميلها بواسطة Gradle. سيتم تحميل الملفات المطلوبة مرة أخرى في النسخة التالية. - أوامر Gradle الإضافية - اختر أوامر إضافية سيتم إضافتها أثناء تنفيذ كل مهمة - حجم الخط - حجم خط المحرر - أعلام الرسوم غير المطبوعة - اختر ما هي الأحرف غير القابلة للطباعة التي يجب أن يرسمها المحرر - التفاف النص - استخدام تغليف الكلمات للمحرر - تمكين المكبر - تكبير النص في موضع المؤشر أثناء اختيار النص في المحرر - المحرر - بناء وتشغيل - فتح آخر مشروع؟ - إذا تم تحديده، فسيتذكر IDE آخر مشروع تم فتحه وسيتم إعادة فتحه عند بدء التشغيل التالي. - تأكيد فتح المشروع - اسأل قبل فتح آخر مشروع مفتوح. - استخدام shell النظام في الـterminal - إذا تم تحديده، سيتم استخدام \'/system/bin/sh\' في التيرمنال. - عام - حجم التبويبة - حدد عدد المسافات لـ TAB - الإعدادات - سِجل التغييرات - الرجاء اختيار حجم الخط الافتراضي للمحرر : - هذا الأمر سيقوم بحذف مسار/مجلد البيانات المؤقتة الذي تم أنشاءه بواسطة Gradle. إذا حذفته، قد تتأخر عملية البناء نسبياً كما سيتم تنزيل الملفات المطلوبة بواسطة Gradle مرة أخرى.\n\nهل أنت متيقِّن من حذف التخزين المؤقت؟ - معاينة التخطيط - حذف - يرجى التأكيد - هل أنت متأكد؟ - لم يتم إضافة أي عرض. انقر للإضافة. - فشل في إنشاء كود XML - إنشاء كود XML - مرر لأعلى للإخراج والسجلات والمزيد. - تحطم AndroidIDE - الرجاء فتح مشكلة على github مع المكونات التالية: - انقر على الزر أدناه لنسخ السجل وفتح صفحة المشكلات. - نسخ وتقرير - الترجمات - توسيع التحديد - مطابقة المكملات في حالة الأحرف الصغيرة - الشائعة - الملفات غير المحفوظة - لم يتم حفظ بعض الملفات. هل ترغب في حفظها قبل الإغلاق؟ الملفات غير المحفوظة هي: \n%s - حفظ قبل إغلاق الملفات - حفظ الملفات قبل إغلاقها. هذه ميزة تجريبية. من المتوقع أن تحفظ الملفات بنفسك. - إذا تم تفعيله، فإن كتابة حالة صغيرة أو أحرف أعلى سوف تقترح أسماء الكلاس بالإضافة إلى أعضاء النطاق. - ميزات الخط - تمكين/تعطيل ميزات الخط - نعم - لا - إضافة سمة - درج الملفات - قيمة السمة - تنسيق الكود - استخدام تنسيق الكود بنمط جافا Google - استخدم إعدادات تنسيق الكود بنمط جافا لـ Google لتنسيق كود مصدر جافا. - علامة كلمة المرور المرئية - استخدم لعلم نوع إدخال كلمة المرور المرئية في المحرر. هذا يضمن عدم اقتراح أي اقتراحات بواسطة لوحة المفاتيح الناعمة. - السابق - تم بدء خدمة بناء Gradle - خدمة بناء Gradle - إلغاء البناء - تهيئة المشروع - تم تهيئة المشروع - فشل تهيئة المشروع - لم يتم تهيئة المشروع - الاستبدالات - مزامنة المشروع - موقع الحفظ - لغة المشروع - التالي - خروج - تثبيت Gradle المخصصة - حدد تثبيت Gradle مخصص لاستخدامه في البناء. سيقوم بتغيير الإصدار المحدد في gradle-wrapper.properties. - مسار تثبيت Gradle - اتركه فارغاً لاستخدام Gradle wrapper. - لا يوجد بناء قيد التقدم - البناء جارٍ... - فشل البناء. راجع إخراج البناء لمزيد من التفاصيل. - تم البناء بنجاح - فشل الحصول على نص من المحرر - البيانات غير صالحة للقصد. - حدد مجلد من وحدة التخزين الرئيسية - السلطة \'\'%s\' غير مسموح بها - استخدام مكتبة ICU - استخدم مكتبة ICU لاستخدام استعادة حواف الكلمات للنقر المزدوج والضغط المطول على اختيار الكلمات. - مرر لأعلى لعرض @@مخرجات البناء@@ - استخدام علامة التبويب الناعمة - اختر ما إذا كان سيتم استخدام المسافات بدلاً من حرف التبويب (\\t). - تبرع - إرشادات الإستخدام - إغلاق - تجاهل الحالة - استخدم التعبير النصي (regex) - تكوين بناء Gradle. - تهيئة - عن التطبيق - AndroidIDE مفتوح المصدر! - اشترك للحصول على أحدث تحديثات. - مناقشة الميزات، الأخطاء والتحسينات هنا. - ما الجديد في هذا الإصدار؟ - المزيد عن AndroidIDE. - إعدادات IDE العامة. - تهيئة المحرر. - تقليم السطر الجديد النهائي - إدراج سطر جديد نهائي - إزالة سطر فارغ إضافي في نهاية الملف - إدراج سطر جديد فارغ في نهاية الملف. - تقسيم السمات - تنسيق السمات على سطر جديد - الانضمام إلى خطوط CDATA - تطبيع المحتوى داخل CDATA. - تجميع (ربط) اسطر التعليق - تطبيع المحتوى داخل التعليقات. - تجميع (ربط) اسطر المحتوى - تطبيع المحتوى داخل العناصر. - المسافة قبل علامة إغلاق فارغة - إدراج مسافة بيضاء قبل وضع علامة إغلاق ذاتي بين قوسين نهائيين. - الحفاظ على المحتوى الفارغ - الحفاظ على المحتوى الفارغ داخل العناصر (المسافات البيضاء، الخطوط الجديدة، علامات التبويب، إلخ). - الحفاظ على فواصل الخط - الحفاظ على فواصل الخط بين السمات. - إغلاق الأقواس في الخط الجديد - ضع القوس المغلق على سطر جديد. - تقليم المسافة البيضاء - إزالة المسافات البيضاء إضافية في نهاية الخطوط. - أقصى عرض للسطر - الحد الأقصى لعدد الأحرف التي يجب أن تكون في السطر. - فصل حجم العوز للسمات - عدد المسافات المراد إضافتها لسمات التقسيم. - احتفظ بخطوط جديدة - • الحد الأقصى لعدد فترات التوقف المستمرة التي ينبغي الحفاظ عليها. - سلوك العناصر الفارغة - اختر سلوك التنسيق للعناصر الفارغة. - خيارات تنسيق XML - تهيئة تنسيق XML - استخدام خط مخصص - في حالة التمكين، سيتم استخدام الملف الموجود على \"/data/com.tom.rv2ide/files/home/.androidide/ui/font.ttf\" كخط محرر. - تثبيت APK... - هل تريد فتح التطبيق؟ - خدمة بناء AndroidIDE - رمز اللون Hex - انتقاء - إعداد أذونات قابلة للتنفيذ… - ربط %1$s بـ %2$s - استخراج مكتبات الرابط… - اسم الحزمة فارغ - اسم الحزمة غير صالح - اسم الحزمة طويل - لا يمكن أن يكون الرمز \'_\' أول حرف في شريحة الحزمة - لا يمكن أن يكون الرقم أول حرف في شريحة الحزمة - الحرف \"%1$s\" غير مسموح به في أسماء حزمة تطبيقات Android - يجب أن تحتوي الحزمة على فاصل \'.\' واحد على الأقل - استيراد الكلاس(ات) - إنشاء محدثات (setters)/مستخرجات (getters) - اضافة \'اطلاق خطأ\' - تعليق السطر - إنشاء الفويد الناقصة - تحويل إلى مكوّنات - إنشاء مولد كلاس (constructor) - اضافة الفويد الاساسية - حذف الكلاس - إزالة الفويد - إزالة اطلاقات الاخطاء غير المستخدم - قمع تحذير \'غير محدد\' - ازالة تعليق السطر - تحويل إلى شكل - اختر الحقول - لم يتم اختيار أي حقل. - لا توجد حقول - اعادة كتابة فويد الكلاس الاب - لم يتم اختيار أي حقل. - غير قادر على اعادة كتابة الفويد - غير قادر على إنشاء فويد محدثات و مستخرجات - حدد فويد لاعادة كتابتها - غير قادر على العثور على أي فويد يمكن اعادة كتابتها - الانتقال إلى التعريف - البحث عن مراجع - إنشاء toString() - إزالة الامبورت غير المستخدمة - تنظيم الاستيراد (امبورت) - غير قادر على إنشاء تطبيق toString() - toString() تم تجهيزها بالفعل - إنشاء مولد كلاس (constructor) مفقود - غير قادر على إنشاء المولد - المولد بنفس المعطيات (باراميتر) متوفر بالفعل - إستبدال - استبدال الكل - تشغيل المهام - البحث عن المهام… - الرجاء تحديد المهام لتشغيلها - التأكيد - سيتم تشغيل المهام التالية، بالترتيب. انقر فوق الزر \'تشغيل\' مرة أخرى للتأكيد.\n\n%1$s - جارٍ تحميل المهام... - نسخ - نسخ مشروع Git - رابط المشروع - نسخ مشروع Git... - تم نسخ مشروع Git بنجاح - فشل في استنساخ مشروع git - حدد سمة من القائمة أدناه - عرض التسلسل الهرمي للتخطيط - نظام الألوان - اختر مخطط الألوان لاستخدامه في المحرر - نمط واجهة المستخدم - اختر وضع واجهة المستخدم لـ IDE - فاتح - مظلم - اتبع النظام - سمة - اختر سمة لـ AndroidIDE (تتطلب إعادة التشغيل). - تهيئة المشروع - فشل التشغيل. يجب تثبيت التطبيق أولاً. - التشخيصات مفعلة - (تجريبي) ما إذا ينبغي تحليل ملفات مصدر جافا بحثا عن أخطاء أم لا. - إعادة تحميل أنظمة الألوان - فشل تشغيل مختار الملفات: %1$s - أداة خادم API غير متوفرة. تحقق من إخراج البناء وسجلات IDE للأخطاء. - حذف الأسطر الفارغة عند المسح - ما إذا كان على المحرر حذف الأسطر الفارغة عند المسح للخلف بضغطة واحدة أم لا. - حذف التاب عند المسح - عند تفعيلها، المحرر سيحذف الفراغات المساوية لعرض التاب (غالبا 4 فراغ) عند الضغط على مسح النص. - مزامنة - تجاهل التغييرات - أصلح الواردات (إمبورت) - لم يتم العثور على أسماء الكلاس - أي %1$s؟ - ربط بخدمة التسجيل - السماح لهذا التطبيق بربطه مع خدمة تسجيل اللوغ لـ AndroidIDE. هذا الامر مطلوب لـ AndroidIDE لقراءة السجلات (اللوغ) لهذا التطبيق. - اسم الإضافة - نوع الإضافة - أسم إضافة غير صالح - القيمة فارغة - الملف غير موجود - يجب أن يكون مسار إلى ملف - اسم الكلاس يحتوي على كلمات مفتاحية - يجب أن يكون المسار إلى مجلد - اسم ملف التخطيط غير صالح - تفاصيل المشروع غير صالحة - استخدام سكريبت كوتلن (.kts) لإنشاء ملفات بناء غرادل - الخصوصية - إحصائيات التطبيق - ساعدنا في تحسين التطبيق مِن خلال توفير إحصائيات مجهولة المصدر. سوف نجمع المعلومات الأساسية حول جهازك لإحصاءات قاعدة المستخدمين فقط. يمكن عرض البيانات الدقيقة التي تتم مشاركتها في التفضيلات. بياناتك آمنة ولا تتم مشاركتها مع خَدَمَات الجهات الخارجية. يمكنك إلغاء الاشتراك في أي وقت في تفضيلاتك. - إحصائيات الإستخدام المجهول - مجموعة الإحصائيات - السماح بجمع مقاييس التثبيت وإحصائيات الجهاز (مجهول تماما). - ايدي ‏مميز - الجهاز - إصدار التطبيق - البلد - بناء CPU - معاينة البيانات - اصدار الاندرويد - الاشتراك - خيارات المطور - خيارات تجريبية/تصحيح أخطاء AndroidIDE - تصحيح الأخطاء - تفريغ السجلات - تفريغ سجلات AndroidIDE إلى $HOME/.androidide/logs - قم بتشغيل النسخة التصحيحية (debug) من تطبيقك لعرض السجلات هنا. - تم تعطيل إرسال السجل. يمكنك تمكينه في الخيارات. - تظهر سجلات من بيئة التطوير المتكاملة هنا. - افتح ملف لعرض نتائج التشخيص الخاصة به - "قم ببناء التطبيق أو تشغيل مهمة لرؤية نتائج بنائه هنا. " - فشلت في تنفيذ الإجراء. - تمكين مرسل السجلات. - عند التعطيل، لن يتم عرض سجلات التطبيقات في AndroidIDE. - Build variants - تجاهل - فشل جلب متغيرات البناء - اختر التطبيق - لم يتم العثور على متغير البناء المحدد - فصل مرسلي السجلات - بدء التحديد الطويل - التمرير اللاصق - إظهار النطاق الحالي في الأعلى أثناء تمرير المحرر. - تشغيل التطبيق بعد التثبيت - إذا تم التمكين، سيقوم IDE (بدون تأكيد) بتشغيل التطبيق مباشرة بعد تثبيته. - خيارات التشغيل - لا يمكن تشغيل التطبيق. تعذر تحديد اسم الحزمة. - لا يمكن تشغيل التطبيق. لم يتم العثور على وحدات تطبيق في المشروع. - تشغيل التطبيق - تجريبي - تثبيت أرقام الأسطر - ما إذا كان يجب على المحرر تثبيت لوحة أرقام الأسطر عند التمرير أفقيًا. - موجة زرقاء - توهج مشمس - Material You - اللغة - افتراضي النظام - لا يمكن الوصول إلى دليل المشروع - الملف المحدد ليس دليلاً - دليل المشروع غير موجود - عملية حفظ ملف قيد التقدم بالفعل! - تثبيت SDK - تثبيت أدوات التطوير - أهلاً بك - تعلم، ابنِ، أطلق. كل ذلك على جهاز Android الخاص بك. - منح - التخزين - مطلوب للوصول إلى ملفات المشروع. - تثبيت الحزم - الأذونات - يرجى منح الأذونات للمتابعة. - يبدو أنك غير متصل بالإنترنت. تحقق من اتصالك بالإنترنت. - تنبيه! أنت تستخدم بيانات الجوال. - تنبيه! أنت على شبكة محدودة. - عطّل تقييد بيانات الخلفية لتجنب فشل التثبيت. - تعذر إنشاء جلسة طرفية - تثبيت تلقائي - تثبيت يدوي - إصدار Android SDK - إصدار JDK - تثبيت Git - تثبيت OpenSSH - لا يمكن إنشاء جلسة. الجلسات الجديدة معطلة! - خطأ في موقع التثبيت - مستخدم غير مدعوم - وسائل التواصل - المساهمون - أهم المساهمين في المجتمع. - مساهمو GitHub - مترجمو Crowdin - متنوع - ساهم - إنه ليس مجرد IDE، إنه مجتمع. ساهم بالكود والأفكار والشغف في AndroidIDE. - لا يوجد تطبيق متاح للتعامل مع هذا الطلب. - تراخيص المصادر المفتوحة - عرض تراخيص المصادر المفتوحة. - إصدار JDK - الإصدار المحدد حالياً: %1$s (يتطلب إعادة التشغيل في حال التغيير) - لا توجد تحديثات متاحة - فشل التحقق من وجود تحديثات - فشل تحميل سجل التغييرات - خطأ في جلب سجل التغييرات - لم يتم العثور على تحديث متوافق لجهازك - فشل التنزيل - فشل التنزيل: %s - فشل التثبيت - لا يمكن فتح المتصفح - تحديث متاح - تنزيل - عرض في المتصفح - لاحقًا - إلغاء - جاري تنزيل التحديث - الإصدار الجديد %s متاح! - بنية الجهاز: %s - رمز الإصدار المستهدف: %d - المتغيرات المتاحة: %s - جاري التحضير للتنزيل... - %d ميجابايت / %d ميجابايت - يرجى تمكين 'تثبيت التطبيقات غير المعروفة' والمحاولة مرة أخرى - خطأ HTTP: %d - خطأ في جلب معلومات التحديث - خطأ في تحليل معلومات التحديث - الإصدار الحالي: %d، الإصدار المتاح: %d للبنية: %s - لم يتم العثور على متغير متوافق للبنية: %s - الحزمة غير موجودة - ABIs المدعومة: %s - لم يتم العثور على بنية معروفة، سيتم الرجوع إلى armeabi-v7a - بنية الجهاز: %s - لم يتم العثور على تطابق تام لـ %s، جاري تجربة البدائل - استخدام armeabi-v7a كبديل لـ arm64-v8a - استخدام x86 كبديل لـ x86_64 - لم يتم العثور على تطابق تام للبنية، سيتم استخدام أول متغير متاح - خطأ في تنزيل APK - خطأ في تنزيل APK - خطأ في تثبيت APK - خطأ في فتح المتصفح + نسخ + المزيد… + البحث عن نص + البريد الإلكتروني + الموقع الإلكتروني + أندرويد %1$s لـ %2$s + ببساطة، منصة بناء تطبيقات للاندرويد + فشل في استخراج اسم الحزمة! + إذا كنت تواجه مشكلات أثناء استخدام AndroidIDE أو مع بناء التطبيقات ، يمكنك الانضمام إلى مجموعة التيليغرام وطلب المساعدة هناك.\n\nيمكنك أيضًا إرسال ملاحظات متضمنة على بريدنا الإلكتروني. + تحتاج للمساعدة؟ + إعدادات IDE + المناقشات على التيليغرام + قناة التيليغرام الرسمية + لا يوجد بيانات + التيرمنال + إعادة تعيين + سجلات التطبيق + سجلات IDE + + البدء + غير قادر على إجراء إصلاح سريع + تنفيذ إجراء الكود… + منذ API %d + تمت إزالته في API %d + تم إهماله في API %d + العثور على مراجع… + العثور على تعريف… + التعريف غير موجود + لم يتم العثور على مراجع + التشخيصات + فشل التثبيت + الملف المأخوذ ليس مجلدا! + رجاءا انتظر لحظة… + + هذا الجهاز غير مدعوم + أنت تستخدم نسخة %1$s من AndroidIDE على جهاز يعمل فقط بـ %2$s. هذه التكوينات غير معتمدة. يرجى تثبيت نسخة %2$s من AndroidIDE. + مسح المخرجات + مخرجات البناء + تشغيل سريع + تم تغيير ملفات Gradle. الرجاء إعادة بناء المشروع الخاص بك لمزامنة الاعتمادات والتهيئات. + جاري الإعداد + التحضير للبناء. قد يستغرق البناء الأول ما يصل إلى 10-15 دقيقة! + عذرا، Gradle wrapwrapper غير متوفر!\nجاري تثبيت واحدة افتراضية. سيتم تنزيل Gradle v7.4 إذا لزم الأمر. + تشغيل + + أول بناء + هذه هي المرة الأولى التي يتم فيها البناء بعد تثبيت AndroidIDE. يستغرق البناء الأول عادة وقتاً بينما يقوم تنزيل Gradle بتحميل جميع التبعيات والإضافات. قد تستغرق هذه العملية حوالي 10 - 15 دقيقة. لكن هذا يعتمد كلياً على اتصال الشبكة الخاصة بك.\n\nالرجاء التحلي بالصبر… + إنشاء مشروع + الحد الأدنى من SDK + مشروع جديد + اسم الحزمة + اسم التطبيق + ابدأ مشروعك الرائع الجديد! + فتح آخر مشروع؟ + هل تريدني أن أفتح آخر مشروع مفتوح؟ المشروع المفتوح كان:\n%s + غلق هذا المشروع + آخر مشروع فتح غير موجود! + إنشاء مشروع جديد + فتح مشروع موجود + إغلاق المشروع + هل أنت متأكد من رغبتك في إغلاق هذا المشروع؟ سيتم إيقاف جميع ديمونات Gradle التي بدأت بعد إغلاق هذا المشروع. + + المشروع الأساسي + مشروع فارغ + مشروع درج التنقل + نشاط التنقل السفلي + نشاط التبويب + لا يوجد نشاط + دون AndroidX + + حفظ + البحث + البحث في الملف + البحث في المشروع + بحث في الوحدات البرمجية + لا توجد وحدات في المشروع + تصفية امتدادات الملف (اختياري) + مفصولة بـ \'|\' + الرجاء إدخال نص + حدد وحدات للبحث + البحث في المشروع، يرجى الانتظار… + نتائج البحث + أُنشئ المشروع بنجاح! + فشل إنشاء المشروع + فشل في إنشاء المجلد + فشل في إنشاء ملف + فشل إنشاء ملف التخطيط! + تم إنشاء المجلد بنجاح + تم إنشاء الملف بنجاح + المجلد موجود بالفعل + الملف موجود بالفعل! + مِلَفّ التخطيط موجود فعلًا! + اسم غير صحيح! + إنشاء + إذا كان المسار يحتوي على فاصل الملفات (\'/\')، فسيتم إنشاء الدلائل المطلوبة (الأم) إذا لم تكن موجودة. + اسم المجلد + إسم الملف + اسم جديد + ملف جديد + إنشاء مِلَفّ تخطيط + كلاس جافا جديد + مصدر XML جديد + مجلد جديد + تأكيد الحذف + هل أنت متأكد من أنك تريد حذف:\n%s؟ + تم النسخ بنجاح + أدخل اسم جديد للملف/المجلد. + تمت إعادة التسمية بنجاح + لا يمكن إعادة تسمية الملف. + تم الحذف بنجاح + غير قادر على حذف الملف! + نسخ المسار + إعادة تسمية + حذف + إغلاق الكل + إغلاق الأخرى + أغلق هذا التبويب + تم حفظ جميع الملفات. + فشل حفظ الملفات + الوجهة: %s/ + مورد رسم + الواجهة + القائمة + أخرى + كلاس + نشاط (واجهة) + واجهة مستخدم (انترفيس) + تعدد (Enum) + فشل في إدراج ملفات المشروع! + + فتح بواسطة... + تراجع + إعادة + + حجم خط المحرر + حول AndroidIDE + مسح جميع ذاكرة التخزين المؤقت + مسح دليل ذاكرة التخزين المؤقت. سيؤدي هذا إلى حذف جميع التبعيات التي تم تحميلها بواسطة Gradle. سيتم تحميل الملفات المطلوبة مرة أخرى في النسخة التالية. + أوامر Gradle الإضافية + اختر أوامر إضافية سيتم إضافتها أثناء تنفيذ كل مهمة + حجم الخط + حجم خط المحرر + أعلام الرسوم غير المطبوعة + اختر ما هي الأحرف غير القابلة للطباعة التي يجب أن يرسمها المحرر + التفاف النص + استخدام تغليف الكلمات للمحرر + تمكين المكبر + تكبير النص في موضع المؤشر أثناء اختيار النص في المحرر + المحرر + بناء وتشغيل + فتح آخر مشروع؟ + إذا تم تحديده، فسيتذكر IDE آخر مشروع تم فتحه وسيتم إعادة فتحه عند بدء التشغيل التالي. + تأكيد فتح المشروع + اسأل قبل فتح آخر مشروع مفتوح. + استخدام shell النظام في الـterminal + إذا تم تحديده، سيتم استخدام \'/system/bin/sh\' في التيرمنال. + عام + حجم التبويبة + حدد عدد المسافات لـ TAB + الإعدادات + سِجل التغييرات + الرجاء اختيار حجم الخط الافتراضي للمحرر : + هذا الأمر سيقوم بحذف مسار/مجلد البيانات المؤقتة الذي تم أنشاءه بواسطة Gradle. إذا حذفته، قد تتأخر عملية البناء نسبياً كما سيتم تنزيل الملفات المطلوبة بواسطة Gradle مرة أخرى.\n\nهل أنت متيقِّن من حذف التخزين المؤقت؟ + + معاينة التخطيط + حذف + يرجى التأكيد + هل أنت متأكد؟ + لم يتم إضافة أي عرض. انقر للإضافة. + فشل في إنشاء كود XML + إنشاء كود XML + مرر لأعلى للإخراج والسجلات والمزيد. + تحطم AndroidIDE + الرجاء فتح مشكلة على github مع المكونات التالية: + انقر على الزر أدناه لنسخ السجل وفتح صفحة المشكلات. + نسخ وتقرير + الترجمات + توسيع التحديد + مطابقة المكملات في حالة الأحرف الصغيرة + الشائعة + الملفات غير المحفوظة + لم يتم حفظ بعض الملفات. هل ترغب في حفظها قبل الإغلاق؟ الملفات غير المحفوظة هي: \n%s + حفظ قبل إغلاق الملفات + حفظ الملفات قبل إغلاقها. هذه ميزة تجريبية. من المتوقع أن تحفظ الملفات بنفسك. + إذا تم تفعيله، فإن كتابة حالة صغيرة أو أحرف أعلى سوف تقترح أسماء الكلاس بالإضافة إلى أعضاء النطاق. + ميزات الخط + تمكين/تعطيل ميزات الخط + نعم + لا + إضافة سمة + درج الملفات + قيمة السمة + تنسيق الكود + استخدام تنسيق الكود بنمط جافا Google + استخدم إعدادات تنسيق الكود بنمط جافا لـ Google لتنسيق كود مصدر جافا. + علامة كلمة المرور المرئية + استخدم لعلم نوع إدخال كلمة المرور المرئية في المحرر. هذا يضمن عدم اقتراح أي اقتراحات بواسطة لوحة المفاتيح الناعمة. + السابق + تم بدء خدمة بناء Gradle + خدمة بناء Gradle + إلغاء البناء + تهيئة المشروع + تم تهيئة المشروع + فشل تهيئة المشروع + لم يتم تهيئة المشروع + الاستبدالات + مزامنة المشروع + موقع الحفظ + لغة المشروع + التالي + خروج + تثبيت Gradle المخصصة + حدد تثبيت Gradle مخصص لاستخدامه في البناء. سيقوم بتغيير الإصدار المحدد في gradle-wrapper.properties. + مسار تثبيت Gradle + اتركه فارغاً لاستخدام Gradle wrapper. + لا يوجد بناء قيد التقدم + البناء جارٍ... + فشل البناء. راجع إخراج البناء لمزيد من التفاصيل. + تم البناء بنجاح + فشل الحصول على نص من المحرر + البيانات غير صالحة للقصد. + حدد مجلد من وحدة التخزين الرئيسية + السلطة \'\'%s\' غير مسموح بها + استخدام مكتبة ICU + استخدم مكتبة ICU لاستخدام استعادة حواف الكلمات للنقر المزدوج والضغط المطول على اختيار الكلمات. + مرر لأعلى لعرض @@مخرجات البناء@@ + استخدام علامة التبويب الناعمة + اختر ما إذا كان سيتم استخدام المسافات بدلاً من حرف التبويب (\\t). + تبرع + إرشادات الإستخدام + إغلاق + تجاهل الحالة + استخدم التعبير النصي (regex) + تكوين بناء Gradle. + تهيئة + عن التطبيق + AndroidIDE مفتوح المصدر! + اشترك للحصول على أحدث تحديثات. + مناقشة الميزات، الأخطاء والتحسينات هنا. + ما الجديد في هذا الإصدار؟ + المزيد عن AndroidIDE. + إعدادات IDE العامة. + تهيئة المحرر. + + تقليم السطر الجديد النهائي + إدراج سطر جديد نهائي + إزالة سطر فارغ إضافي في نهاية الملف + إدراج سطر جديد فارغ في نهاية الملف. + تقسيم السمات + تنسيق السمات على سطر جديد + الانضمام إلى خطوط CDATA + تطبيع المحتوى داخل CDATA. + تجميع (ربط) اسطر التعليق + تطبيع المحتوى داخل التعليقات. + تجميع (ربط) اسطر المحتوى + تطبيع المحتوى داخل العناصر. + المسافة قبل علامة إغلاق فارغة + إدراج مسافة بيضاء قبل وضع علامة إغلاق ذاتي بين قوسين نهائيين. + الحفاظ على المحتوى الفارغ + الحفاظ على المحتوى الفارغ داخل العناصر (المسافات البيضاء، الخطوط الجديدة، علامات التبويب، إلخ). + الحفاظ على فواصل الخط + الحفاظ على فواصل الخط بين السمات. + إغلاق الأقواس في الخط الجديد + ضع القوس المغلق على سطر جديد. + تقليم المسافة البيضاء + إزالة المسافات البيضاء إضافية في نهاية الخطوط. + أقصى عرض للسطر + الحد الأقصى لعدد الأحرف التي يجب أن تكون في السطر. + فصل حجم العوز للسمات + عدد المسافات المراد إضافتها لسمات التقسيم. + احتفظ بخطوط جديدة + • الحد الأقصى لعدد فترات التوقف المستمرة التي ينبغي الحفاظ عليها. + سلوك العناصر الفارغة + اختر سلوك التنسيق للعناصر الفارغة. + خيارات تنسيق XML + تهيئة تنسيق XML + + استخدام خط مخصص + في حالة التمكين، سيتم استخدام الملف الموجود على \"/data/com.tom.rv2ide/files/home/.androidide/ui/font.ttf\" كخط محرر. + تثبيت APK... + هل تريد فتح التطبيق؟ + خدمة بناء AndroidIDE + رمز اللون Hex + انتقاء + إعداد أذونات قابلة للتنفيذ… + ربط %1$s بـ %2$s + استخراج مكتبات الرابط… + اسم الحزمة فارغ + اسم الحزمة غير صالح + اسم الحزمة طويل + لا يمكن أن يكون الرمز \'_\' أول حرف في شريحة الحزمة + لا يمكن أن يكون الرقم أول حرف في شريحة الحزمة + الحرف \"%1$s\" غير مسموح به في أسماء حزمة تطبيقات Android + يجب أن تحتوي الحزمة على فاصل \'.\' واحد على الأقل + + استيراد الكلاس(ات) + إنشاء محدثات (setters)/مستخرجات (getters) + اضافة \'اطلاق خطأ\' + تعليق السطر + إنشاء الفويد الناقصة + تحويل إلى مكوّنات + إنشاء مولد كلاس (constructor) + اضافة الفويد الاساسية + حذف الكلاس + إزالة الفويد + إزالة اطلاقات الاخطاء غير المستخدم + قمع تحذير \'غير محدد\' + ازالة تعليق السطر + تحويل إلى شكل + اختر الحقول + لم يتم اختيار أي حقل. + لا توجد حقول + اعادة كتابة فويد الكلاس الاب + لم يتم اختيار أي حقل. + غير قادر على اعادة كتابة الفويد + غير قادر على إنشاء فويد محدثات و مستخرجات + حدد فويد لاعادة كتابتها + غير قادر على العثور على أي فويد يمكن اعادة كتابتها + الانتقال إلى التعريف + البحث عن مراجع + إنشاء toString() + إزالة الامبورت غير المستخدمة + تنظيم الاستيراد (امبورت) + غير قادر على إنشاء تطبيق toString() + toString() تم تجهيزها بالفعل + إنشاء مولد كلاس (constructor) مفقود + غير قادر على إنشاء المولد + المولد بنفس المعطيات (باراميتر) متوفر بالفعل + إستبدال + استبدال الكل + تشغيل المهام + البحث عن المهام… + الرجاء تحديد المهام لتشغيلها + التأكيد + سيتم تشغيل المهام التالية، بالترتيب. انقر فوق الزر \'تشغيل\' مرة أخرى للتأكيد.\n\n%1$s + جارٍ تحميل المهام... + + نسخ + نسخ مشروع Git + رابط المشروع + نسخ مشروع Git... + تم نسخ مشروع Git بنجاح + فشل في استنساخ مشروع git + حدد سمة من القائمة أدناه + عرض التسلسل الهرمي للتخطيط + نظام الألوان + اختر مخطط الألوان لاستخدامه في المحرر + نمط واجهة المستخدم + اختر وضع واجهة المستخدم لـ IDE + فاتح + مظلم + اتبع النظام + سمة + اختر سمة لـ AndroidIDE (تتطلب إعادة التشغيل). + تهيئة المشروع + فشل التشغيل. يجب تثبيت التطبيق أولاً. + التشخيصات مفعلة + (تجريبي) ما إذا ينبغي تحليل ملفات مصدر جافا بحثا عن أخطاء أم لا. + إعادة تحميل أنظمة الألوان + فشل تشغيل مختار الملفات: %1$s + أداة خادم API غير متوفرة. تحقق من إخراج البناء وسجلات IDE للأخطاء. + حذف الأسطر الفارغة عند المسح + ما إذا كان على المحرر حذف الأسطر الفارغة عند المسح للخلف بضغطة واحدة أم لا. + حذف التاب عند المسح + عند تفعيلها، المحرر سيحذف الفراغات المساوية لعرض التاب (غالبا 4 فراغ) عند الضغط على مسح النص. + مزامنة + تجاهل التغييرات + أصلح الواردات (إمبورت) + لم يتم العثور على أسماء الكلاس + أي %1$s؟ + ربط بخدمة التسجيل + السماح لهذا التطبيق بربطه مع خدمة تسجيل اللوغ لـ AndroidIDE. هذا الامر مطلوب لـ AndroidIDE لقراءة السجلات (اللوغ) لهذا التطبيق. + اسم الإضافة + نوع الإضافة + أسم إضافة غير صالح + القيمة فارغة + الملف غير موجود + يجب أن يكون مسار إلى ملف + اسم الكلاس يحتوي على كلمات مفتاحية + يجب أن يكون المسار إلى مجلد + اسم ملف التخطيط غير صالح + تفاصيل المشروع غير صالحة + استخدام سكريبت كوتلن (.kts) لإنشاء ملفات بناء غرادل + + الخصوصية + إحصائيات التطبيق + ساعدنا في تحسين التطبيق مِن خلال توفير إحصائيات مجهولة المصدر. سوف نجمع المعلومات الأساسية حول جهازك لإحصاءات قاعدة المستخدمين فقط. يمكن عرض البيانات الدقيقة التي تتم مشاركتها في التفضيلات. بياناتك آمنة ولا تتم مشاركتها مع خَدَمَات الجهات الخارجية. يمكنك إلغاء الاشتراك في أي وقت في تفضيلاتك. + إحصائيات الإستخدام المجهول + مجموعة الإحصائيات + السماح بجمع مقاييس التثبيت وإحصائيات الجهاز (مجهول تماما). + ايدي ‏مميز + الجهاز + إصدار التطبيق + البلد + بناء CPU + معاينة البيانات + اصدار الاندرويد + الاشتراك + خيارات المطور + خيارات تجريبية/تصحيح أخطاء AndroidIDE + تصحيح الأخطاء + تفريغ السجلات + تفريغ سجلات AndroidIDE إلى $HOME/.androidide/logs + قم بتشغيل النسخة التصحيحية (debug) من تطبيقك لعرض السجلات هنا. + تم تعطيل إرسال السجل. يمكنك تمكينه في الخيارات. + تظهر سجلات من بيئة التطوير المتكاملة هنا. + افتح ملف لعرض نتائج التشخيص الخاصة به + قم ببناء التطبيق أو تشغيل مهمة لرؤية نتائج بنائه هنا. + فشلت في تنفيذ الإجراء. + تمكين مرسل السجلات. + عند التعطيل، لن يتم عرض سجلات التطبيقات في AndroidIDE. + + Build variants + Discard + Failed to fetch build variants + Choose application + Selected build variant not found + Disconnect log senders + Begin long select + Sticky scroll + Show the current scope at the top while scrolling the editor. + Launch app after installation + If enabled, the IDE will (without confirmation) launch the application right after it is installed. + Run options + Cannot run application. Unable to determine package name. + Cannot run application. No application modules found in project. + Launch app + Experimental + Pin line numbers + Whether the editor should pin line number panel when scrolled horizontally. + Blue Wave + Sunny Glow + Material You + Language + Select a language for AndroidIDE. + System Default + Project directory is not accessible + Selected file is not a directory + Project directory does not exist + A file save operation is already in progress! + SDK Installation + Install the development tools + The development tools must be installed for the IDE to work. Clicking the done button will open terminal to install the tools. To install, follow the instructions here.

Or read the documentation]]>.
+ Welcome + Learn, build, launch. All on your Android. + Grant + Storage + Required to access project files. + Allow installing APKs built with AndroidIDE. + Install packages + Permissions + AndroidIDE requires the following permissions + Please grant the permissions to continue. + It seems you\'re offline. Check your internet connection. + Heads up! You\'re using cellular data. + Heads up! You\'re on a metered network. + Disable background data restriction to avoid installation failures. + Unable to create terminal session + Automatic installation + Manual installation + Android SDK version + JDK version + Install Git + Install OpenSSH + Cannot create session. New sessions are disabled! + Install location error + Unsupported user + Socials + Contributors + Top community contributors. + GitHub Contributors + Crowdin Translators + Misc + Contribute + It\'s not just an IDE, it\'s a community. Contribute code, ideas, and passion to AndroidIDE. + No application available to handle intent. + Open source licenses + View open source licenses. + JDK version + Currently selected: %1$s (requires restart if changed) + + لا توجد تحديثات متاحة + فشل التحقق من وجود تحديثات + فشل تحميل سجل التغييرات + خطأ في جلب سجل التغييرات + لم يتم العثور على تحديث متوافق لجهازك + فشل التنزيل + فشل التنزيل: %s + فشل التثبيت + لا يمكن فتح المتصفح + تحديث متاح + تنزيل + عرض في المتصفح + لاحقًا + إلغاء + جاري تنزيل التحديث + الإصدار الجديد %s متاح! + بنية الجهاز: %s + رمز الإصدار المستهدف: %d + المتغيرات المتاحة: %s + جاري التحضير للتنزيل... + %d ميجابايت / %d ميجابايت + يرجى تمكين 'تثبيت التطبيقات غير المعروفة' والمحاولة مرة أخرى + خطأ HTTP: %d + خطأ في جلب معلومات التحديث + خطأ في تحليل معلومات التحديث + الإصدار الحالي: %d، الإصدار المتاح: %d للبنية: %s + لم يتم العثور على متغير متوافق للبنية: %s + الحزمة غير موجودة + ABIs المدعومة: %s + لم يتم العثور على بنية معروفة، سيتم الرجوع إلى armeabi-v7a + بنية الجهاز: %s + لم يتم العثور على تطابق تام لـ %s، جاري تجربة البدائل + استخدام armeabi-v7a كبديل لـ arm64-v8a + استخدام x86 كبديل لـ x86_64 + لم يتم العثور على تطابق تام للبنية، سيتم استخدام أول متغير متاح + خطأ في تنزيل APK + خطأ في تنزيل APK + خطأ في تثبيت APK + خطأ في فتح المتصفح +
From 2773bc68b4b5a6a0a87eb4f2ecf2adee055f0ef4 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 18:03:42 +0530 Subject: [PATCH 49/66] Update asm_build.yml --- .github/workflows/asm_build.yml | 51 +++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index ba34e1d56..3b399eac9 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -1,36 +1,45 @@ -name: Build Android Code Studio +name: AI-Managed Strict Build on: push: - branches: [ "main", "dev" ] - workflow_dispatch: { } + branches: [ main ] + pull_request: + branches: [ main ] jobs: build: runs-on: ubuntu-latest + steps: - - name: Checkout Code - run: | - git init - git remote add origin https://github.com/${{ github.repository }} - git fetch origin ${{ github.ref }} - git reset --hard FETCH_HEAD - git submodule update --init --recursive --force + - name: Checkout code + uses: actions/checkout@v3 - name: Set up JDK 17 - uses: actions/setup-java@v4 + uses: actions/setup-java@v3 with: java-version: '17' - distribution: 'adopt' + distribution: 'temurin' + + - name: Grant execute permission + run: chmod +x gradlew - - name: Build Debug APK + - name: Deep Clean & Precise Build run: | - chmod +x ./gradlew - ./gradlew :core:app:assembleDebug + echo "AI-System: Initiating Deep Clean..." + # 1. Purani build files ko poori tarah delete karein + ./gradlew clean + + # 2. Build shuru karein (Strict mode mein) + # Agar koi duplicate resource hogi, ye turant rok dega + ./gradlew :core:app:assembleDebug --stacktrace --warning-mode all + + - name: Final Integrity Check + if: success() + run: echo "Build successful and verified." - - name: Upload APK - uses: actions/upload-artifact@v4 - with: - name: android-code-studio-debug-apk - path: core/app/build/outputs/apk/debug/*.apk - if: always() + - name: Log Analysis (If Failure) + if: failure() + run: | + echo "AI-System: Build Failed. Analyzing logs for duplicates..." + # Error ko highlight karne ke liye specific command + grep -rn "Error: Found item" . || echo "Check the logs above for specific resource errors." From 4b1ac9ae61622170074c897984787c82f1c2a9f0 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 18:15:58 +0530 Subject: [PATCH 50/66] Update asm_build.yml --- .github/workflows/asm_build.yml | 38 +++++++++++++++------------------ 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 3b399eac9..001e5ab19 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -1,4 +1,4 @@ -name: AI-Managed Strict Build +name: Android CI - Root Fix on: push: @@ -9,10 +9,8 @@ on: jobs: build: runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v3 + - uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v3 @@ -20,26 +18,24 @@ jobs: java-version: '17' distribution: 'temurin' - - name: Grant execute permission + - name: Grant Permission run: chmod +x gradlew - - name: Deep Clean & Precise Build + - name: Root Level Clean & Build run: | - echo "AI-System: Initiating Deep Clean..." - # 1. Purani build files ko poori tarah delete karein + # 1. Jad se saaf karo (Purani cache aur build files khatam) + rm -rf .gradle + rm -rf build ./gradlew clean - # 2. Build shuru karein (Strict mode mein) - # Agar koi duplicate resource hogi, ye turant rok dega - ./gradlew :core:app:assembleDebug --stacktrace --warning-mode all - - - name: Final Integrity Check - if: success() - run: echo "Build successful and verified." + # 2. Force Build (Network errors se bachne ke liye offline mode hata kar) + ./gradlew :core:app:assembleDebug --stacktrace --refresh-dependencies + env: + SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }} - - name: Log Analysis (If Failure) - if: failure() - run: | - echo "AI-System: Build Failed. Analyzing logs for duplicates..." - # Error ko highlight karne ke liye specific command - grep -rn "Error: Found item" . || echo "Check the logs above for specific resource errors." + - name: Upload APK + if: success() + uses: actions/upload-artifact@v3 + with: + name: app-debug-apk + path: core/app/build/outputs/apk/debug/ From 6a8cd36bb5bf253a7987dff400a64c95fc59387c Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 18:16:54 +0530 Subject: [PATCH 51/66] Update asm_build.yml From 455e984e6072a61cff848aa1e1a8b596ee83aa89 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 18:21:52 +0530 Subject: [PATCH 52/66] Update asm_build.yml --- .github/workflows/asm_build.yml | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 001e5ab19..7ca1088d0 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -1,4 +1,4 @@ -name: Android CI - Root Fix +name: Android CI - Final Perfect Build on: push: @@ -9,33 +9,37 @@ on: jobs: build: runs-on: ubuntu-latest + steps: - - uses: actions/checkout@v3 + - name: Checkout Repository + uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'temurin' + cache: gradle - - name: Grant Permission + - name: Grant execute permissions run: chmod +x gradlew - - name: Root Level Clean & Build + - name: Deep Clean & Build run: | - # 1. Jad se saaf karo (Purani cache aur build files khatam) + # 1. Purani sabhi files ko jad se saaf karo + ./gradlew clean rm -rf .gradle rm -rf build - ./gradlew clean - # 2. Force Build (Network errors se bachne ke liye offline mode hata kar) - ./gradlew :core:app:assembleDebug --stacktrace --refresh-dependencies + # 2. Build process start (Parallelism band ki hai taaki conflict na ho) + ./gradlew :core:app:assembleDebug --no-daemon --stacktrace env: SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }} - - name: Upload APK + - name: Upload APK Artifact if: success() uses: actions/upload-artifact@v3 with: name: app-debug-apk - path: core/app/build/outputs/apk/debug/ + # Yahan .apk extension specify kar diya hai taaki file identify ho + path: core/app/build/outputs/apk/debug/*.apk From a3772b65070fd7af76b9d0c8cade5f55259a4a73 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 18:26:51 +0530 Subject: [PATCH 53/66] Update asm_build.yml --- .github/workflows/asm_build.yml | 39 +++++++++++++++------------------ 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 7ca1088d0..8e9295b02 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -1,45 +1,42 @@ -name: Android CI - Final Perfect Build +name: Build Android Code Studio on: push: - branches: [ main ] + branches: [ "dev", "main", "indexing", "release/**" ] pull_request: - branches: [ main ] + branches: [ "dev" ] + workflow_dispatch: { } jobs: build: + name: Build Android APK runs-on: ubuntu-latest - steps: - - name: Checkout Repository - uses: actions/checkout@v3 + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: 'recursive' + fetch-depth: 0 - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - cache: gradle - - name: Grant execute permissions + - name: Grant Execute Permission run: chmod +x gradlew - - name: Deep Clean & Build + - name: Clean and Assemble Debug APK run: | - # 1. Purani sabhi files ko jad se saaf karo + # Pehle saari purani cache aur build folders saaf karo ./gradlew clean - rm -rf .gradle - rm -rf build - - # 2. Build process start (Parallelism band ki hai taaki conflict na ho) + # Assemble Debug (Default signing ke sath) ./gradlew :core:app:assembleDebug --no-daemon --stacktrace - env: - SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }} - - name: Upload APK Artifact - if: success() - uses: actions/upload-artifact@v3 + - name: Upload Debug APK + uses: actions/upload-artifact@v4 with: name: app-debug-apk - # Yahan .apk extension specify kar diya hai taaki file identify ho path: core/app/build/outputs/apk/debug/*.apk + if-no-files-found: error From 4ac9e67006efd31d45cc0bc7b70025582c361e4a Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 19:11:18 +0530 Subject: [PATCH 54/66] Update build.gradle.kts --- core/app/build.gradle.kts | 110 +++++++------------------------------- 1 file changed, 18 insertions(+), 92 deletions(-) diff --git a/core/app/build.gradle.kts b/core/app/build.gradle.kts index bd088ccb5..38f3fc33e 100755 --- a/core/app/build.gradle.kts +++ b/core/app/build.gradle.kts @@ -1,18 +1,5 @@ /* - * This file is part of AndroidIDE. - * - * AndroidIDE is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * AndroidIDE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with AndroidIDE. If not, see . + * This file is part of AndroidIDE. */ @file:Suppress("UnstableApiUsage") @@ -55,7 +42,6 @@ configurations.all { if (requested.group == "com.google.guava" && requested.name == "guava") { if (requested.version?.contains("jre") == true) { useVersion("32.1.3-android") - because("Force Android version to avoid synthetic lambda conflicts") } } } @@ -71,16 +57,18 @@ android { } experimentalProperties["android.experimental.enableGlobalSynthetics"] = true - + + // FIX: Resource extraction error rokne ke liye + aaptOptions { + cruncherEnabled = false + } signingConfigs { create("custom") { val keyStorePath = "${rootProject.projectDir}/signing/signing-key.jks" val keyStoreFile = file(keyStorePath) - val signing_storePassword = System.getenv("SIGNING_STORE_PASSWORD") ?: "" val signing_keyPassword = System.getenv("SIGNING_KEY_PASSWORD") ?: "" - storeFile = keyStoreFile storePassword = signing_storePassword keyAlias = "AndroidCS" @@ -96,10 +84,7 @@ android { } buildTypes { - debug { - signingConfig = signingConfigs.getByName("custom") - } - + debug { signingConfig = signingConfigs.getByName("custom") } release { isShrinkResources = false signingConfig = signingConfigs.getByName("custom") @@ -111,11 +96,16 @@ android { disable.addAll(arrayOf("VectorPath", "NestedWeights", "ContentDescription", "SmallSp")) } + // FIX: Packaging conflict ko solve karne ke liye packaging { resources { + excludes += "/META-INF/{AL2.0,LGPL2.1}" pickFirsts += "kotlin/**.kotlin_builtins" + pickFirsts += "META-INF/LICENSE.md" + pickFirsts += "META-INF/LICENSE-notice.md" + pickFirsts += "META-INF/LICENSE" + pickFirsts += "META-INF/NOTICE" pickFirsts += "THIRD-PARTY" - pickFirsts += "LICENSE" } } @@ -123,47 +113,11 @@ android { val variant = this variant.outputs.all { val output = this as com.android.build.gradle.internal.api.BaseVariantOutputImpl - val versionName = variant.versionName ?: "unknown" - val versionCode = variant.versionCode val buildType = variant.buildType.name - val filters = output.filters - val abiFilter = filters.find { it.filterType == "ABI" } - val archSuffix = - abiFilter?.identifier - ?: run { - val variantName = variant.name.lowercase() - when { - variantName.contains("arm64") -> "arm64-v8a" - variantName.contains("armeabi") || variantName.contains("arm7") -> "armeabi-v7a" - else -> { - // This should not happen with our configuration - throw IllegalStateException( - "Could not determine ABI for variant: $variantName. Expected arm64-v8a or armeabi-v7a." - ) - } - } - } - - if (archSuffix !in listOf("arm64-v8a", "armeabi-v7a")) { - throw IllegalStateException( - "Unsupported architecture: $archSuffix. Only arm64-v8a and armeabi-v7a are supported." - ) - } - + val archSuffix = "arm64-v8a" // Defaulting to arm64 for simplicity in server builds val appName = "android-code-studio" - val fileName = - if (buildType == "release") { - "${appName}-${archSuffix}-${versionName}.apk" - } else { - "${appName}-${archSuffix}-${buildType}-${versionName}.apk" - } - - output.outputFileName = fileName - - println( - "Generated APK: $fileName for variant: ${variant.name}, arch: $archSuffix, versionCode: $versionCode" - ) + output.outputFileName = "${appName}-${archSuffix}-${buildType}-${versionName}.apk" } } } @@ -172,35 +126,25 @@ kapt { arguments { arg("eventBusIndex", "${BuildConfig.packageName}.events.AppEv desugaring { replacements { - includePackage( - "org.eclipse.jgit", - ) - + includePackage("org.eclipse.jgit") applyJavaIOReplacements() } } - dependencies { - // debugImplementation(libs.common.leakcanary) implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") implementation("org.tukaani:xz:1.9") implementation("org.apache.commons:commons-compress:1.21") - - // external deps here implementation("com.github.Dimezis:BlurView:version-3.2.0") implementation("androidx.security:security-crypto:1.1.0-alpha06") implementation(projects.external.acsprovider) implementation(projects.external.atc) implementation(libs.external.customizable.cardview) implementation(projects.external.logwire) - implementation(libs.external.seasonal.effects) - - // Annotation processors + implementation(libs.external.seasonal.effects) kapt(libs.common.glide.ap) kapt(libs.google.auto.service) kapt(projects.annotation.processors) - implementation(libs.common.editor) implementation(libs.common.utilcode) implementation(libs.common.glide) @@ -211,24 +155,16 @@ dependencies { implementation(libs.common.charts) implementation(libs.common.hiddenApiBypass) implementation(libs.aapt2.common) - implementation(libs.google.auto.service.annotations) implementation(libs.google.gson) implementation(libs.google.guava) - implementation("com.google.ai.client.generativeai:generativeai:0.9.0") { exclude(group = "org.slf4j", module = "slf4j-api") exclude(group = "org.slf4j", module = "slf4j-simple") exclude(group = "org.slf4j", module = "slf4j-nop") } - - // TODO: remove this implementation("com.github.MiyazKaori:SilentInstaller:1.0.0-alpha") - - // Git implementation(libs.git.jgit) - - // AndroidX implementation(libs.androidx.splashscreen) implementation(libs.androidx.annotation) implementation(libs.androidx.appcompat) @@ -248,17 +184,11 @@ dependencies { implementation(libs.androidx.work.ktx) implementation(libs.google.material) implementation(libs.google.flexbox) - - // Kotlin implementation(libs.androidx.core.ktx) implementation(libs.common.kotlin) - - // Dependencies in composite build implementation(libs.composite.appintro) implementation(libs.composite.desugaringCore) implementation(libs.composite.javapoet) - - // Local projects here implementation(projects.core.projectdata) implementation(projects.ideconfigurations) implementation(projects.core.actions) @@ -289,15 +219,11 @@ dependencies { implementation(projects.utilities.preferences) implementation(projects.utilities.templatesApi) implementation(projects.utilities.templatesImpl) - implementation(projects.utilities.treeview) + implementation(projects.treeview) implementation(projects.utilities.uidesigner) implementation(projects.utilities.xmlInflater) implementation(projects.xml.aaptcompiler) implementation(projects.xml.lsp) implementation(projects.xml.utils) - - // This is to build the tooling-api-impl project before the app is built - // So we always copy the latest JAR file to assets compileOnly(projects.tooling.impl) - } From 6a2e37be394f7cbc9a9ef09a1b18dd7c7ee3c58a Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 19:12:29 +0530 Subject: [PATCH 55/66] Update asm_build.yml --- .github/workflows/asm_build.yml | 40 ++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 8e9295b02..6a9dfc9e3 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -1,42 +1,46 @@ -name: Build Android Code Studio +name: Android CI Build on: push: - branches: [ "dev", "main", "indexing", "release/**" ] + branches: [ main ] pull_request: - branches: [ "dev" ] - workflow_dispatch: { } + branches: [ main ] jobs: build: - name: Build Android APK runs-on: ubuntu-latest + steps: - - name: Checkout + - name: Checkout code uses: actions/checkout@v4 - with: - submodules: 'recursive' - fetch-depth: 0 - name: Set up JDK 17 - uses: actions/setup-java@v4 + uses: actions/setup-java@v3 with: java-version: '17' distribution: 'temurin' + cache: gradle - - name: Grant Execute Permission + - name: Grant execute permission for gradlew run: chmod +x gradlew - - name: Clean and Assemble Debug APK + - name: Deep Clean and Build run: | - # Pehle saari purani cache aur build folders saaf karo + # 1. Purani cache aur build folders ko puri tarah saaf karein ./gradlew clean - # Assemble Debug (Default signing ke sath) - ./gradlew :core:app:assembleDebug --no-daemon --stacktrace + rm -rf build/ + rm -rf core/app/build/ + + # 2. Build ko Sequential run karein (parallel=false aur workers=1) + # Isse AAPT2 resources ko merge karte waqt crash nahi hoga + ./gradlew :core:app:assembleDebug \ + --no-daemon \ + --parallel=false \ + --max-workers=1 \ + --stacktrace - - name: Upload Debug APK + - name: Upload APK uses: actions/upload-artifact@v4 with: - name: app-debug-apk + name: android-code-studio-debug path: core/app/build/outputs/apk/debug/*.apk - if-no-files-found: error From c6c6437b329ce8b32ad7c5b3379f8865a575429f Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 19:14:10 +0530 Subject: [PATCH 56/66] Update asm_build.yml From e7e1abcd3b81f73210ffa183ef082f8426ae8c1c Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 19:18:16 +0530 Subject: [PATCH 57/66] Update asm_build.yml --- .github/workflows/asm_build.yml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 6a9dfc9e3..25e7980fe 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -24,23 +24,26 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - - name: Deep Clean and Build + - name: Build Android Code Studio run: | - # 1. Purani cache aur build folders ko puri tarah saaf karein + # 1. Server Memory saaf karne ke liye Deep Clean ./gradlew clean - rm -rf build/ - rm -rf core/app/build/ - # 2. Build ko Sequential run karein (parallel=false aur workers=1) - # Isse AAPT2 resources ko merge karte waqt crash nahi hoga + # 2. Resource Conflict aur IllegalStateException se bachne ke liye sequential build + # --parallel=false: Tasks ek-ek karke chalenge + # --max-workers=1: Server load manage karne ke liye + # --no-daemon: Server memory leak se bachne ke liye + ./gradlew :core:app:assembleDebug \ --no-daemon \ --parallel=false \ --max-workers=1 \ --stacktrace - - name: Upload APK + - name: Upload APK Artifact uses: actions/upload-artifact@v4 with: name: android-code-studio-debug + # Path ensure karta hai ki sahi APK mil jaye path: core/app/build/outputs/apk/debug/*.apk + if-no-files-found: error From 12f890c38d8c19cbe47e70a0614f3ffc5c7d1b2e Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 19:19:39 +0530 Subject: [PATCH 58/66] Update asm_build.yml --- .github/workflows/asm_build.yml | 117 ++++++++++++++++++++++---------- 1 file changed, 83 insertions(+), 34 deletions(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 25e7980fe..2ba50b011 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -1,49 +1,98 @@ -name: Android CI Build +name: Build Android Code Studio on: push: - branches: [ main ] + branches: + - "dev" + - "main" + - "indexing" + - "release/**" + paths-ignore: + - '**.md' + - '**.json' + - 'fastlane/**' + - '.github/workflows/crowdin_contributors.yml' pull_request: - branches: [ main ] + branches: [ "dev" ] + paths-ignore: + - '**.md' + - '**.json' + - 'fastlane/**' + - '.github/workflows/crowdin_contributors.yml' + workflow_dispatch: { } jobs: - build: + build_release_apk: + name: Build Debug APK runs-on: ubuntu-latest - steps: - - name: Checkout code + - name: Cancel previous runs + uses: styfle/cancel-workflow-action@0.12.1 + with: + access_token: ${{ github.token }} + - name: Checkout uses: actions/checkout@v4 - + with: + submodules: 'recursive' + fetch-depth: 0 - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: '17' - distribution: 'temurin' - cache: gradle - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - - name: Build Android Code Studio + distribution: 'adopt' + - name: Change Gradle wrapper permissions + run: chmod +x ./gradlew + - name: Restore cache + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-v2-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-gradle- + - name: Create local.properties run: | - # 1. Server Memory saaf karne ke liye Deep Clean - ./gradlew clean - - # 2. Resource Conflict aur IllegalStateException se bachne ke liye sequential build - # --parallel=false: Tasks ek-ek karke chalenge - # --max-workers=1: Server load manage karne ke liye - # --no-daemon: Server memory leak se bachne ke liye - - ./gradlew :core:app:assembleDebug \ - --no-daemon \ - --parallel=false \ - --max-workers=1 \ - --stacktrace - - - name: Upload APK Artifact + echo "signing.storeFile=signing/signing-key.jks" >> local.properties + echo "signing.storePassword=123456" >> local.properties + echo "signing.keyAlias=android-ide" >> local.properties + echo "signing.keyPassword=123456" >> local.properties + - name: Debug signing setup + run: | + echo "=== Repository structure ===" + find . -name "*.jks" -o -name "local.properties" | head -10 + echo "" + echo "=== local.properties content ===" + cat local.properties || echo "local.properties not found" + echo "" + echo "=== SigningDirectory ===" + ls -la core/app/signing/ || echo "core/app/signing directory not found" + - name: Assemble Debug APK + run: ./gradlew :core:app:assembleDebug + # run: ./gradlew :core:app:assembleRelease + - name: List APK files (debug) + run: ls -la core/app/build/outputs/apk/debug/ + - name: Upload arm64-v8a Release APK + uses: actions/upload-artifact@v4 + with: + name: apk-arm64-v8a-debug + path: core/app/build/outputs/apk/debug/*arm64-v8a*.apk + if: always() + - name: Upload armeabi-v7a Release APK + uses: actions/upload-artifact@v4 + with: + name: apk-armeabi-v7a-release + path: core/app/build/outputs/apk/release/*armeabi-v7a*.apk + if: always() + - name: Upload x86_64 Release APK + uses: actions/upload-artifact@v4 + with: + name: apk-x86_64-release + path: core/app/build/outputs/apk/release/*x86_64*.apk + if: always() + - name: Upload universal Release APK uses: actions/upload-artifact@v4 with: - name: android-code-studio-debug - # Path ensure karta hai ki sahi APK mil jaye - path: core/app/build/outputs/apk/debug/*.apk - if-no-files-found: error + name: apk-universal-release + path: core/app/build/outputs/apk/release/*universal*.apk + if: always() From 86a7fc1d402632b1ae94e691a54e82f44a058e41 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 19:21:05 +0530 Subject: [PATCH 59/66] Update asm_build.yml From c32906cd702cbc69fcb911dba03b45dbf48546ff Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 19:32:34 +0530 Subject: [PATCH 60/66] Update asm_build.yml --- .github/workflows/asm_build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 2ba50b011..3acff057d 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -1,4 +1,4 @@ -name: Build Android Code Studio +name: Build AndroidStudio on: push: From ef89c56b18d360da0203e475561dbb9dc9198d00 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 19:39:20 +0530 Subject: [PATCH 61/66] Update gradle.properties --- gradle.properties | 126 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 108 insertions(+), 18 deletions(-) diff --git a/gradle.properties b/gradle.properties index a2f173530..a16fb142d 100755 --- a/gradle.properties +++ b/gradle.properties @@ -1,32 +1,122 @@ -## For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html -# -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx1024m -XX:MaxPermSize=256m -# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -# -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true -#Wed Feb 02 13:50:55 IST 2022 +# Project-wide Gradle settings for Android Code Studio +# This file is used to configure the Gradle build system. +# For more details, see: https://docs.gradle.org/current/userguide/build_environment.html + +## ---------------------------------------------------------------------- +## Gradle Daemon & Performance +## ---------------------------------------------------------------------- + +# Enable the Gradle daemon to improve startup and build times. +org.gradle.daemon=true + +# Run builds in parallel (requires decoupled projects). +org.gradle.parallel=true + +# Enable build caching to reuse task outputs. +org.gradle.caching=true + +# Configure the number of concurrent threads used by Gradle. +# If not set, Gradle uses the number of CPU cores. +# org.gradle.workers.max=4 + +## ---------------------------------------------------------------------- +## JVM Arguments for the Gradle Daemon +## ---------------------------------------------------------------------- +# Memory allocation and module opens required for JDK 16+. org.gradle.jvmargs=-Xmx4096M \ -Dkotlin.daemon.jvm.options\="-Xmx4096M" \ -XX:+HeapDumpOnOutOfMemoryError \ --add-opens java.base/java.lang=ALL-UNNAMED \ --add-opens java.base/java.util=ALL-UNNAMED \ --add-opens java.base/java.io=ALL-UNNAMED + +## ---------------------------------------------------------------------- +## Android Build Configuration +## ---------------------------------------------------------------------- + +# Use AndroidX (required for modern Android development). android.useAndroidX=true + +# Disable Jetifier because all dependencies are already AndroidX. android.enableJetifier=false + +# Exclude specific JARs from Jetifier (if any). This line prevents a known conflict. android.jetifier.ignorelist=common-30.2.2.jar -# TODO : Migrate +# Whether R classes are non-transitive. 'false' means R is transitive (default for older AGP). +# TODO: Migrate to non-transitive R class for better build performance (requires AGP 8.0+). android.nonTransitiveRClass=false +# Enable generation of BuildConfig by default (can be overridden per module). +android.defaults.buildfeatures.buildconfig=true + +# Use non-final resource IDs (helps with view binding in libraries). +# android.nonFinalResIds=false # Uncomment if needed. + +# Explicitly set R8 version (code shrinker). Must be compatible with AGP version. +android.r8.version=8.6.17 + +## ---------------------------------------------------------------------- +## Kotlin Configuration +## ---------------------------------------------------------------------- + +# Kotlin code style (official or obfuscating). +kotlin.code.style=official + +# Allow Kotlin to use experimental features (if required). +# kotlin.incremental=true +# kotlin.incremental.java=true +# kotlin.incremental.js=true + +# Kotlin compiler arguments (example, adjust as needed). +# kotlin.options.freeCompilerArgs += [ +# "-Xjvm-default=enable", +# "-Xopt-in=kotlin.RequiresOptIn" +# ] + +## ---------------------------------------------------------------------- +## Compile Options +## ---------------------------------------------------------------------- + +# Set Java compatibility to 11 or 17 (must match JDK version). +# These are usually defined in module build files, but can be set here. +# android.compileOptions.sourceCompatibility=11 +# android.compileOptions.targetCompatibility=11 + +# Enable data binding / view binding if needed. +# android.databinding.enabled=true +# android.viewBinding.enabled=true + +## ---------------------------------------------------------------------- +## Dependency Resolution +## ---------------------------------------------------------------------- + +# Force Gradle to use HTTPS for protocol versions. systemProp.https.protocols=TLSv1,TLSv1.1,TLSv1.2 -org.gradle.caching=true + +# Use strict dependency versions (optional). +# dependency.verification=strict + +## ---------------------------------------------------------------------- +## Build Cache & Configuration Cache (Experimental) +## ---------------------------------------------------------------------- + +# Enable configuration cache (speeds up subsequent builds). +# Note: May cause issues with some plugins; enable with caution. # org.gradle.configuration-cache=true -org.gradle.parallel=true -org.gradle.daemon=true -android.r8.version=8.6.17 \ No newline at end of file + +# If configuration cache is enabled, also enable this for better performance. +# org.gradle.configuration-cache.parallel=true + +## ---------------------------------------------------------------------- +## Miscellaneous +## ---------------------------------------------------------------------- + +# Gradle's internal logging level (quiet, warn, lifecycle, info, debug). +# org.gradle.logging.level=quiet + +# Set file encoding to UTF-8 (important for internationalization). +# org.gradle.jvmargs += -Dfile.encoding=UTF-8 # Already included in the JVM args above. + +# Version catalog support (if using libs.versions.toml). +# enableFeaturePreview("VERSION_CATALOGS") From 650b583edf5ec57d27b289d415583d16664917a9 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 19:40:48 +0530 Subject: [PATCH 62/66] Update asm_build.yml --- .github/workflows/asm_build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/asm_build.yml b/.github/workflows/asm_build.yml index 3acff057d..b1ed767e0 100644 --- a/.github/workflows/asm_build.yml +++ b/.github/workflows/asm_build.yml @@ -68,7 +68,7 @@ jobs: echo "=== SigningDirectory ===" ls -la core/app/signing/ || echo "core/app/signing directory not found" - name: Assemble Debug APK - run: ./gradlew :core:app:assembleDebug + run: ./gradlew :core:app:assembleDebug --stacktrace # run: ./gradlew :core:app:assembleRelease - name: List APK files (debug) run: ls -la core/app/build/outputs/apk/debug/ From 897220bd01a969c758f53ef33c5afc1714aa3af6 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 19:53:25 +0530 Subject: [PATCH 63/66] Update build.gradle.kts --- core/app/build.gradle.kts | 388 +++++++++++++++++++------------------- 1 file changed, 197 insertions(+), 191 deletions(-) diff --git a/core/app/build.gradle.kts b/core/app/build.gradle.kts index 38f3fc33e..6c558faa4 100755 --- a/core/app/build.gradle.kts +++ b/core/app/build.gradle.kts @@ -10,220 +10,226 @@ import com.tom.rv2ide.plugins.AndroidIDEAssetsPlugin import java.util.Properties plugins { - id("com.tom.rv2ide.core-app") - id("com.android.application") - id("kotlin-android") - id("kotlin-kapt") - id("kotlinx-serialization") - id("kotlin-parcelize") - id("androidx.navigation.safeargs.kotlin") - id("com.tom.rv2ide.desugaring") + id("com.tom.rv2ide.core-app") + id("com.android.application") + id("kotlin-android") + id("kotlin-kapt") + id("kotlinx-serialization") + id("kotlin-parcelize") + id("androidx.navigation.safeargs.kotlin") + id("com.tom.rv2ide.desugaring") } apply { plugin(AndroidIDEAssetsPlugin::class.java) } buildscript { - dependencies { - classpath(libs.logging.logback.core) - classpath(libs.composite.desugaringCore) - } -} - -tasks.configureEach { - if (name.contains("desugar", ignoreCase = true)) { - enabled = false + dependencies { + classpath(libs.logging.logback.core) + classpath(libs.composite.desugaringCore) } } +// ⚠️ यह पूरा ब्लॉक हटा दिया गया क्योंकि यह desugaring tasks को disable कर देता था, +// जिससे build fail होता था। अब desugaring सामान्य रूप से चलेगी। +// tasks.configureEach { +// if (name.contains("desugar", ignoreCase = true)) { +// enabled = false +// } +// } + configurations.all { - resolutionStrategy { - force("com.google.guava:guava:32.1.3-android") - eachDependency { - if (requested.group == "com.google.guava" && requested.name == "guava") { - if (requested.version?.contains("jre") == true) { - useVersion("32.1.3-android") + resolutionStrategy { + force("com.google.guava:guava:32.1.3-android") + eachDependency { + if (requested.group == "com.google.guava" && requested.name == "guava") { + if (requested.version?.contains("jre") == true) { + useVersion("32.1.3-android") + } + } } - } } - } } android { - namespace = BuildConfig.packageName - - defaultConfig { - applicationId = BuildConfig.packageName - vectorDrawables.useSupportLibrary = true - } - - experimentalProperties["android.experimental.enableGlobalSynthetics"] = true - - // FIX: Resource extraction error rokne ke liye - aaptOptions { - cruncherEnabled = false - } - - signingConfigs { - create("custom") { - val keyStorePath = "${rootProject.projectDir}/signing/signing-key.jks" - val keyStoreFile = file(keyStorePath) - val signing_storePassword = System.getenv("SIGNING_STORE_PASSWORD") ?: "" - val signing_keyPassword = System.getenv("SIGNING_KEY_PASSWORD") ?: "" - storeFile = keyStoreFile - storePassword = signing_storePassword - keyAlias = "AndroidCS" - keyPassword = signing_keyPassword - } - } - - androidResources { generateLocaleConfig = true } - - buildFeatures { - aidl = true - dataBinding = true - } - - buildTypes { - debug { signingConfig = signingConfigs.getByName("custom") } - release { - isShrinkResources = false - signingConfig = signingConfigs.getByName("custom") + namespace = BuildConfig.packageName + + defaultConfig { + applicationId = BuildConfig.packageName + vectorDrawables.useSupportLibrary = true + } + + experimentalProperties["android.experimental.enableGlobalSynthetics"] = true + + // ⚠️ 'cruncherEnabled' AGP 8+ में हटा दी गई है, इसलिए इसे हटाया गया। + // aaptOptions { + // cruncherEnabled = false + // } + + signingConfigs { + create("custom") { + val keyStorePath = "${rootProject.projectDir}/signing/signing-key.jks" + val keyStoreFile = file(keyStorePath) + val signing_storePassword = System.getenv("SIGNING_STORE_PASSWORD") ?: "" + val signing_keyPassword = System.getenv("SIGNING_KEY_PASSWORD") ?: "" + storeFile = keyStoreFile + storePassword = signing_storePassword + keyAlias = "AndroidCS" + keyPassword = signing_keyPassword + } + } + + androidResources { generateLocaleConfig = true } + + buildFeatures { + aidl = true + dataBinding = true + // buildConfig = true // AGP 8+ के लिए यह लाइन जरूरी हो सकती है, लेकिन gradle.properties में पहले से सेट है + } + + buildTypes { + debug { + signingConfig = signingConfigs.getByName("custom") + } + release { + isShrinkResources = false + signingConfig = signingConfigs.getByName("custom") + } } - } - - lint { - abortOnError = false - disable.addAll(arrayOf("VectorPath", "NestedWeights", "ContentDescription", "SmallSp")) - } - - // FIX: Packaging conflict ko solve karne ke liye - packaging { - resources { - excludes += "/META-INF/{AL2.0,LGPL2.1}" - pickFirsts += "kotlin/**.kotlin_builtins" - pickFirsts += "META-INF/LICENSE.md" - pickFirsts += "META-INF/LICENSE-notice.md" - pickFirsts += "META-INF/LICENSE" - pickFirsts += "META-INF/NOTICE" - pickFirsts += "THIRD-PARTY" + + lint { + abortOnError = false + disable.addAll(arrayOf("VectorPath", "NestedWeights", "ContentDescription", "SmallSp")) } - } - - applicationVariants.all { - val variant = this - variant.outputs.all { - val output = this as com.android.build.gradle.internal.api.BaseVariantOutputImpl - val versionName = variant.versionName ?: "unknown" - val buildType = variant.buildType.name - val archSuffix = "arm64-v8a" // Defaulting to arm64 for simplicity in server builds - val appName = "android-code-studio" - output.outputFileName = "${appName}-${archSuffix}-${buildType}-${versionName}.apk" + + packaging { + resources { + excludes += "/META-INF/{AL2.0,LGPL2.1}" + pickFirsts += "kotlin/**.kotlin_builtins" + pickFirsts += "META-INF/LICENSE.md" + pickFirsts += "META-INF/LICENSE-notice.md" + pickFirsts += "META-INF/LICENSE" + pickFirsts += "META-INF/NOTICE" + pickFirsts += "THIRD-PARTY" + } + } + + applicationVariants.all { + val variant = this + variant.outputs.all { + val output = this as com.android.build.gradle.internal.api.BaseVariantOutputImpl + val versionName = variant.versionName ?: "unknown" + val buildType = variant.buildType.name + val archSuffix = "arm64-v8a" // Defaulting to arm64 for simplicity in server builds + val appName = "android-code-studio" + output.outputFileName = "${appName}-${archSuffix}-${buildType}-${versionName}.apk" + } } - } } kapt { arguments { arg("eventBusIndex", "${BuildConfig.packageName}.events.AppEventsIndex") } } desugaring { - replacements { - includePackage("org.eclipse.jgit") - applyJavaIOReplacements() - } + replacements { + includePackage("org.eclipse.jgit") + applyJavaIOReplacements() + } } dependencies { - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") - implementation("org.tukaani:xz:1.9") - implementation("org.apache.commons:commons-compress:1.21") - implementation("com.github.Dimezis:BlurView:version-3.2.0") - implementation("androidx.security:security-crypto:1.1.0-alpha06") - implementation(projects.external.acsprovider) - implementation(projects.external.atc) - implementation(libs.external.customizable.cardview) - implementation(projects.external.logwire) - implementation(libs.external.seasonal.effects) - kapt(libs.common.glide.ap) - kapt(libs.google.auto.service) - kapt(projects.annotation.processors) - implementation(libs.common.editor) - implementation(libs.common.utilcode) - implementation(libs.common.glide) - implementation(libs.common.jsoup) - implementation(libs.common.kotlin.coroutines.android) - implementation(libs.common.retrofit) - implementation(libs.common.retrofit.gson) - implementation(libs.common.charts) - implementation(libs.common.hiddenApiBypass) - implementation(libs.aapt2.common) - implementation(libs.google.auto.service.annotations) - implementation(libs.google.gson) - implementation(libs.google.guava) - implementation("com.google.ai.client.generativeai:generativeai:0.9.0") { - exclude(group = "org.slf4j", module = "slf4j-api") - exclude(group = "org.slf4j", module = "slf4j-simple") - exclude(group = "org.slf4j", module = "slf4j-nop") - } - implementation("com.github.MiyazKaori:SilentInstaller:1.0.0-alpha") - implementation(libs.git.jgit) - implementation(libs.androidx.splashscreen) - implementation(libs.androidx.annotation) - implementation(libs.androidx.appcompat) - implementation(libs.androidx.cardview) - implementation(libs.androidx.constraintlayout) - implementation(libs.androidx.coordinatorlayout) - implementation(libs.androidx.drawer) - implementation(libs.androidx.grid) - implementation(libs.androidx.nav.fragment) - implementation(libs.androidx.nav.ui) - implementation(libs.androidx.preference) - implementation(libs.androidx.recyclerview) - implementation(libs.androidx.transition) - implementation(libs.androidx.vectors) - implementation(libs.androidx.animated.vectors) - implementation(libs.androidx.work) - implementation(libs.androidx.work.ktx) - implementation(libs.google.material) - implementation(libs.google.flexbox) - implementation(libs.androidx.core.ktx) - implementation(libs.common.kotlin) - implementation(libs.composite.appintro) - implementation(libs.composite.desugaringCore) - implementation(libs.composite.javapoet) - implementation(projects.core.projectdata) - implementation(projects.ideconfigurations) - implementation(projects.core.actions) - implementation(projects.core.common) - implementation(projects.core.indexingApi) - implementation(projects.core.indexingCore) - implementation(projects.core.lspApi) - implementation(projects.core.projects) - implementation(projects.core.resources) - implementation(projects.editor.impl) - implementation(projects.editor.lexers) - implementation(projects.event.eventbus) - implementation(projects.event.eventbusAndroid) - implementation(projects.event.eventbusEvents) - implementation(projects.java.javacServices) - implementation(projects.java.lspSetup) - implementation(projects.java.lsp) - implementation(projects.logging.idestats) - implementation(projects.logging.logsender) - implementation(projects.termux.application) - implementation(projects.termux.view) - implementation(projects.termux.emulator) - implementation(projects.termux.shared) - implementation(projects.tooling.api) - implementation(projects.tooling.pluginConfig) - implementation(projects.utilities.buildInfo) - implementation(projects.utilities.lookup) - implementation(projects.utilities.preferences) - implementation(projects.utilities.templatesApi) - implementation(projects.utilities.templatesImpl) - implementation(projects.treeview) - implementation(projects.utilities.uidesigner) - implementation(projects.utilities.xmlInflater) - implementation(projects.xml.aaptcompiler) - implementation(projects.xml.lsp) - implementation(projects.xml.utils) - compileOnly(projects.tooling.impl) + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") + implementation("org.tukaani:xz:1.9") + implementation("org.apache.commons:commons-compress:1.21") + implementation("com.github.Dimezis:BlurView:version-3.2.0") + implementation("androidx.security:security-crypto:1.1.0-alpha06") + implementation(projects.external.acsprovider) + implementation(projects.external.atc) + implementation(libs.external.customizable.cardview) + implementation(projects.external.logwire) + implementation(libs.external.seasonal.effects) + kapt(libs.common.glide.ap) + kapt(libs.google.auto.service) + kapt(projects.annotation.processors) + implementation(libs.common.editor) + implementation(libs.common.utilcode) + implementation(libs.common.glide) + implementation(libs.common.jsoup) + implementation(libs.common.kotlin.coroutines.android) + implementation(libs.common.retrofit) + implementation(libs.common.retrofit.gson) + implementation(libs.common.charts) + implementation(libs.common.hiddenApiBypass) + implementation(libs.aapt2.common) + implementation(libs.google.auto.service.annotations) + implementation(libs.google.gson) + implementation(libs.google.guava) + implementation("com.google.ai.client.generativeai:generativeai:0.9.0") { + exclude(group = "org.slf4j", module = "slf4j-api") + exclude(group = "org.slf4j", module = "slf4j-simple") + exclude(group = "org.slf4j", module = "slf4j-nop") + } + implementation("com.github.MiyazKaori:SilentInstaller:1.0.0-alpha") + implementation(libs.git.jgit) + implementation(libs.androidx.splashscreen) + implementation(libs.androidx.annotation) + implementation(libs.androidx.appcompat) + implementation(libs.androidx.cardview) + implementation(libs.androidx.constraintlayout) + implementation(libs.androidx.coordinatorlayout) + implementation(libs.androidx.drawer) + implementation(libs.androidx.grid) + implementation(libs.androidx.nav.fragment) + implementation(libs.androidx.nav.ui) + implementation(libs.androidx.preference) + implementation(libs.androidx.recyclerview) + implementation(libs.androidx.transition) + implementation(libs.androidx.vectors) + implementation(libs.androidx.animated.vectors) + implementation(libs.androidx.work) + implementation(libs.androidx.work.ktx) + implementation(libs.google.material) + implementation(libs.google.flexbox) + implementation(libs.androidx.core.ktx) + implementation(libs.common.kotlin) + implementation(libs.composite.appintro) + implementation(libs.composite.desugaringCore) + implementation(libs.composite.javapoet) + implementation(projects.core.projectdata) + implementation(projects.ideconfigurations) + implementation(projects.core.actions) + implementation(projects.core.common) + implementation(projects.core.indexingApi) + implementation(projects.core.indexingCore) + implementation(projects.core.lspApi) + implementation(projects.core.projects) + implementation(projects.core.resources) + implementation(projects.editor.impl) + implementation(projects.editor.lexers) + implementation(projects.event.eventbus) + implementation(projects.event.eventbusAndroid) + implementation(projects.event.eventbusEvents) + implementation(projects.java.javacServices) + implementation(projects.java.lspSetup) + implementation(projects.java.lsp) + implementation(projects.logging.idestats) + implementation(projects.logging.logsender) + implementation(projects.termux.application) + implementation(projects.termux.view) + implementation(projects.termux.emulator) + implementation(projects.termux.shared) + implementation(projects.tooling.api) + implementation(projects.tooling.pluginConfig) + implementation(projects.utilities.buildInfo) + implementation(projects.utilities.lookup) + implementation(projects.utilities.preferences) + implementation(projects.utilities.templatesApi) + implementation(projects.utilities.templatesImpl) + // ⚠️ सुनिश्चित करें कि 'treeview' module settings.gradle.kts में include है। + // अगर यह module मौजूद नहीं है तो यह line हटा दें या सही module लगाएँ। + implementation(projects.treeview) + implementation(projects.utilities.uidesigner) + implementation(projects.utilities.xmlInflater) + implementation(projects.xml.aaptcompiler) + implementation(projects.xml.lsp) + implementation(projects.xml.utils) + compileOnly(projects.tooling.impl) } From 856a4bed23807882a6dedbecf6f75c98e874e824 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 20:04:22 +0530 Subject: [PATCH 64/66] Update build.gradle.kts --- core/app/build.gradle.kts | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/core/app/build.gradle.kts b/core/app/build.gradle.kts index 6c558faa4..6f150c90c 100755 --- a/core/app/build.gradle.kts +++ b/core/app/build.gradle.kts @@ -1,5 +1,18 @@ /* - * This file is part of AndroidIDE. + * This file is part of AndroidCodeStudio. + * + * AndroidCodeStudio is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidCodeStudio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidCodeStudio. If not, see . */ @file:Suppress("UnstableApiUsage") @@ -29,8 +42,7 @@ buildscript { } } -// ⚠️ यह पूरा ब्लॉक हटा दिया गया क्योंकि यह desugaring tasks को disable कर देता था, -// जिससे build fail होता था। अब desugaring सामान्य रूप से चलेगी। +// ❌ पुराना block जो desugaring tasks को बंद करता था, अब हटा दिया गया है। // tasks.configureEach { // if (name.contains("desugar", ignoreCase = true)) { // enabled = false @@ -60,7 +72,7 @@ android { experimentalProperties["android.experimental.enableGlobalSynthetics"] = true - // ⚠️ 'cruncherEnabled' AGP 8+ में हटा दी गई है, इसलिए इसे हटाया गया। + // ❌ 'cruncherEnabled' AGP 8+ में हटा दी गई है – अब इसकी जरूरत नहीं। // aaptOptions { // cruncherEnabled = false // } @@ -83,7 +95,7 @@ android { buildFeatures { aidl = true dataBinding = true - // buildConfig = true // AGP 8+ के लिए यह लाइन जरूरी हो सकती है, लेकिन gradle.properties में पहले से सेट है + // buildConfig = true // AGP 8+ के लिए यह जरूरी हो सकता है, gradle.properties में पहले से है } buildTypes { @@ -223,9 +235,8 @@ dependencies { implementation(projects.utilities.preferences) implementation(projects.utilities.templatesApi) implementation(projects.utilities.templatesImpl) - // ⚠️ सुनिश्चित करें कि 'treeview' module settings.gradle.kts में include है। - // अगर यह module मौजूद नहीं है तो यह line हटा दें या सही module लगाएँ। - implementation(projects.treeview) + // ✅ सही path: utilities/treeview (settings.gradle.kts में include है) + implementation(projects.utilities.treeview) implementation(projects.utilities.uidesigner) implementation(projects.utilities.xmlInflater) implementation(projects.xml.aaptcompiler) From bc4ad99b66c8c64ca8bab90c1de3d06e5eca7b12 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 20:30:39 +0530 Subject: [PATCH 65/66] Update settings.gradle.kts --- .../build-deps/settings.gradle.kts | 154 +++++++++++++----- 1 file changed, 116 insertions(+), 38 deletions(-) diff --git a/composite-builds/build-deps/settings.gradle.kts b/composite-builds/build-deps/settings.gradle.kts index 23b082a9a..7e433a6e8 100644 --- a/composite-builds/build-deps/settings.gradle.kts +++ b/composite-builds/build-deps/settings.gradle.kts @@ -1,18 +1,18 @@ /* - * This file is part of AndroidIDE. + * This file is part of AndroidCodeStudio. * - * AndroidIDE is free software: you can redistribute it and/or modify + * AndroidCodeStudio is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * AndroidIDE is distributed in the hope that it will be useful, + * AndroidCodeStudio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with AndroidIDE. If not, see . + * along with AndroidCodeStudio. If not, see . */ @file:Suppress("UnstableApiUsage") @@ -20,13 +20,11 @@ enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") pluginManagement { - includeBuild("../build-logic") + includeBuild("composite-builds/build-logic") { + name = "build-logic" + } repositories { - // maven { url = uri("https://maven.aliyun.com/repository/gradle-plugin") } - // maven { url = uri("https://maven.aliyun.com/repository/central") } - // maven { url = uri("https://maven.aliyun.com/repository/google") } - gradlePluginPortal() google() mavenCentral() @@ -34,41 +32,121 @@ pluginManagement { } dependencyResolutionManagement { + val dependencySubstitutions = mapOf( + "build-deps" to arrayOf( + "appintro", + "fuzzysearch", + "google-java-format", + "java-compiler", + "javac", + "javapoet", + "jaxp", + "jdk-compiler", + "jdk-jdeps", + "jdt", + "layoutlib-api", + "logback-core" + ), + + "build-deps-common" to arrayOf( + "desugaring-core" + ) + ) + + for ((build, modules) in dependencySubstitutions) { + includeBuild("composite-builds/${build}") { + this.name = build + dependencySubstitution { + for (module in modules) { + substitute(module("com.tom.rv2ide.build:${module}")) + .using(project(":${module}")) + } + } + } + } + + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { - // maven { url = uri("https://maven.aliyun.com/repository/central") } - // maven { url = uri("https://maven.aliyun.com/repository/google") } + mavenLocal() google() mavenCentral() - } - - versionCatalogs { - create("libs") { - from(files("../../gradle/libs.versions.toml")) - } + maven { url = uri("https://jitpack.io") } + maven { url = uri("https://repo.gradle.org/gradle/libs-releases") } + maven { url = uri("https://www.jetbrains.com/intellij-repository/releases") } } } -include( - ":appintro", - ":fuzzysearch", - ":google-java-format", - ":javac", - ":javapoet", - ":jaxp", - ":java-compiler", - ":jdk-compiler", - ":jdk-jdeps", - ":jdt", - ":layoutlib-api", - ":logback-core", -) +gradle.rootProject { + val appMainVersion = System.getenv("MAIN_VERSION") ?: "1.0.0" + val revision = "r${System.getenv("REVISION_NUM") ?: "03"}" + val baseVersion = "$appMainVersion+gh.$revision" + println("Android code studio version: $baseVersion") + project.setProperty("version", baseVersion) +} -rootProject.name = "build-deps" +rootProject.name = "AndroidCodeStudio" -gradle.rootProject { +include( + ":annotation:annotations", + ":annotation:processors", + ":annotation:processors-ksp", - // required for setting SDK location for android modules - project.file("../../local.properties") - .takeIf { it.exists() } - ?.copyTo(project.file("local.properties"), overwrite = true) -} \ No newline at end of file + ":external:acsprovider", + ":external:atc", + ":core:projectdata", + ":external:logwire", + + // ":server:server", + // ":server:shared", + + ":core:actions", + ":core:app", + ":ideconfigurations", + ":core:common", + ":core:indexing-api", + ":core:indexing-core", + ":core:lsp-api", + ":core:lsp-models", + ":core:projects", + ":core:resources", + ":editor:api", + ":editor:impl", + ":editor:lexers", + ":editor:treesitter", + ":event:eventbus", + ":event:eventbus-android", + ":event:eventbus-events", + ":java:javac-services", + ":java:lsp-setup", + ":java:lsp", + ":logging:idestats", + ":logging:logger", + ":logging:logsender", + ":termux:application", + ":termux:emulator", + ":termux:shared", + ":termux:view", + ":tooling:api", + ":tooling:builder-model-impl", + ":tooling:events", + ":tooling:impl", + ":tooling:model", + ":tooling:plugin", + ":tooling:plugin-config", + ":utilities:build-info", + ":utilities:flashbar", + ":utilities:framework-stubs", + ":utilities:lookup", + ":utilities:preferences", + ":utilities:shared", + ":utilities:templates-api", + ":utilities:templates-impl", + ":utilities:treeview", + ":utilities:uidesigner", + ":utilities:xml-inflater", + ":xml:aaptcompiler", + ":xml:dom", + ":xml:lsp", + ":xml:resources-api", + ":xml:utils", +) From 5e0c912e83b188c06335ad50e19561a808d0e513 Mon Sep 17 00:00:00 2001 From: Website Date: Tue, 10 Mar 2026 21:50:56 +0530 Subject: [PATCH 66/66] Update settings.gradle.kts --- .../build-deps/settings.gradle.kts | 149 ++++-------------- 1 file changed, 33 insertions(+), 116 deletions(-) diff --git a/composite-builds/build-deps/settings.gradle.kts b/composite-builds/build-deps/settings.gradle.kts index 7e433a6e8..3d8d0dc40 100644 --- a/composite-builds/build-deps/settings.gradle.kts +++ b/composite-builds/build-deps/settings.gradle.kts @@ -1,18 +1,18 @@ /* - * This file is part of AndroidCodeStudio. + * This file is part of AndroidIDE. * - * AndroidCodeStudio is free software: you can redistribute it and/or modify + * AndroidIDE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * AndroidCodeStudio is distributed in the hope that it will be useful, + * AndroidIDE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with AndroidCodeStudio. If not, see . + * along with AndroidIDE. If not, see . */ @file:Suppress("UnstableApiUsage") @@ -20,9 +20,8 @@ enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") pluginManagement { - includeBuild("composite-builds/build-logic") { - name = "build-logic" - } + // ✅ सही path – root के build-logic को include kar rahe hain + includeBuild("../build-logic") repositories { gradlePluginPortal() @@ -32,121 +31,39 @@ pluginManagement { } dependencyResolutionManagement { - val dependencySubstitutions = mapOf( - "build-deps" to arrayOf( - "appintro", - "fuzzysearch", - "google-java-format", - "java-compiler", - "javac", - "javapoet", - "jaxp", - "jdk-compiler", - "jdk-jdeps", - "jdt", - "layoutlib-api", - "logback-core" - ), - - "build-deps-common" to arrayOf( - "desugaring-core" - ) - ) - - for ((build, modules) in dependencySubstitutions) { - includeBuild("composite-builds/${build}") { - this.name = build - dependencySubstitution { - for (module in modules) { - substitute(module("com.tom.rv2ide.build:${module}")) - .using(project(":${module}")) - } - } - } - } - - repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { - mavenLocal() google() mavenCentral() - maven { url = uri("https://jitpack.io") } - maven { url = uri("https://repo.gradle.org/gradle/libs-releases") } - maven { url = uri("https://www.jetbrains.com/intellij-repository/releases") } } -} -gradle.rootProject { - val appMainVersion = System.getenv("MAIN_VERSION") ?: "1.0.0" - val revision = "r${System.getenv("REVISION_NUM") ?: "03"}" - val baseVersion = "$appMainVersion+gh.$revision" - println("Android code studio version: $baseVersion") - project.setProperty("version", baseVersion) + versionCatalogs { + create("libs") { + from(files("../../gradle/libs.versions.toml")) + } + } } -rootProject.name = "AndroidCodeStudio" - include( - ":annotation:annotations", - ":annotation:processors", - ":annotation:processors-ksp", - - ":external:acsprovider", - ":external:atc", - ":core:projectdata", - ":external:logwire", - - // ":server:server", - // ":server:shared", - - ":core:actions", - ":core:app", - ":ideconfigurations", - ":core:common", - ":core:indexing-api", - ":core:indexing-core", - ":core:lsp-api", - ":core:lsp-models", - ":core:projects", - ":core:resources", - ":editor:api", - ":editor:impl", - ":editor:lexers", - ":editor:treesitter", - ":event:eventbus", - ":event:eventbus-android", - ":event:eventbus-events", - ":java:javac-services", - ":java:lsp-setup", - ":java:lsp", - ":logging:idestats", - ":logging:logger", - ":logging:logsender", - ":termux:application", - ":termux:emulator", - ":termux:shared", - ":termux:view", - ":tooling:api", - ":tooling:builder-model-impl", - ":tooling:events", - ":tooling:impl", - ":tooling:model", - ":tooling:plugin", - ":tooling:plugin-config", - ":utilities:build-info", - ":utilities:flashbar", - ":utilities:framework-stubs", - ":utilities:lookup", - ":utilities:preferences", - ":utilities:shared", - ":utilities:templates-api", - ":utilities:templates-impl", - ":utilities:treeview", - ":utilities:uidesigner", - ":utilities:xml-inflater", - ":xml:aaptcompiler", - ":xml:dom", - ":xml:lsp", - ":xml:resources-api", - ":xml:utils", + ":appintro", + ":fuzzysearch", + ":google-java-format", + ":javac", + ":javapoet", + ":jaxp", + ":java-compiler", + ":jdk-compiler", + ":jdk-jdeps", + ":jdt", + ":layoutlib-api", + ":logback-core", ) + +rootProject.name = "build-deps" + +gradle.rootProject { + + // required for setting SDK location for android modules + project.file("../../local.properties") + .takeIf { it.exists() } + ?.copyTo(project.file("local.properties"), overwrite = true) +}