build(android): release signing + mirror/JDK setup; native-feel CSS
CI/CD / CI - API (dotnet build + engine sim) (push) Successful in 4m5s
CI/CD / CI - Web (tsc + next build) (push) Successful in 1m6s
CI/CD / Deploy - local stack (db + server + web) (push) Successful in 1m1s

- Release signing via android/keystore.properties (git-ignored); build.gradle
  signs release builds when the props file is present, stays unsigned otherwise.
- android/mirror-init.gradle: injects the myket.ir Maven mirror into every
  project's buildscript (dl.google.com is unreachable here) and pins Build-Tools
  to the installed 36.0.0. Build with:
    gradlew assembleRelease bundleRelease -I mirror-init.gradle
  (JAVA_HOME must point at a JDK 21 — Capacitor 8 compiles against Java 21.)
- gitignore keystores, keystore.properties, and /dist artifacts.
- Native-app feel: kill tap-highlight, long-press callout, and stray text
  selection (inputs/messages opt back in); touch-action: manipulation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
soroush.asadi
2026-06-11 22:34:15 +03:30
parent 857287fa84
commit 55c0407d73
5 changed files with 76 additions and 0 deletions
+5
View File
@@ -99,3 +99,8 @@ app/src/main/assets/public
app/src/main/assets/capacitor.config.json
app/src/main/assets/capacitor.plugins.json
app/src/main/res/xml/config.xml
# Release signing — NEVER commit (back these up separately!)
keystore.properties
*.jks
*.keystore
+22
View File
@@ -1,5 +1,14 @@
apply plugin: 'com.android.application'
// Release signing is read from android/keystore.properties (git-ignored). When it
// is absent (e.g. fresh checkout / CI without secrets) the release build stays
// unsigned instead of failing the configuration.
def keystorePropsFile = rootProject.file("keystore.properties")
def keystoreProps = new Properties()
if (keystorePropsFile.exists()) {
keystoreProps.load(new FileInputStream(keystorePropsFile))
}
android {
namespace = "com.bargevasat.app"
compileSdk = rootProject.ext.compileSdkVersion
@@ -16,8 +25,21 @@ android {
ignoreAssetsPattern = '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~'
}
}
signingConfigs {
if (keystorePropsFile.exists()) {
release {
storeFile file(keystoreProps['storeFile'])
storePassword keystoreProps['storePassword']
keyAlias keystoreProps['keyAlias']
keyPassword keystoreProps['keyPassword']
}
}
}
buildTypes {
release {
if (keystorePropsFile.exists()) {
signingConfig signingConfigs.release
}
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
+24
View File
@@ -0,0 +1,24 @@
// Injects the myket.ir Maven mirror into every project's buildscript + normal
// repositories. Needed because dl.google.com is unreachable here and some
// Capacitor subprojects declare only google()/mavenCentral() in node_modules.
// Pass on the command line with: gradlew -I mirror-init.gradle <task>
allprojects {
buildscript {
repositories {
maven { url 'https://maven.myket.ir' }
maven { url 'https://mirror.abrha.net/repository/maven/' }
}
}
repositories {
maven { url 'https://maven.myket.ir' }
maven { url 'https://mirror.abrha.net/repository/maven/' }
}
// Build-Tools 35.0.0 isn't installed (and can't be fetched — Google is
// blocked here). Pin every Android module to the installed 36.0.0.
afterEvaluate { proj ->
def android = proj.extensions.findByName('android')
if (android != null) {
android.buildToolsVersion = '36.0.0'
}
}
}