Skip to content

Commit 6f8351d

Browse files
committed
fix: publish release-signed apk
1 parent 735ddf7 commit 6f8351d

3 files changed

Lines changed: 42 additions & 2 deletions

File tree

.github/workflows/build-apk.yml

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,19 @@ jobs:
2626
echo "version_code=${GITHUB_RUN_NUMBER}" >> "$GITHUB_OUTPUT"
2727
echo "version_name=1.0.${GITHUB_RUN_NUMBER}" >> "$GITHUB_OUTPUT"
2828
29+
- name: Prepare release signing
30+
id: signing
31+
env:
32+
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
33+
run: |
34+
if [ -n "${ANDROID_KEYSTORE_BASE64:-}" ]; then
35+
KEYSTORE_FILE="$RUNNER_TEMP/release-keystore.jks"
36+
printf '%s' "$ANDROID_KEYSTORE_BASE64" | base64 -d > "$KEYSTORE_FILE"
37+
echo "keystore_file=$KEYSTORE_FILE" >> "$GITHUB_OUTPUT"
38+
else
39+
echo "keystore_file=" >> "$GITHUB_OUTPUT"
40+
fi
41+
2942
- name: Build Debug APK
3043
env:
3144
VERSION_CODE: ${{ steps.version.outputs.version_code }}
@@ -38,6 +51,10 @@ jobs:
3851
VERSION_CODE: ${{ steps.version.outputs.version_code }}
3952
VERSION_NAME: ${{ steps.version.outputs.version_name }}
4053
UPDATE_MANIFEST_URL: https://github.com/${{ github.repository }}/releases/download/app-latest/app-manifest.json
54+
ANDROID_KEYSTORE_FILE: ${{ steps.signing.outputs.keystore_file }}
55+
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
56+
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
57+
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
4158
run: nix develop --command ./gradlew assembleRelease
4259

4360
- name: Publish rolling app-latest release
@@ -52,11 +69,16 @@ jobs:
5269
TAG="app-latest"
5370
mkdir -p dist
5471
72+
if [ ! -f app/build/outputs/apk/release/app-release.apk ]; then
73+
echo "Signed release APK not found. Configure Android signing secrets before publishing."
74+
exit 1
75+
fi
76+
5577
git tag -f "$TAG"
5678
git push origin "refs/tags/$TAG" --force
5779
5880
gh release delete "$TAG" --yes --cleanup-tag=false 2>/dev/null || true
59-
cp app/build/outputs/apk/debug/*.apk dist/app.apk
81+
cp app/build/outputs/apk/release/app-release.apk dist/app.apk
6082
APK_SIZE=$(stat -c%s dist/app.apk)
6183
APK_SHA256=$(sha256sum dist/app.apk | awk '{print $1}')
6284

app/build.gradle.kts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,23 @@ android {
2121
)
2222
}
2323

24+
signingConfigs {
25+
val releaseKeystore = System.getenv("ANDROID_KEYSTORE_FILE")
26+
if (!releaseKeystore.isNullOrBlank()) {
27+
create("releaseFromEnv") {
28+
storeFile = file(releaseKeystore)
29+
storePassword = System.getenv("ANDROID_KEYSTORE_PASSWORD")
30+
keyAlias = System.getenv("ANDROID_KEY_ALIAS")
31+
keyPassword = System.getenv("ANDROID_KEY_PASSWORD")
32+
?: System.getenv("ANDROID_KEYSTORE_PASSWORD")
33+
}
34+
}
35+
}
36+
2437
buildTypes {
2538
release {
2639
isMinifyEnabled = false
40+
signingConfig = signingConfigs.findByName("releaseFromEnv")
2741
proguardFiles(
2842
getDefaultProguardFile("proguard-android-optimize.txt"),
2943
"proguard-rules.pro"

app/src/main/java/com/whispertranscriber/update/AppUpdateInstaller.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.content.Intent
55
import android.net.Uri
66
import android.os.Build
77
import android.provider.Settings
8+
import android.widget.Toast
89
import androidx.core.content.FileProvider
910
import java.io.File
1011

@@ -16,6 +17,7 @@ object AppUpdateInstaller {
1617
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
1718
}
1819
context.startActivity(settingsIntent)
20+
Toast.makeText(context, "Allow installs from this app, then tap Install Update again.", Toast.LENGTH_LONG).show()
1921
return
2022
}
2123

@@ -24,10 +26,12 @@ object AppUpdateInstaller {
2426
"${context.packageName}.fileprovider",
2527
apkFile
2628
)
27-
val intent = Intent(Intent.ACTION_VIEW).apply {
29+
val intent = Intent(Intent.ACTION_INSTALL_PACKAGE).apply {
2830
setDataAndType(uri, "application/vnd.android.package-archive")
2931
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
3032
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
33+
putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true)
34+
putExtra(Intent.EXTRA_RETURN_RESULT, true)
3135
}
3236
context.startActivity(intent)
3337
}

0 commit comments

Comments
 (0)