All checks were successful
ci / analyze (push) Successful in 1m5s
ci / test-commons-core (push) Successful in 37s
ci / test-app-seeds (push) Successful in 5m44s
site / deploy (push) Successful in 32s
release / play (push) Successful in 11m49s
release / fdroid_reference_armeabi_v7a (push) Successful in 22m20s
release / fdroid_reference_arm64_v8a (push) Successful in 23m16s
release / fdroid_reference_x86_64 (push) Successful in 22m11s
F-Droid's APK scanner rejected v0.1.14: 6 com.google.android.play.core.*
(SplitInstall/SplitCompat/tasks) references. They came from Flutter's
io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager
being pinned by our over-broad '-keep class io.flutter.** { *; }' ProGuard
rule — Tane uses no deferred components, so R8 should shrink that manager
away (as it does for immich and other Flutter F-Droid apps, which don't
carry such a keep). Narrow the keep to io.flutter.plugins.**; JNI-critical
embedding classes (FlutterJNI, …) stay via the embedding AAR's own consumer
ProGuard rules — verified the built APK still contains FlutterJNI and no
com.google.android.play.core.* at all. Also exclude the com.google.android.play
group at the dependency level (belt-and-suspenders) + -dontwarn.
Bumps to 0.1.15 (+17); fdroid recipe versionCodes 171/172/173.
52 lines
2.5 KiB
Prolog
52 lines
2.5 KiB
Prolog
# R8/ProGuard keep rules for Tane (org.comunes.tane).
|
|
#
|
|
# R8 is enabled for release builds (see build.gradle.kts). It shrinks/optimizes
|
|
# the Java/Kotlin bytecode and can break code reached only via reflection or JNI
|
|
# — the native plugins below load their Java classes from C, so R8 can't see the
|
|
# references and would strip/rename them. Keep them explicitly. Start
|
|
# conservative; trim only after a release smoke test proves a class is unused.
|
|
|
|
# --- Flutter engine & embedding ---
|
|
# Do NOT blanket-keep io.flutter.** : that pins io.flutter.embedding.engine.
|
|
# deferredcomponents.PlayStoreDeferredComponentManager, which references the
|
|
# proprietary com.google.android.play.core.* (SplitInstall/SplitCompat) API and
|
|
# makes F-Droid's scanner reject the APK. Tane doesn't use deferred components,
|
|
# so let R8 shrink that unused manager away (removing the Play Core references).
|
|
# JNI-critical embedding classes (FlutterJNI, etc.) are kept by the Flutter
|
|
# embedding AAR's own bundled consumer ProGuard rules, so this stays safe.
|
|
-keep class io.flutter.plugins.** { *; }
|
|
-dontwarn io.flutter.embedding.**
|
|
|
|
# --- On-device OCR: tesseract4android (JNI) ---
|
|
# libtesseract/libleptonica call back into these Java classes by name.
|
|
-keep class com.googlecode.tesseract.android.** { *; }
|
|
-keep class com.googlecode.leptonica.android.** { *; }
|
|
-keep class io.paratoner.flutter_tesseract_ocr.** { *; }
|
|
|
|
# --- QR scanning: zxing_barcode_scanner (pure ZXing, platform view) ---
|
|
-keep class com.shirisharyal.zxing_barcode_scanner.** { *; }
|
|
|
|
# --- Encrypted DB: SQLCipher / sqlite3 native loader ---
|
|
# sqlite3 is reached over FFI (dlopen), but keep the loader plugin classes.
|
|
-keep class eu.simonbinder.sqlite3_flutter_libs.** { *; }
|
|
-keep class net.zetetic.** { *; }
|
|
-dontwarn net.zetetic.**
|
|
|
|
# --- Local notifications ---
|
|
# Published keep rules for flutter_local_notifications' Gson-serialized models.
|
|
-keep class com.dexterous.** { *; }
|
|
-keep class com.google.gson.** { *; }
|
|
-keep class * extends com.google.gson.TypeAdapter
|
|
-keepattributes Signature
|
|
-keepattributes *Annotation*
|
|
-dontwarn com.google.errorprone.annotations.**
|
|
|
|
# --- Core library desugaring ---
|
|
-dontwarn java.lang.invoke.**
|
|
-dontwarn build.IgnoreJava8API
|
|
|
|
# --- F-Droid: Google Play Core excluded (see build.gradle.kts) ---
|
|
# The Flutter embedding references Play Core split-install classes for deferred
|
|
# components, which Tane doesn't use; the com.google.android.play group is
|
|
# excluded from the build, so tell R8 not to warn about the absent references.
|
|
-dontwarn com.google.android.play.**
|