From 9314814ea4ad31e654c1633adec57628f83017a9 Mon Sep 17 00:00:00 2001 From: KaraZajac Date: Mon, 13 Jul 2026 17:11:07 -0400 Subject: [PATCH] =?UTF-8?q?v0.5.2=20=E2=80=94=20commit=20fixed=20debug=20k?= =?UTF-8?q?eystore=20for=20stable=20signing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every CI build previously minted a fresh debug keystore, so each release failed to install over the last (signature mismatch) — forcing an uninstall and loss of the on-device proxy token. Commit a fixed debug.keystore (a debug key is non-secret; password is the well-known "android") and point the debug signingConfig at it, so CI and local builds sign identically and updates install in place. No functional app changes. versionCode 17 -> 18, versionName 0.5.1 -> 0.5.2. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_015jgJnzMr2bdNuWcDX2xRUR --- README.md | 8 ++++++-- app/build.gradle.kts | 17 +++++++++++++++-- debug.keystore | Bin 0 -> 2666 bytes 3 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 debug.keystore diff --git a/README.md b/README.md index 0bb9609..2e7ee3d 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ on upward escalations — you don't have to be looking at the screen. > advertise/fuzz code from one of the reference projects is intentionally > excluded. -Latest release: [v0.5.1](https://github.com/KaraZajac/OVERWATCH/releases) (debug-signed APK, sideload). +Latest release: [v0.5.2](https://github.com/KaraZajac/OVERWATCH/releases) (debug-signed APK, sideload). --- @@ -132,7 +132,10 @@ Or download the latest debug-signed APK from Releases are cut by CI: pushing a `v*` tag runs `.github/workflows/release.yml`, which builds `:app:assembleDebug` and attaches the APK to a GitHub Release. No -build-time secrets — the app ships with no key or token. +build-time secrets — the app ships with no key or token. A fixed `debug.keystore` +is committed (a debug key is non-secret; password is the well-known `android`) so +every build — CI or local — signs identically and updates install in place +without an uninstall. --- @@ -208,6 +211,7 @@ field-tested. Current release **v0.5.1**. Notable changes: - v0.3.0–v0.3.2 — Floating threat-circle overlay (chat-bubble style) + drag/crash fixes. - v0.5.0 — Waze re-added via a key-protected Caddy proxy (`api.blackflagintel.com`): the OpenWeb Ninja key stays server-side, the app uses an encrypted per-device token. GitHub Actions release pipeline added. - v0.5.1 — UI: larger map circle with a threat-color ring, ⌖ user crosshair, source-color dots (Flock red / Waze blue / Citizen purple), START moved to the bottom. +- v0.5.2 — Committed a fixed debug keystore so CI + local builds sign identically; updates now install in place (no functional changes). ## License diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e2e83d7..4abc240 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -12,8 +12,21 @@ android { applicationId = "org.soulstone.overwatch" minSdk = 26 targetSdk = 35 - versionCode = 17 - versionName = "0.5.1" + versionCode = 18 + versionName = "0.5.2" + } + + // Fixed debug keystore committed to the repo (a debug key is non-secret — its + // password is the well-known "android") so CI and local builds sign + // identically. Without it each CI build minted a fresh debug key and updates + // wouldn't install over the previous one. + signingConfigs { + getByName("debug") { + storeFile = rootProject.file("debug.keystore") + storePassword = "android" + keyAlias = "androiddebugkey" + keyPassword = "android" + } } buildTypes { diff --git a/debug.keystore b/debug.keystore new file mode 100644 index 0000000000000000000000000000000000000000..c9439212ad2568d3c0809f1a586eb98372f80c70 GIT binary patch literal 2666 zcma)8X*kpk_nsLuvW>05gi4rX?Kk#OJY*e0H1@HKrBIeErODRVvkjFkWs9fBoO9=XyWA?}u~U=iK+X&&T^Z0Ez7y1k41G*tnTlrJ@a@ci`Y- z;9L?L7)oM207$HR014Lm9}=tzN`jRi(Zxqq$jtt47Y7>{l1qYV9+4M;YkwRtIA8;) z{xfm_(oh6fa;*X-XdmM#={&S4K8&N*TZcj*65J552*AP2^8XhhtS}I8l9|;h+5qgv z1O-b$xpg?zO_n}=ud20odCnxCbO0qm-$NI!#4Q>0@2ptxcWnEOWz4Sqc4C~NCn;)D zQ+(3+8`37#<4iwntuHscO};E(b6Z1_+4OmgzfNgBLqcOKe^@WXUtX;;am5%)dhp5o zRwr@`4RXX7pJlQR2go=@$dq0aFQFH}`Pp1(~m%ByZ1bM0-@YLS=0(<=AI*i*`=Y_I`FeK5cGwwWM zW$`0iaHzq^L-BG%+ebpMW9FAsceSBbTVD^lKB7p{SKCw>ph@wuunZ|pd@u3@nyt?X z&j%Hap)@g=-wLAx#kxf*_xZwvZciKeHYAnW%}*#U*H;z9meCyO(-W;_2b099^eYNv zOGrLn@pS!h|B`cEg+4lWiWT&e#=XBpi3qa4_J5ktua=fE-@9Ni=L&4~tsOnaQ}n zF}#q0VlI9E%_E4Puz%i*iqT4_!Zl+PZmxP9mt8>}n=OwUD}>ku`w31IKEZ~LkHtTt zSj?gaQQekb0s@9S+tz9q3*bncbXJTNEMKp~@SJn{U0U$F3TvW*O`9ltnb0rjOk1m0 zzQ6Zo$Oh4^V7!mf`{D`h#{^gEJ~=xJ&X^2Qj-n5KI zP)upfgGs6V$MUMPc{@UciEt5--fxb;fScpC($_Z)=+JzipQbg?%`ylhuU& zzNokvOxxI0cSndt5T!f_m(bmqIBuTB`x=isge?!mD40>{OtEy$&f*3tG6?L=li0!> z+Ns^*Soyq<_Z@PVAg^ql_}!M{m_D8dYSg1+l^uu<++D1T;*8>r7J9os&6l0%f*`+z8twQ&D?ow2c_&>-N|3 zV*8_+3!axth$8_vAQiJ>>`iA-WfZPK)Ty(o`D$ls_grPm#Ux;uS4+BFWt8!^?l=Q; zTx(WJR=!y6z|(hELPlw5TQ0{LWngmZ2`K6j&i(0rhtR|Eb?w&TYXxpO2$@5>?91+l zg{xj#WvkswX{E4Wqs_O3``(<|j1;zqZ8|HD22QK>-HKMdy4{n2-FR6ySLY?ioRxUg&sK(?}5)sqe3g7)_8iF$`0=%EeNp93($9 z?PXTu9Pz{X6D7KF8CN7lgx+{>$NVPG5Xm_}9nFBpa_V@6Hk~-_eDn*mcyK>CJOkQ+DYh1z({#oZk zBcQxE4=**!feoWl`0i(d z96bq$4>(mInJH!Yx}TMvET7649P0d__$**cLb;J8YtF^QA@_xKZ;Q#E*c8L4m}8m)WBbk4wBkbC&zDy)-*+XBH=8gKJ#cMPI!=l+qkHRV^=W|yd_ zSyjl_Op}#){Ij)CE(8)^^SGXzULax2R5nA?wS-+tmY*u}i?kdb1xjLW?q@YHYwVBj z7`m>lR&e-?wS)2H?*{U@-6T4OO{KoN7&o4w=%}um-4)-=Ru0#BF2}q@yDu^6S#IR5 zv}Xvv(FJJ|JfA+IrjdaA!BY7`NQ4?@!-8uN=3<*TP#Dhq>t{MI&_LvT;?k%@caO!p zI{5U9zDy#nB=(PJb=|4d)yT@xqdARXz-x}!JS(|?#jLbJC~s5{HE!N{mAAqq?C*?j zN;6#zLHxMittfM9l3){dwLO}AKgcO|=#I;jrfqnh1}?sJut9(3Sc?S5%ed_Lyo|zg z5}gB`g`ZBO;!cwF>py94xC^*v>_(XW*!V1dooV~!_skL8f_65IFhnA|7+vWjGb!<# zr83vaW`XZnRX>EUn!V|aEh($c>&G7t__grrN1<7VKOFJCiYZ}Y>)3-xVf^RL$%{x8 zu>W(nZNX}LHPnE0;rdQ^OfjK?(1E~}_>U7WAs_0mNXGhvdK!z0Y_tXV`ZQ<5kv(=M zbA!W?NZ~nuZSzH>fnT)=?DI^8iG+a1MiFQNR-s^oj1{a+ZsYlhrXmksRc!mwVk!Kt z!ygo~GplVDe2rQoZExrqMb~g;tG|Z?+9YRu=?Ug$E3BS1J)DyU)DFnK4DvOn$m3kl zn3Y$poa4EZcP6DZ9JK#(6klGP&^pfkVw(IWeW5RMn8}p=&`AmNF^G)AMB!)~5C~^Bt_X<5w1j)k6OJyKxMA zqtqO1QXO{7H!w@-*%M~JufEE?{A3oxDhmd62xD~NCfRv=y4&Io-Z-&9N$x~%+`Zge z$hyV#C2>v>wW?OQI?jB)d^H`B|A2qkS--;7{LlXd0mDF05qdMX4^-f4xvq)& zNtLE=LVqdNiu0a@zmHJAV2e3@F9wRZX*Uw%Kv%B6hl?;WF5+lPA;VMtFCzX0+hxwN literal 0 HcmV?d00001