- Rename package and all Java/Kotlin sources: com.wireguard.android -> page.onram.wirevpn - applicationId -> page.onram.wirevpn, version 1.0.20260910 (520) - New launcher icon: dark circle, white padlock with bold W - App name 'Wire VPN' in all locales; remove donate preference - Release signing from KEYSTORE_* env vars (CI) - F-Droid v2: scripts/fdroid_metadata.py - GitHub/Gitea Actions workflow: auto-build signed APK + F-Droid metadata/signature on every new release, attach to the release - README + NOTICE (license inventory)
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Generate F-Droid v2 metadata for a signed APK.
|
||||
|
||||
Usage: fdroid_metadata.py <path-to-apk>
|
||||
Prints the F-Droid metadata lines to stdout. The workflow separately computes
|
||||
the F-Droid signature (base64 of double SHA-256).
|
||||
"""
|
||||
import hashlib
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
def main():
|
||||
apk = sys.argv[1]
|
||||
with open(apk, "rb") as f:
|
||||
data = f.read()
|
||||
sha256 = hashlib.sha256(data).hexdigest()
|
||||
|
||||
aapt2 = shutil.which("aapt2")
|
||||
if aapt2 is None:
|
||||
sys.exit("aapt2 not found on PATH; add the Android build-tools dir to PATH")
|
||||
|
||||
dump = subprocess.run([aapt2, "dump", "badging", apk], check=True,
|
||||
capture_output=True, text=True).stdout
|
||||
m_pkg = re.search(r"package: name='([^']+)'", dump)
|
||||
m_ver = re.search(r"versionName='([^']+)'", dump)
|
||||
m_code = re.search(r"versionCode='(\d+)'", dump)
|
||||
if not (m_pkg and m_ver and m_code):
|
||||
sys.exit(f"could not parse APK badging:\n{dump[:2000]}")
|
||||
|
||||
pkg = m_pkg.group(1)
|
||||
ver = m_ver.group(1)
|
||||
code = int(m_code.group(1))
|
||||
|
||||
lines = [
|
||||
f"VersionName: {ver}",
|
||||
f"VersionCode: {code}",
|
||||
"MinSdkVersion: 24",
|
||||
"TargetSdkVersion: 36",
|
||||
"Permissions:",
|
||||
" android.permission.INTERNET",
|
||||
" android.permission.CAMERA",
|
||||
" android.permission.RECEIVE_BOOT_COMPLETED",
|
||||
" android.permission.REQUEST_INSTALL_PACKAGES",
|
||||
" android.permission.SYSTEM_ALERT_WINDOW",
|
||||
" android.permission.WRITE_EXTERNAL_STORAGE",
|
||||
f"UpdateUrl: https://git.obahan.xyz/frank/wirevpn/releases",
|
||||
f"Sha256Digest: {sha256}",
|
||||
f"AndroidPackageInfoName: {pkg}",
|
||||
]
|
||||
print("\n".join(lines))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user