Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Build & Sign Android APK #227

Build & Sign Android APK

Build & Sign Android APK #227

name: Build & Sign Android APK
on:
push:
branches: [ main ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Source
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
- name: Install Dependencies
run: npm ci
- name: Fetch OCR Binaries (Global Version Only)
run: |
mkdir -p public/tesseract
curl -Lo public/tesseract/tesseract-core.wasm https://unpkg.com/[email protected]/tesseract-core.wasm
curl -Lo public/tesseract/tesseract-core-simd.wasm https://unpkg.com/[email protected]/tesseract-core-simd.wasm
curl -Lo public/tesseract/tesseract-core-lstm.wasm https://unpkg.com/[email protected]/tesseract-core-lstm.wasm
curl -Lo public/tesseract/tesseract-core.wasm.js https://unpkg.com/[email protected]/tesseract-core.wasm.js
curl -Lo public/tesseract/worker.min.js https://unpkg.com/[email protected]/dist/worker.min.js
curl -Lo public/tesseract/eng.traineddata.gz https://raw.githubusercontent.com/naptha/tessdata/gh-pages/4.0.0/eng.traineddata.gz
gunzip public/tesseract/eng.traineddata.gz
- name: Build Web Assets (Global)
run: npm run build
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '21'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
with:
gradle-version: wrapper
cache-disabled: true
- name: Sync Capacitor
run: npx cap sync android
- name: Build Global APK
run: |
cd android
chmod +x gradlew
./gradlew assembleRelease
mv app/build/outputs/apk/release/app-release-unsigned.apk ../paperknife-global-unsigned.apk
- name: Build F-Droid Lite APK (No OCR)
run: |
# Clean assets
rm -rf public/tesseract/
# Rebuild without OCR using environment variable
export VITE_DISABLE_OCR=true
npm run build
npx cap sync android
cd android
./gradlew assembleRelease
mv app/build/outputs/apk/release/app-release-unsigned.apk ../paperknife-fdroid-unsigned.apk
- name: Sign Both APKs
id: sign_app
uses: ilharp/sign-android-release@v2
with:
releaseDir: .
signingKey: ${{ secrets.ANDROID_SIGNING_KEY }}
keyAlias: ${{ secrets.ANDROID_ALIAS }}
keyStorePassword: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
keyPassword: ${{ secrets.ANDROID_KEY_PASSWORD }}
buildToolsVersion: "34.0.0"
- name: Rename & Prepare Artifacts
run: |
VERSION=$(node -p "require('./package.json').version")
cp paperknife-global-unsigned-signed.apk "paperknife-v${VERSION}.apk"
cp paperknife-fdroid-unsigned-signed.apk "paperknife-lite-v${VERSION}.apk"
echo "APP_VERSION=${VERSION}" >> $GITHUB_ENV
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: PaperKnife-v${{ env.APP_VERSION }}
path: |
paperknife-v${{ env.APP_VERSION }}.apk
paperknife-lite-v${{ env.APP_VERSION }}.apk
if-no-files-found: error