mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-08-18 04:38:10 +02:00
Merge pull request #1940 from ImranR98/dev
Translation fix, Flutter/package updates, GitHub action security improvement
This commit is contained in:
2
.flutter
2
.flutter
Submodule .flutter updated: 2663184aa7...603104015d
38
.github/workflows/release.yml
vendored
38
.github/workflows/release.yml
vendored
@@ -6,9 +6,6 @@ on:
|
|||||||
beta:
|
beta:
|
||||||
type: boolean
|
type: boolean
|
||||||
description: Is beta?
|
description: Is beta?
|
||||||
draft:
|
|
||||||
type: boolean
|
|
||||||
description: Is draft?
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@@ -27,13 +24,6 @@ jobs:
|
|||||||
id: flutter_doctor
|
id: flutter_doctor
|
||||||
run: |
|
run: |
|
||||||
flutter doctor -v
|
flutter doctor -v
|
||||||
|
|
||||||
- name: Import GPG key
|
|
||||||
id: import_pgp_key
|
|
||||||
uses: crazy-max/ghaction-import-gpg@v6
|
|
||||||
with:
|
|
||||||
gpg_private_key: ${{ secrets.PGP_KEY_BASE64 }}
|
|
||||||
passphrase: ${{ secrets.PGP_PASSPHRASE }}
|
|
||||||
|
|
||||||
- name: Check submodule
|
- name: Check submodule
|
||||||
id: check_submodule
|
id: check_submodule
|
||||||
@@ -57,24 +47,13 @@ jobs:
|
|||||||
for file in build/app/outputs/flutter-apk/app-*normal*.apk*; do mv "$file" "${file//-normal/}"; done
|
for file in build/app/outputs/flutter-apk/app-*normal*.apk*; do mv "$file" "${file//-normal/}"; done
|
||||||
flutter build apk --flavor fdroid -t lib/main_fdroid.dart && flutter build apk --split-per-abi --flavor fdroid -t lib/main_fdroid.dart
|
flutter build apk --flavor fdroid -t lib/main_fdroid.dart && flutter build apk --split-per-abi --flavor fdroid -t lib/main_fdroid.dart
|
||||||
rm ./build/app/outputs/flutter-apk/*.sha1
|
rm ./build/app/outputs/flutter-apk/*.sha1
|
||||||
|
cp ./sign.sh ./build/app/outputs/flutter-apk/
|
||||||
ls -l ./build/app/outputs/flutter-apk/
|
ls -l ./build/app/outputs/flutter-apk/
|
||||||
|
|
||||||
- name: Sign APKs
|
- name: Save Unsigned APKs as Action Artifacts
|
||||||
env:
|
uses: actions/upload-artifact@v4
|
||||||
KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
|
with:
|
||||||
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
|
path: build/app/outputs/flutter-apk/*
|
||||||
PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }}
|
|
||||||
run: |
|
|
||||||
echo "${KEYSTORE_BASE64}" | base64 -d > apksign.keystore
|
|
||||||
for apk in ./build/app/outputs/flutter-apk/*-release*.apk; do
|
|
||||||
unsignedFn=${apk/-release/-unsigned}
|
|
||||||
mv "$apk" "$unsignedFn"
|
|
||||||
${ANDROID_HOME}/build-tools/$(ls ${ANDROID_HOME}/build-tools/ | tail -1)/apksigner sign --ks apksign.keystore --ks-pass pass:"${KEYSTORE_PASSWORD}" --out "${apk}" "${unsignedFn}"
|
|
||||||
sha256sum ${apk} | cut -d " " -f 1 > "$apk".sha256
|
|
||||||
gpg --batch --pinentry-mode loopback --passphrase "${PGP_PASSPHRASE}" --sign --detach-sig "$apk".sha256
|
|
||||||
done
|
|
||||||
rm apksign.keystore
|
|
||||||
PGP_KEY_FINGERPRINT="${{ steps.import_pgp_key.outputs.fingerprint }}"
|
|
||||||
|
|
||||||
- name: Create Tag
|
- name: Create Tag
|
||||||
uses: mathieudutour/github-tag-action@v6.1
|
uses: mathieudutour/github-tag-action@v6.1
|
||||||
@@ -83,12 +62,11 @@ jobs:
|
|||||||
custom_tag: "${{ steps.extract_version.outputs.tag }}"
|
custom_tag: "${{ steps.extract_version.outputs.tag }}"
|
||||||
tag_prefix: ""
|
tag_prefix: ""
|
||||||
|
|
||||||
- name: Create Release And Upload APKs
|
- name: Create Draft Release
|
||||||
uses: ncipollo/release-action@v1
|
uses: ncipollo/release-action@v1
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GH_ACCESS_TOKEN }}
|
token: ${{ secrets.GH_ACCESS_TOKEN }}
|
||||||
tag: "${{ steps.extract_version.outputs.tag }}"
|
tag: "${{ steps.extract_version.outputs.tag }}"
|
||||||
prerelease: "${{ steps.extract_version.outputs.beta }}"
|
prerelease: "${{ steps.extract_version.outputs.beta }}"
|
||||||
draft: "${{ inputs.draft }}"
|
draft: "true"
|
||||||
artifacts: ./build/app/outputs/flutter-apk/*-release*.apk*
|
|
||||||
generateReleaseNotes: true
|
generateReleaseNotes: true
|
||||||
|
71
.github/workflows/temp.yml
vendored
71
.github/workflows/temp.yml
vendored
@@ -1,71 +0,0 @@
|
|||||||
name: Playing around (temp)
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
beta:
|
|
||||||
type: boolean
|
|
||||||
description: Is beta?
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- uses: subosito/flutter-action@v2
|
|
||||||
- uses: actions/setup-java@v4
|
|
||||||
with:
|
|
||||||
distribution: 'temurin' # See 'Supported distributions' for available options
|
|
||||||
java-version: '17'
|
|
||||||
|
|
||||||
- name: Flutter Doctor
|
|
||||||
id: flutter_doctor
|
|
||||||
run: |
|
|
||||||
flutter doctor -v
|
|
||||||
|
|
||||||
- name: Check submodule
|
|
||||||
id: check_submodule
|
|
||||||
run: |
|
|
||||||
git checkout ${{ inputs.checkout }}
|
|
||||||
|
|
||||||
- name: Extract Version
|
|
||||||
id: extract_version
|
|
||||||
run: |
|
|
||||||
VERSION=$(grep -oP "^version: [^\+]+" pubspec.yaml | tail -c +10)
|
|
||||||
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
||||||
if [ ${{ inputs.beta }} == true ]; then BETA=true; else BETA=false; fi
|
|
||||||
echo "beta=$BETA" >> $GITHUB_OUTPUT
|
|
||||||
TAG="v$VERSION"
|
|
||||||
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Build APKs
|
|
||||||
run: |
|
|
||||||
sed -i 's/signingConfig signingConfigs.release//g' android/app/build.gradle
|
|
||||||
flutter build apk --flavor normal && flutter build apk --split-per-abi --flavor normal
|
|
||||||
for file in build/app/outputs/flutter-apk/app-*normal*.apk*; do mv "$file" "${file//-normal/}"; done
|
|
||||||
flutter build apk --flavor fdroid -t lib/main_fdroid.dart && flutter build apk --split-per-abi --flavor fdroid -t lib/main_fdroid.dart
|
|
||||||
rm ./build/app/outputs/flutter-apk/*.sha1
|
|
||||||
ls -l ./build/app/outputs/flutter-apk/
|
|
||||||
|
|
||||||
- name: Save Unsigned APKs as Action Artifacts
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
path: build/app/outputs/flutter-apk/*
|
|
||||||
|
|
||||||
#- name: Create Tag
|
|
||||||
# uses: mathieudutour/github-tag-action@v6.1
|
|
||||||
# with:
|
|
||||||
# github_token: ${{ secrets.GH_ACCESS_TOKEN }}
|
|
||||||
# custom_tag: "${{ steps.extract_version.outputs.tag }}"
|
|
||||||
# tag_prefix: ""
|
|
||||||
|
|
||||||
#- name: Create Draft Release
|
|
||||||
# uses: ncipollo/release-action@v1
|
|
||||||
# with:
|
|
||||||
# token: ${{ secrets.GH_ACCESS_TOKEN }}
|
|
||||||
# tag: "${{ steps.extract_version.outputs.tag }}"
|
|
||||||
# prerelease: "${{ steps.extract_version.outputs.beta }}"
|
|
||||||
# draft: "true"
|
|
||||||
# generateReleaseNotes: true
|
|
@@ -22,6 +22,9 @@
|
|||||||
"requiredInBrackets": "(Wymagane)",
|
"requiredInBrackets": "(Wymagane)",
|
||||||
"dropdownNoOptsError": "BŁĄD: LISTA ROZWIJANA MUSI MIEĆ CO NAJMNIEJ JEDNĄ OPCJĘ",
|
"dropdownNoOptsError": "BŁĄD: LISTA ROZWIJANA MUSI MIEĆ CO NAJMNIEJ JEDNĄ OPCJĘ",
|
||||||
"colour": "Kolor",
|
"colour": "Kolor",
|
||||||
|
"standard": "Domyślny",
|
||||||
|
"custom": "Własny",
|
||||||
|
"useMaterialYou": "Material You",
|
||||||
"githubStarredRepos": "Repozytoria GitHub oznaczone gwiazdką",
|
"githubStarredRepos": "Repozytoria GitHub oznaczone gwiazdką",
|
||||||
"uname": "Nazwa użytkownika",
|
"uname": "Nazwa użytkownika",
|
||||||
"wrongArgNum": "Nieprawidłowa liczba podanych argumentów",
|
"wrongArgNum": "Nieprawidłowa liczba podanych argumentów",
|
||||||
@@ -51,9 +54,8 @@
|
|||||||
"percentProgress": "Postęp: {}%",
|
"percentProgress": "Postęp: {}%",
|
||||||
"pleaseWait": "Proszę czekać",
|
"pleaseWait": "Proszę czekać",
|
||||||
"updateAvailable": "Dostępna aktualizacja",
|
"updateAvailable": "Dostępna aktualizacja",
|
||||||
"estimateInBracketsShort": "(Szac.)",
|
|
||||||
"notInstalled": "Nie zainstalowano",
|
"notInstalled": "Nie zainstalowano",
|
||||||
"estimateInBrackets": "(Szacunkowo)",
|
"pseudoVersion": "pseudo-wersja",
|
||||||
"selectAll": "Zaznacz wszystkie",
|
"selectAll": "Zaznacz wszystkie",
|
||||||
"deselectX": "Odznacz {}",
|
"deselectX": "Odznacz {}",
|
||||||
"xWillBeRemovedButRemainInstalled": "{} zostanie usunięty z Obtainium, ale pozostanie zainstalowany na urządzeniu.",
|
"xWillBeRemovedButRemainInstalled": "{} zostanie usunięty z Obtainium, ale pozostanie zainstalowany na urządzeniu.",
|
||||||
@@ -73,13 +75,14 @@
|
|||||||
"unpinFromTop": "Odepnij",
|
"unpinFromTop": "Odepnij",
|
||||||
"resetInstallStatusForSelectedAppsQuestion": "Zresetować status instalacji dla wybranych aplikacji?",
|
"resetInstallStatusForSelectedAppsQuestion": "Zresetować status instalacji dla wybranych aplikacji?",
|
||||||
"installStatusOfXWillBeResetExplanation": "Stan instalacji wybranych aplikacji zostanie zresetowany.\n\nMoże być to pomocne, gdy wersja aplikacji wyświetlana w Obtainium jest nieprawidłowa z powodu nieudanych aktualizacji lub innych problemów.",
|
"installStatusOfXWillBeResetExplanation": "Stan instalacji wybranych aplikacji zostanie zresetowany.\n\nMoże być to pomocne, gdy wersja aplikacji wyświetlana w Obtainium jest nieprawidłowa z powodu nieudanych aktualizacji lub innych problemów.",
|
||||||
|
"customLinkMessage": "Te linki działają na urządzeniach z zainstalowanym Obtainium",
|
||||||
|
"shareAppConfigLinks": "Udostępnij konfigurację aplikacji w formie linku",
|
||||||
"shareSelectedAppURLs": "Udostępnij wybrane adresy URL aplikacji",
|
"shareSelectedAppURLs": "Udostępnij wybrane adresy URL aplikacji",
|
||||||
"resetInstallStatus": "Zresetuj stan instalacji",
|
"resetInstallStatus": "Zresetuj stan instalacji",
|
||||||
"more": "Więcej",
|
"more": "Więcej",
|
||||||
"removeOutdatedFilter": "Usuń filtr nieaktualnych aplikacji",
|
"removeOutdatedFilter": "Usuń filtr nieaktualnych aplikacji",
|
||||||
"showOutdatedOnly": "Pokaż tylko nieaktualne aplikacje",
|
"showOutdatedOnly": "Pokaż tylko nieaktualne aplikacje",
|
||||||
"filter": "FIltr",
|
"filter": "FIltr",
|
||||||
"filterActive": "Filtruj *",
|
|
||||||
"filterApps": "Filtruj aplikacje",
|
"filterApps": "Filtruj aplikacje",
|
||||||
"appName": "Nazwa aplikacji",
|
"appName": "Nazwa aplikacji",
|
||||||
"author": "Autor",
|
"author": "Autor",
|
||||||
@@ -103,7 +106,6 @@
|
|||||||
"importErrors": "Błędy importowania",
|
"importErrors": "Błędy importowania",
|
||||||
"importedXOfYApps": "Zaimportowano {} z {} aplikacji.",
|
"importedXOfYApps": "Zaimportowano {} z {} aplikacji.",
|
||||||
"followingURLsHadErrors": "Następujące adresy URL zawierały błędy:",
|
"followingURLsHadErrors": "Następujące adresy URL zawierały błędy:",
|
||||||
"okay": "Okej",
|
|
||||||
"selectURL": "Wybierz adres URL",
|
"selectURL": "Wybierz adres URL",
|
||||||
"selectURLs": "Wybierz adresy URL",
|
"selectURLs": "Wybierz adresy URL",
|
||||||
"pick": "Wybierz",
|
"pick": "Wybierz",
|
||||||
@@ -111,8 +113,7 @@
|
|||||||
"dark": "Ciemny",
|
"dark": "Ciemny",
|
||||||
"light": "Jasny",
|
"light": "Jasny",
|
||||||
"followSystem": "Zgodny z systemem",
|
"followSystem": "Zgodny z systemem",
|
||||||
"obtainium": "Obtainium",
|
"followSystemThemeExplanation": "Podążanie za motywem systemowym jest możliwe tylko przy użyciu aplikacji firm trzecich",
|
||||||
"materialYou": "Material You",
|
|
||||||
"useBlackTheme": "Użyj czarnego motywu",
|
"useBlackTheme": "Użyj czarnego motywu",
|
||||||
"appSortBy": "Sortuj aplikacje według",
|
"appSortBy": "Sortuj aplikacje według",
|
||||||
"authorName": "Autor/Nazwa",
|
"authorName": "Autor/Nazwa",
|
||||||
@@ -146,8 +147,10 @@
|
|||||||
"noNewUpdates": "Brak nowych aktualizacji.",
|
"noNewUpdates": "Brak nowych aktualizacji.",
|
||||||
"xHasAnUpdate": "{} ma aktualizację.",
|
"xHasAnUpdate": "{} ma aktualizację.",
|
||||||
"appsUpdated": "Zaktualizowano aplikacje",
|
"appsUpdated": "Zaktualizowano aplikacje",
|
||||||
|
"appsNotUpdated": "Nie udało się zaktualizować aplikacji",
|
||||||
"appsUpdatedNotifDescription": "Informuje, gdy co najmniej jedna aplikacja została zaktualizowana w tle",
|
"appsUpdatedNotifDescription": "Informuje, gdy co najmniej jedna aplikacja została zaktualizowana w tle",
|
||||||
"xWasUpdatedToY": "{} zaktualizowano do {}.",
|
"xWasUpdatedToY": "{} zaktualizowano do {}.",
|
||||||
|
"xWasNotUpdatedToY": "Błąd aktualizacji {} do {}.",
|
||||||
"errorCheckingUpdates": "Błąd sprawdzania aktualizacji",
|
"errorCheckingUpdates": "Błąd sprawdzania aktualizacji",
|
||||||
"errorCheckingUpdatesNotifDescription": "Jest wyświetlane, gdy sprawdzanie aktualizacji w tle nie powiedzie się",
|
"errorCheckingUpdatesNotifDescription": "Jest wyświetlane, gdy sprawdzanie aktualizacji w tle nie powiedzie się",
|
||||||
"appsRemoved": "Usunięte aplikacje",
|
"appsRemoved": "Usunięte aplikacje",
|
||||||
@@ -176,7 +179,6 @@
|
|||||||
"appWithIdOrNameNotFound": "Nie znaleziono aplikacji o tym identyfikatorze lub nazwie",
|
"appWithIdOrNameNotFound": "Nie znaleziono aplikacji o tym identyfikatorze lub nazwie",
|
||||||
"reposHaveMultipleApps": "Repozytoria mogą zawierać wiele aplikacji",
|
"reposHaveMultipleApps": "Repozytoria mogą zawierać wiele aplikacji",
|
||||||
"fdroidThirdPartyRepo": "Zewnętrzne repo F-Droid",
|
"fdroidThirdPartyRepo": "Zewnętrzne repo F-Droid",
|
||||||
"steam": "Steam",
|
|
||||||
"steamMobile": "Mobilny Steam",
|
"steamMobile": "Mobilny Steam",
|
||||||
"steamChat": "Steam Chat",
|
"steamChat": "Steam Chat",
|
||||||
"install": "Instaluj",
|
"install": "Instaluj",
|
||||||
@@ -187,6 +189,9 @@
|
|||||||
"disableVersionDetection": "Wyłącz wykrywanie wersji",
|
"disableVersionDetection": "Wyłącz wykrywanie wersji",
|
||||||
"noVersionDetectionExplanation": "Opcja ta powinna być używana tylko w przypadku aplikacji, w których wykrywanie wersji nie działa poprawnie.",
|
"noVersionDetectionExplanation": "Opcja ta powinna być używana tylko w przypadku aplikacji, w których wykrywanie wersji nie działa poprawnie.",
|
||||||
"downloadingX": "Pobieranie {}",
|
"downloadingX": "Pobieranie {}",
|
||||||
|
"downloadX": "Pobierz {}",
|
||||||
|
"downloadedX": "Pobrano {}",
|
||||||
|
"releaseAsset": "Wydany pakiet",
|
||||||
"downloadNotifDescription": "Informuje o postępach w pobieraniu aplikacji",
|
"downloadNotifDescription": "Informuje o postępach w pobieraniu aplikacji",
|
||||||
"noAPKFound": "Nie znaleziono pakietu APK",
|
"noAPKFound": "Nie znaleziono pakietu APK",
|
||||||
"noVersionDetection": "Bez wykrywania wersji",
|
"noVersionDetection": "Bez wykrywania wersji",
|
||||||
@@ -208,10 +213,12 @@
|
|||||||
"uninstallFromDevice": "Odinstaluj z urządzenia",
|
"uninstallFromDevice": "Odinstaluj z urządzenia",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Działa tylko w przypadku aplikacji z wyłączonym wykrywaniem wersji.",
|
"onlyWorksWithNonVersionDetectApps": "Działa tylko w przypadku aplikacji z wyłączonym wykrywaniem wersji.",
|
||||||
"releaseDateAsVersion": "Użyj daty wydania jako wersji",
|
"releaseDateAsVersion": "Użyj daty wydania jako wersji",
|
||||||
|
"releaseTitleAsVersion": "Używaj nazwy wydania jako ciągu wersji",
|
||||||
"releaseDateAsVersionExplanation": "Opcja ta powinna być używana tylko w przypadku aplikacji, w których wykrywanie wersji nie działa poprawnie, ale dostępna jest data wydania.",
|
"releaseDateAsVersionExplanation": "Opcja ta powinna być używana tylko w przypadku aplikacji, w których wykrywanie wersji nie działa poprawnie, ale dostępna jest data wydania.",
|
||||||
"changes": "Zmiany",
|
"changes": "Zmiany",
|
||||||
"releaseDate": "Data wydania",
|
"releaseDate": "Data wydania",
|
||||||
"importFromURLsInFile": "Importuj z adresów URL w pliku (typu OPML)",
|
"importFromURLsInFile": "Importuj z adresów URL w pliku (typu OPML)",
|
||||||
|
"versionDetectionExplanation": "Uzgodnij ciąg wersji z wersją wykrytą przez system operacyjny",
|
||||||
"versionDetection": "Wykrywanie wersji",
|
"versionDetection": "Wykrywanie wersji",
|
||||||
"standardVersionDetection": "Standardowe wykrywanie wersji",
|
"standardVersionDetection": "Standardowe wykrywanie wersji",
|
||||||
"groupByCategory": "Grupuj według kategorii",
|
"groupByCategory": "Grupuj według kategorii",
|
||||||
@@ -235,8 +242,7 @@
|
|||||||
"addInfoBelow": "Dodaj tę informację poniżej.",
|
"addInfoBelow": "Dodaj tę informację poniżej.",
|
||||||
"addInfoInSettings": "Dodaj tę informację w Ustawieniach.",
|
"addInfoInSettings": "Dodaj tę informację w Ustawieniach.",
|
||||||
"githubSourceNote": "Limit żądań GitHub można ominąć za pomocą klucza API.",
|
"githubSourceNote": "Limit żądań GitHub można ominąć za pomocą klucza API.",
|
||||||
"gitlabSourceNote": "Pozyskiwanie pliku APK z GitLab może nie działać bez klucza API.",
|
"sortByLastLinkSegment": "Sortuj tylko według ostatniego segmentu łącza",
|
||||||
"sortByFileNamesNotLinks": "Sortuj wg nazw plików zamiast pełnych linków",
|
|
||||||
"filterReleaseNotesByRegEx": "Filtruj informacje o wersji według wyrażenia regularnego",
|
"filterReleaseNotesByRegEx": "Filtruj informacje o wersji według wyrażenia regularnego",
|
||||||
"customLinkFilterRegex": "Filtruj linki APK według wyrażenia regularnego (domyślnie \".apk$\")",
|
"customLinkFilterRegex": "Filtruj linki APK według wyrażenia regularnego (domyślnie \".apk$\")",
|
||||||
"appsPossiblyUpdated": "Aplikacje mogły zostać zaktualizowane",
|
"appsPossiblyUpdated": "Aplikacje mogły zostać zaktualizowane",
|
||||||
@@ -247,19 +253,27 @@
|
|||||||
"backgroundUpdateLimitsExplanation": "Powodzenie instalacji w tle można określić dopiero po otwarciu Obtainium.",
|
"backgroundUpdateLimitsExplanation": "Powodzenie instalacji w tle można określić dopiero po otwarciu Obtainium.",
|
||||||
"verifyLatestTag": "Zweryfikuj najnowszy tag",
|
"verifyLatestTag": "Zweryfikuj najnowszy tag",
|
||||||
"intermediateLinkRegex": "Filtr linków \"pośrednich\" do odwiedzenia w pierwszej kolejności",
|
"intermediateLinkRegex": "Filtr linków \"pośrednich\" do odwiedzenia w pierwszej kolejności",
|
||||||
|
"filterByLinkText": "Filtruj linki według tekstu linku",
|
||||||
"intermediateLinkNotFound": "Nie znaleziono linku pośredniego",
|
"intermediateLinkNotFound": "Nie znaleziono linku pośredniego",
|
||||||
|
"intermediateLink": "Link pośredni",
|
||||||
"exemptFromBackgroundUpdates": "Wyklucz z uaktualnień w tle (jeśli są włączone)",
|
"exemptFromBackgroundUpdates": "Wyklucz z uaktualnień w tle (jeśli są włączone)",
|
||||||
"bgUpdatesOnWiFiOnly": "Wyłącz aktualizacje w tle, gdy nie ma połączenia z Wi-Fi",
|
"bgUpdatesOnWiFiOnly": "Wyłącz aktualizacje w tle, gdy nie ma połączenia z Wi-Fi",
|
||||||
|
"bgUpdatesWhileChargingOnly": "Wyłącz aktualizacje w tle, gdy urządzenie nie jest ładowane",
|
||||||
"autoSelectHighestVersionCode": "Automatycznie wybierz najwyższy kod wersji APK",
|
"autoSelectHighestVersionCode": "Automatycznie wybierz najwyższy kod wersji APK",
|
||||||
"versionExtractionRegEx": "Wyrażenie regularne wyodrębniające wersję",
|
"versionExtractionRegEx": "Wyrażenie regularne wyodrębniające wersję",
|
||||||
|
"trimVersionString": "Przytnij ciąg wersji za pomocą RegEx",
|
||||||
|
"matchGroupToUseForX": "Dopasuj grupę do użycia dla \"{}\"",
|
||||||
"matchGroupToUse": "Dopasuj grupę do użycia dla wyrażenia regularnego wyodrębniania wersji",
|
"matchGroupToUse": "Dopasuj grupę do użycia dla wyrażenia regularnego wyodrębniania wersji",
|
||||||
"highlightTouchTargets": "Wyróżnij mniej oczywiste elementy dotykowe",
|
"highlightTouchTargets": "Wyróżnij mniej oczywiste elementy dotykowe",
|
||||||
"pickExportDir": "Wybierz katalog eksportu",
|
"pickExportDir": "Wybierz katalog eksportu",
|
||||||
"autoExportOnChanges": "Automatyczny eksport po wprowadzeniu zmian",
|
"autoExportOnChanges": "Automatyczny eksport po wprowadzeniu zmian",
|
||||||
|
"includeSettings": "Dołącz ustawienia",
|
||||||
"filterVersionsByRegEx": "Filtruj wersje według wyrażenia regularnego",
|
"filterVersionsByRegEx": "Filtruj wersje według wyrażenia regularnego",
|
||||||
"trySelectingSuggestedVersionCode": "Spróbuj wybierać sugerowany kod wersji APK",
|
"trySelectingSuggestedVersionCode": "Spróbuj wybierać sugerowany kod wersji APK",
|
||||||
"dontSortReleasesList": "Utrzymaj kolejność wydań z interfejsu API",
|
"dontSortReleasesList": "Utrzymaj kolejność wydań z interfejsu API",
|
||||||
"reverseSort": "Odwrotne sortowanie",
|
"reverseSort": "Odwrotne sortowanie",
|
||||||
|
"takeFirstLink": "Wykorzystaj pierwszy link",
|
||||||
|
"skipSort": "Pomiń sortowanie",
|
||||||
"debugMenu": "Menu debugowania",
|
"debugMenu": "Menu debugowania",
|
||||||
"bgTaskStarted": "Uruchomiono zadanie w tle - sprawdź logi.",
|
"bgTaskStarted": "Uruchomiono zadanie w tle - sprawdź logi.",
|
||||||
"runBgCheckNow": "Wymuś sprawdzenie aktualizacji w tle",
|
"runBgCheckNow": "Wymuś sprawdzenie aktualizacji w tle",
|
||||||
@@ -277,6 +291,34 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "Sprawdzaj tylko zainstalowane i obserwowane aplikacje pod kątem aktualizacji",
|
"onlyCheckInstalledOrTrackOnlyApps": "Sprawdzaj tylko zainstalowane i obserwowane aplikacje pod kątem aktualizacji",
|
||||||
"supportFixedAPKURL": "Obsługuj stałe adresy URL APK",
|
"supportFixedAPKURL": "Obsługuj stałe adresy URL APK",
|
||||||
"selectX": "Wybierz {}",
|
"selectX": "Wybierz {}",
|
||||||
|
"parallelDownloads": "Zezwalaj na równoległe pobierania",
|
||||||
|
"useShizuku": "Użyj Shizuku lub Sui, aby zainstalować",
|
||||||
|
"shizukuBinderNotFound": "Usługa Shizuku nie działa",
|
||||||
|
"shizukuOld": "Stara wersja Shizuku (<11) - zaktualizuj ją",
|
||||||
|
"shizukuOldAndroidWithADB": "Shizuku przez ADB działa na Androidzie 8.1+. Zaktualizuj Androida lub użyj zamiast tego Sui",
|
||||||
|
"shizukuPretendToBeGooglePlay": "Ustaw Google Play jako źródło instalacji (jeśli używana jest aplikacja Shizuku)",
|
||||||
|
"useSystemFont": "Czcionka systemowa",
|
||||||
|
"useVersionCodeAsOSVersion": "Użyj versionCode aplikacji jako wersji wykrytej przez system operacyjny",
|
||||||
|
"requestHeader": "Nagłówek żądania",
|
||||||
|
"useLatestAssetDateAsReleaseDate": "Użyj najnowszego przesłanego zasobu jako daty wydania",
|
||||||
|
"defaultPseudoVersioningMethod": "Domyślna metoda pseudo-wersji",
|
||||||
|
"partialAPKHash": "Częściowy Hash pliku apk",
|
||||||
|
"APKLinkHash": "Link Hash pliku apk",
|
||||||
|
"directAPKLink": "Bezpośredni link do pliku apk",
|
||||||
|
"pseudoVersionInUse": "Pseudo-wersja jest w użyciu",
|
||||||
|
"installed": "Zainstalowano",
|
||||||
|
"latest": "Najnowsza",
|
||||||
|
"invertRegEx": "Odwróć wyrażenie regularne",
|
||||||
|
"note": "Uwaga",
|
||||||
|
"selfHostedNote": "Wybierz \"{}\", aby uzyskać dostęp do samodzielnie hostowanych lub niestandardowych instancji dowolnego źródła.",
|
||||||
|
"badDownload": "Nie można przeanalizować pliku apk (jest niekompatybilny lub częściowo pobrany)",
|
||||||
|
"beforeNewInstallsShareToAppVerifier": "Udostępnij nowe aplikacje za pomocą weryfikatora aplikacji (jeśli jest dostępny)",
|
||||||
|
"appVerifierInstructionToast": "Udostępnij do weryfikatora aplikacji, a następnie wróć tutaj.",
|
||||||
|
"wiki": "Pomoc/Wiki",
|
||||||
|
"crowdsourcedConfigsLabel": "Baza konfiguracji",
|
||||||
|
"crowdsourcedConfigsShort": "Baza konfiguracji",
|
||||||
|
"allowInsecure": "Zezwalaj na niezabezpieczone żądania HTTP",
|
||||||
|
"stayOneVersionBehind": "Pozostań jedną wersję w tyle za najnowszą",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Usunąć aplikację?",
|
"one": "Usunąć aplikację?",
|
||||||
"few": "Usunąć aplikacje?",
|
"few": "Usunąć aplikacje?",
|
||||||
@@ -349,73 +391,22 @@
|
|||||||
"many": "{} i {} innych apek zostało zaktualizowanych.",
|
"many": "{} i {} innych apek zostało zaktualizowanych.",
|
||||||
"other": "{} i {} inne apki zostały zaktualizowane."
|
"other": "{} i {} inne apki zostały zaktualizowane."
|
||||||
},
|
},
|
||||||
"xAndNMoreUpdatesPossiblyInstalled": {
|
|
||||||
"one": "{} i 1 inna apka mogły zostać zaktualizowane.",
|
|
||||||
"few": "{} i {} inne apki mogły zostać zaktualizowane.",
|
|
||||||
"many": "{} i {} innych apek mogło zostać zaktualizowanych.",
|
|
||||||
"other": "{} i {} inne apki mogły zostać zaktualizowane."
|
|
||||||
},
|
|
||||||
"pseudoVersion": "pseudo-wersja",
|
|
||||||
"customLinkMessage": "Te linki działają na urządzeniach z zainstalowanym Obtainium",
|
|
||||||
"shareAppConfigLinks": "Udostępnij konfigurację aplikacji w formie linku",
|
|
||||||
"directAPKLink": "Bezpośredni link do pliku apk",
|
|
||||||
"pseudoVersionInUse": "Pseudo-wersja jest w użyciu",
|
|
||||||
"installed": "Zainstalowano",
|
|
||||||
"latest": "Najnowsza",
|
|
||||||
"invertRegEx": "Odwróć wyrażenie regularne",
|
|
||||||
"note": "Uwaga",
|
|
||||||
"standard": "Domyślny",
|
|
||||||
"custom": "Własny",
|
|
||||||
"useMaterialYou": "Material You",
|
|
||||||
"followSystemThemeExplanation": "Podążanie za motywem systemowym jest możliwe tylko przy użyciu aplikacji firm trzecich",
|
|
||||||
"appsNotUpdated": "Nie udało się zaktualizować aplikacji",
|
|
||||||
"xWasNotUpdatedToY": "Błąd aktualizacji {} do {}.",
|
|
||||||
"downloadX": "Pobierz {}",
|
|
||||||
"downloadedX": "Pobrano {}",
|
|
||||||
"releaseAsset": "Wydany pakiet",
|
|
||||||
"versionDetectionExplanation": "Uzgodnij ciąg wersji z wersją wykrytą przez system operacyjny",
|
|
||||||
"releaseTitleAsVersion": "Używaj nazwy wydania jako ciągu wersji",
|
|
||||||
"sortByLastLinkSegment": "Sortuj tylko według ostatniego segmentu łącza",
|
|
||||||
"filterByLinkText": "Filtruj linki według tekstu linku",
|
|
||||||
"intermediateLink": "Link pośredni",
|
|
||||||
"bgUpdatesWhileChargingOnly": "Wyłącz aktualizacje w tle, gdy urządzenie nie jest ładowane",
|
|
||||||
"trimVersionString": "Przytnij ciąg wersji za pomocą RegEx",
|
|
||||||
"matchGroupToUseForX": "Dopasuj grupę do użycia dla \"{}\"",
|
|
||||||
"includeSettings": "Dołącz ustawienia",
|
|
||||||
"takeFirstLink": "Wykorzystaj pierwszy link",
|
|
||||||
"skipSort": "Pomiń sortowanie",
|
|
||||||
"parallelDownloads": "Zezwalaj na równoległe pobierania",
|
|
||||||
"useShizuku": "Użyj Shizuku lub Sui, aby zainstalować",
|
|
||||||
"shizukuBinderNotFound": "Usługa Shizuku nie działa",
|
|
||||||
"shizukuOld": "Stara wersja Shizuku (<11) - zaktualizuj ją",
|
|
||||||
"shizukuOldAndroidWithADB": "Shizuku przez ADB działa na Androidzie 8.1+. Zaktualizuj Androida lub użyj zamiast tego Sui",
|
|
||||||
"shizukuPretendToBeGooglePlay": "Ustaw Google Play jako źródło instalacji (jeśli używana jest aplikacja Shizuku)",
|
|
||||||
"useSystemFont": "Czcionka systemowa",
|
|
||||||
"useVersionCodeAsOSVersion": "Użyj versionCode aplikacji jako wersji wykrytej przez system operacyjny",
|
|
||||||
"requestHeader": "Nagłówek żądania",
|
|
||||||
"useLatestAssetDateAsReleaseDate": "Użyj najnowszego przesłanego zasobu jako daty wydania",
|
|
||||||
"defaultPseudoVersioningMethod": "Domyślna metoda pseudo-wersji",
|
|
||||||
"partialAPKHash": "Częściowy Hash pliku apk",
|
|
||||||
"APKLinkHash": "Link Hash pliku apk",
|
|
||||||
"selfHostedNote": "Wybierz \"{}\", aby uzyskać dostęp do samodzielnie hostowanych lub niestandardowych instancji dowolnego źródła.",
|
|
||||||
"badDownload": "Nie można przeanalizować pliku apk (jest niekompatybilny lub częściowo pobrany)",
|
|
||||||
"beforeNewInstallsShareToAppVerifier": "Udostępnij nowe aplikacje za pomocą weryfikatora aplikacji (jeśli jest dostępny)",
|
|
||||||
"appVerifierInstructionToast": "Udostępnij do weryfikatora aplikacji, a następnie wróć tutaj.",
|
|
||||||
"wiki": "Pomoc/Wiki",
|
|
||||||
"crowdsourcedConfigsLabel": "Baza konfiguracji",
|
|
||||||
"crowdsourcedConfigsShort": "Baza konfiguracji",
|
|
||||||
"allowInsecure": "Zezwalaj na niezabezpieczone żądania HTTP",
|
|
||||||
"stayOneVersionBehind": "Pozostań jedną wersję w tyle za najnowszą",
|
|
||||||
"xAndNMoreUpdatesFailed": {
|
"xAndNMoreUpdatesFailed": {
|
||||||
"one": "Błąd aktualizacji {} i 1 innej apki.",
|
"one": "Błąd aktualizacji {} i 1 innej apki.",
|
||||||
"few": "Błąd aktualizacji {} i {} innych apek.",
|
"few": "Błąd aktualizacji {} i {} innych apek.",
|
||||||
"many": "Błąd aktualizacji {} i {} innych apek.",
|
"many": "Błąd aktualizacji {} i {} innych apek.",
|
||||||
"other": "Błąd aktualizacji {} i {} innych apek."
|
"other": "Błąd aktualizacji {} i {} innych apek."
|
||||||
},
|
},
|
||||||
|
"xAndNMoreUpdatesPossiblyInstalled": {
|
||||||
|
"one": "{} i 1 inna apka mogły zostać zaktualizowane.",
|
||||||
|
"few": "{} i {} inne apki mogły zostać zaktualizowane.",
|
||||||
|
"many": "{} i {} innych apek mogło zostać zaktualizowanych.",
|
||||||
|
"other": "{} i {} inne apki mogły zostać zaktualizowane."
|
||||||
|
},
|
||||||
"apk": {
|
"apk": {
|
||||||
"one": "{} apk",
|
"one": "{} apk",
|
||||||
"few": "{} apki",
|
"few": "{} apki",
|
||||||
"many": "{} apek",
|
"many": "{} apek",
|
||||||
"other": "{} apki"
|
"other": "{} apki"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -12,7 +12,8 @@ const neverAutoTranslate = {
|
|||||||
root: ['*'],
|
root: ['*'],
|
||||||
obtainiumExportHyphenatedLowercase: ['*'],
|
obtainiumExportHyphenatedLowercase: ['*'],
|
||||||
theme: ['de'],
|
theme: ['de'],
|
||||||
appId: ['de']
|
appId: ['de'],
|
||||||
|
placeholder: ['pl']
|
||||||
}
|
}
|
||||||
|
|
||||||
const translateText = async (text, targetLang, authKey) => {
|
const translateText = async (text, targetLang, authKey) => {
|
||||||
|
@@ -545,7 +545,7 @@ class AddAppPageState extends State<AddAppPage> {
|
|||||||
items: [
|
items: [
|
||||||
[
|
[
|
||||||
GeneratedFormTextField('appId',
|
GeneratedFormTextField('appId',
|
||||||
label: tr('appId'),
|
label: '${tr('appId')} - ${tr('custom')}',
|
||||||
required: false,
|
required: false,
|
||||||
additionalValidators: [
|
additionalValidators: [
|
||||||
(value) {
|
(value) {
|
||||||
|
40
pubspec.lock
40
pubspec.lock
@@ -111,10 +111,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: battery_plus
|
name: battery_plus
|
||||||
sha256: "4b6dc87ffa72f8d1e63ae17c8700ee374a462e521f0152e2c76cfff484610764"
|
sha256: "220c8f1961efb01d6870493b5ac5a80afaeaffc8757f7a11ed3025a8570d29e7"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.0"
|
version: "6.2.0"
|
||||||
battery_plus_platform_interface:
|
battery_plus_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -151,10 +151,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: cli_util
|
name: cli_util
|
||||||
sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19
|
sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.1"
|
version: "0.4.2"
|
||||||
clock:
|
clock:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -207,10 +207,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: csslib
|
name: csslib
|
||||||
sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb"
|
sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.0"
|
version: "1.0.2"
|
||||||
cupertino_icons:
|
cupertino_icons:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -420,10 +420,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_local_notifications
|
name: flutter_local_notifications
|
||||||
sha256: "49eeef364fddb71515bc78d5a8c51435a68bccd6e4d68e25a942c5e47761ae71"
|
sha256: "674173fd3c9eda9d4c8528da2ce0ea69f161577495a9cc835a2a4ecd7eadeb35"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "17.2.3"
|
version: "17.2.4"
|
||||||
flutter_local_notifications_linux:
|
flutter_local_notifications_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -449,10 +449,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_markdown
|
name: flutter_markdown
|
||||||
sha256: bd9c475d9aae256369edacafc29d1e74c81f78a10cdcdacbbbc9e3c43d009e4a
|
sha256: f0e599ba89c9946c8e051780f0ec99aba4ba15895e0380a7ab68f420046fc44e
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.4"
|
version: "0.7.4+1"
|
||||||
flutter_plugin_android_lifecycle:
|
flutter_plugin_android_lifecycle:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -515,10 +515,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: html
|
name: html
|
||||||
sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a"
|
sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.15.4"
|
version: "0.15.5"
|
||||||
http:
|
http:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -659,10 +659,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: path_provider
|
name: path_provider
|
||||||
sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
|
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.4"
|
version: "2.1.5"
|
||||||
path_provider_android:
|
path_provider_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -819,10 +819,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: share_plus
|
name: share_plus
|
||||||
sha256: "334fcdf0ef9c0df0e3b428faebcac9568f35c747d59831474b2fc56e156d244e"
|
sha256: "3af2cda1752e5c24f2fc04b6083b40f013ffe84fb90472f30c6499a9213d5442"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.1.0"
|
version: "10.1.1"
|
||||||
share_plus_platform_interface:
|
share_plus_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1049,10 +1049,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_android
|
name: url_launcher_android
|
||||||
sha256: "8fc3bae0b68c02c47c5c86fa8bfa74471d42687b0eded01b78de87872db745e2"
|
sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.3.12"
|
version: "6.3.14"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1169,10 +1169,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: win32
|
name: win32
|
||||||
sha256: "2735daae5150e8b1dfeb3eb0544b4d3af0061e9e82cef063adcd583bdae4306a"
|
sha256: "10169d3934549017f0ae278ccb07f828f9d6ea21573bab0fb77b0e1ef0fce454"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.7.0"
|
version: "5.7.2"
|
||||||
win32_registry:
|
win32_registry:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
38
sign.sh
Executable file
38
sign.sh
Executable file
@@ -0,0 +1,38 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Script to sign unsigned APKs
|
||||||
|
# Assumptions:
|
||||||
|
# 1. Your PGP key is already imported on the locally running agent
|
||||||
|
# 2. An Android SDK is located at $ANDROID_HOME (or ~/Android/Sdk as fallback)
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "sign.sh <PATH_TO_KEYSTORE> <PATH_TO_BUILD_DIR>"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ -z "$1" ] || [ -z "$2" ] || [ ! -f "$1" ] || [ ! -d "$2" ]; then
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
KEYSTORE_LOCATION="$1"
|
||||||
|
BUILD_DIR="$2"
|
||||||
|
|
||||||
|
read -s -p "Enter your keystore password: " KEYSTORE_PASSWORD
|
||||||
|
|
||||||
|
if [ -z "$ANDROID_HOME" ]; then
|
||||||
|
ANDROID_HOME=~/Android/Sdk
|
||||||
|
fi
|
||||||
|
if [ ! -d "$ANDROID_HOME" ]; then
|
||||||
|
echo "Could not find Android SDK!" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for apk in "$BUILD_DIR"/*-release*.apk; do
|
||||||
|
unsignedApk=${apk/-release/-unsigned}
|
||||||
|
mv "$apk" "$unsignedApk"
|
||||||
|
${ANDROID_HOME}/build-tools/$(ls ${ANDROID_HOME}/build-tools/ | tail -1)/apksigner sign --ks "$KEYSTORE_LOCATION" --ks-pass pass:"${KEYSTORE_PASSWORD}" --out "${apk}" "${unsignedApk}"
|
||||||
|
sha256sum ${apk} | cut -d " " -f 1 >"$apk".sha256
|
||||||
|
gpg --batch --sign --detach-sig "$apk".sha256
|
||||||
|
rm "$unsignedApk"
|
||||||
|
done
|
Reference in New Issue
Block a user