cd /home/def/outsidethebox/otb-cloud-android || exit 1 set -e BACKUPDIR="/home/def/backuphere/otb-cloud-android" mkdir -p "$BACKUPDIR" mkdir -p /home/def/outsidethebox/apk-drop echo "===== BACKUP =====" cp /home/def/outsidethebox/otb-cloud-android/app/build.gradle \ "$BACKUPDIR/app.build.gradle.$(date +%Y%m%d-%H%M%S).bak" cp /home/def/outsidethebox/otb-cloud-android/app/src/main/AndroidManifest.xml \ "$BACKUPDIR/AndroidManifest.xml.$(date +%Y%m%d-%H%M%S).bak" cp /home/def/outsidethebox/otb-cloud-android/app/src/main/java/top/outsidethebox/otbcloud/MainActivity.kt \ "$BACKUPDIR/MainActivity.kt.$(date +%Y%m%d-%H%M%S).bak" cp /home/def/outsidethebox/otb-cloud-android/app/src/main/res/layout/activity_main.xml \ "$BACKUPDIR/activity_main.xml.$(date +%Y%m%d-%H%M%S).bak" echo "===== PATCH /home/def/outsidethebox/otb-cloud-android/app/src/main/java/top/outsidethebox/otbcloud/MainActivity.kt =====" python3 - << 'PY' from pathlib import Path p = Path("/home/def/outsidethebox/otb-cloud-android/app/src/main/java/top/outsidethebox/otbcloud/MainActivity.kt") text = p.read_text() text = text.replace('private const val VIDEO_BATCH_SIZE = 5', 'private const val VIDEO_BATCH_SIZE = 2') text = text.replace('private const val IMAGE_BATCH_SIZE = 50', 'private const val IMAGE_BATCH_SIZE = 25') text = text.replace('private const val PAUSE_BETWEEN_BATCHES_MS = 800L', 'private const val PAUSE_BETWEEN_BATCHES_MS = 1500L') old = ''' val ok = uploadSingleFile(deviceUuid, item) if (ok) { uploaded += 1 } else { failed += 1 } ''' new = ''' val ok = uploadSingleFile(deviceUuid, item) if (ok) { uploaded += 1 } else { failed += 1 } try { Thread.sleep(300L) } catch (_: Exception) { } System.gc() ''' if old not in text: raise SystemExit("FAILED: upload loop block not found in MainActivity.kt") text = text.replace(old, new, 1) p.write_text(text) print("MainActivity.kt patched") PY echo "===== PATCH /home/def/outsidethebox/otb-cloud-android/app/build.gradle =====" python3 - << 'PY' from pathlib import Path import re p = Path("/home/def/outsidethebox/otb-cloud-android/app/build.gradle") text = p.read_text() text = re.sub(r'versionCode\s+\d+', 'versionCode 22', text) text = re.sub(r'versionName\s+"[^"]+"', 'versionName "0.2.2"', text) p.write_text(text) print("build.gradle updated") PY echo "===== PATCH /home/def/outsidethebox/otb-cloud-android/app/src/main/AndroidManifest.xml =====" python3 - << 'PY' from pathlib import Path p = Path("/home/def/outsidethebox/otb-cloud-android/app/src/main/AndroidManifest.xml") text = p.read_text() for old in ['OTB Cloud v0.2.1', 'OTB Cloud v0.2.0', 'OTB Cloud v0.1.9', 'OTB Cloud v0.1.8']: text = text.replace(f'android:label="{old}"', 'android:label="OTB Cloud v0.2.2"') p.write_text(text) print("AndroidManifest.xml updated") PY echo "===== PATCH /home/def/outsidethebox/otb-cloud-android/app/src/main/res/layout/activity_main.xml =====" python3 - << 'PY' from pathlib import Path p = Path("/home/def/outsidethebox/otb-cloud-android/app/src/main/res/layout/activity_main.xml") text = p.read_text() for old in ['OTB Cloud v0.2.1', 'OTB Cloud v0.2.0', 'OTB Cloud v0.1.9', 'OTB Cloud v0.1.8']: text = text.replace(old, 'OTB Cloud v0.2.2') for old in ['Android Backup Client v0.2.1', 'Android Backup Client v0.2.0', 'Android Backup Client v0.1.9', 'Android Backup Client v0.1.8']: text = text.replace(old, 'Android Backup Client v0.2.2') p.write_text(text) print("activity_main.xml updated") PY echo "===== VERIFY SOURCE =====" grep -Rn --exclude-dir=.gradle --exclude-dir=build --exclude="*.bak*" '0.2.2\|0.2.1\|0.2.0\|0.1.9\|0.1.8' \ /home/def/outsidethebox/otb-cloud-android/app \ /home/def/outsidethebox/otb-cloud-android/app/build.gradle || true echo "===== BUILD =====" cd /home/def/outsidethebox/otb-cloud-android || exit 1 ./gradlew clean assembleDebug --no-daemon echo "===== COPY APK =====" cp /home/def/outsidethebox/otb-cloud-android/app/build/outputs/apk/debug/app-debug.apk \ /home/def/outsidethebox/apk-drop/otb-cloud-v0.2.2.apk echo "===== VERIFY APK VERSION =====" aapt dump badging /home/def/outsidethebox/otb-cloud-android/app/build/outputs/apk/debug/app-debug.apk 2>/dev/null | grep version || true echo "===== FINAL APK =====" ls -lh /home/def/outsidethebox/apk-drop/otb-cloud-v0.2.2.apk