From 456919df43349f0ff7a78562ecac2bd5a92c9f5a Mon Sep 17 00:00:00 2001 From: yilsem Date: Sat, 12 Sep 2026 16:02:23 +0300 Subject: [PATCH] build(mobile): require explicit validated Android release identity --- apps/mobile/README.md | 20 ++++++++++++++++++++ apps/mobile/android/app/build.gradle | 21 +++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/apps/mobile/README.md b/apps/mobile/README.md index ca86857..7032bf4 100644 --- a/apps/mobile/README.md +++ b/apps/mobile/README.md @@ -53,6 +53,26 @@ npm run android:sync --workspaces=false üretim imzası içermez ve kurulabilir sürüm olarak paylaşılmamalıdır. Özel üretim imza anahtarı oluşturulmadı; mağaza hesabı veya ücretli hizmet açılmadı. +Yayın adayı için sürüm ve Android sürüm kodu birlikte açıkça verilir: + +```powershell +.\android\gradlew.bat -p android assembleRelease '-PaiturkReleaseVersion=0.1.4-beta.1' '-PaiturkReleaseVersionCode=6' +``` + +Bu komut yine **imzasız** APK üretir; üretim imzasını veya cihaz kabulünü atlamaz. +İki parametreden yalnız biri, `-dev` etiketi veya 5 ve daha küçük sürüm kodu +verilirse derleme durur. Parametresiz geliştirici derlemesi `0.1.4-dev` / 5 kalır. +Sonraki yayınlarda sürüm kodunu son dağıtılmış APK'dan daha büyük seçin; buradaki +alt sınır yalnız mevcut geliştirme sürümünü korur, uzak yayın envanterini sorgulamaz. + +12 Eylül 2026: gerçek Gradle `assembleRelease` çalışması bu parametrelerle 55 +saniyede tamamlandı; `aapt2` uygulama kimliği, `0.1.4-beta.1` / 6 ve debug +bayrağının olmadığını doğruladı. Test çıktısının SHA-256 değeri +`a93b93b3080ec484cc998ef316528ff7b947fa366b2ff5de375386acc66fffc4`. +`apksigner verify` imzasız çıktıyı reddetti (beklenen sonuç). Ayrı gerçek Gradle +çalışmaları eksik sürüm kodunu, `0.1.4-dev` yayın etiketini ve sürüm kodu 5'i +reddetti. Bu çıktı yayımlanmadı; imza ve cihaz kabulü değildir. + ### Dağıtım APK'sının doğrulanması `scripts/verify-android-release.mjs` dağıtım öncesi salt okunur APK kontrolüdür. diff --git a/apps/mobile/android/app/build.gradle b/apps/mobile/android/app/build.gradle index 0e4c602..d8a0aa6 100644 --- a/apps/mobile/android/app/build.gradle +++ b/apps/mobile/android/app/build.gradle @@ -1,5 +1,22 @@ apply plugin: 'com.android.application' +// Release identity is explicit; ordinary developer builds retain the -dev label. +def releaseVersion = providers.gradleProperty('aiturkReleaseVersion').orNull +def releaseCode = providers.gradleProperty('aiturkReleaseVersionCode').orNull +if ((releaseVersion == null) != (releaseCode == null)) { + throw new GradleException('Both aiturkReleaseVersion and aiturkReleaseVersionCode are required') +} +def selectedVersionCode = 5 +if (releaseVersion != null) { + if (!(releaseVersion ==~ /\d+\.\d+\.\d+(?:-beta\.\d+)?/)) { + throw new GradleException('Release version must be X.Y.Z or X.Y.Z-beta.N; -dev is not a release') + } + if (!(releaseCode ==~ /[1-9]\d{0,9}/) || releaseCode.toLong() <= 5 || releaseCode.toLong() > 2100000000L) { + throw new GradleException('Release version code must be greater than 5 and at most 2100000000') + } + selectedVersionCode = releaseCode.toInteger() +} + android { namespace = "online.turkservis.aiturk.mobile" compileSdk = rootProject.ext.compileSdkVersion @@ -7,8 +24,8 @@ android { applicationId "online.turkservis.aiturk.mobile" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 5 - versionName "0.1.4-dev" + versionCode selectedVersionCode + versionName releaseVersion ?: "0.1.4-dev" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.