mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-09-29 21:02:09 +02:00
Replace the Go backend with the Rust workspace and route Android/iOS through UniFFI bindings. Include the migrated extension runtime, network, providers, media metadata, downloads and library operations, with version 5.0.0+147. Remove Go sources, adapters, native build selection and CI dependencies. Build Rust unconditionally and lock the iOS Rust pod using a relative path. Retain legacy source and migration evidence in a local ignored archive. Validation: Android Kotlin compile and 53 native tests; Swift Rust-branch equivalence and syntax; CocoaPods install; workflow, shell, Ruby, plist and diff checks. Reuse the preceding 100 Rust tests, fmt/Clippy and five-ABI build checkpoint; no new APK or iOS application build for this cleanup. Known follow-up: URL/URLSearchParams globals are missing from the Rust JS runtime. A controlled extension replay confirms a URL-resolution regression; this commit does not fix that runtime gap.
71 lines
2.5 KiB
Prolog
71 lines
2.5 KiB
Prolog
# Ignore missing Play Core classes (not used, but referenced by Flutter)
|
|
-dontwarn com.google.android.play.core.splitcompat.**
|
|
-dontwarn com.google.android.play.core.splitinstall.**
|
|
-dontwarn com.google.android.play.core.tasks.**
|
|
|
|
# Ignore missing javax.xml.stream (not used on Android)
|
|
-dontwarn javax.xml.stream.**
|
|
|
|
# The FFmpeg plugin ships its JNI keep rules in its AAR.
|
|
|
|
# UniFFI/JNA resolves FFI methods and structure fields by their generated names.
|
|
# Preserve the generated Rust bindings used by JNA.
|
|
-keep class com.sun.jna.** { *; }
|
|
-keep class com.spotiflac.backend.** { *; }
|
|
# JNA's desktop AWT helpers are unavailable and unused on Android.
|
|
# https://github.com/java-native-access/jna/blob/master/www/FrequentlyAskedQuestions.md#jna-on-android
|
|
-dontwarn java.awt.Component
|
|
-dontwarn java.awt.GraphicsEnvironment
|
|
-dontwarn java.awt.HeadlessException
|
|
-dontwarn java.awt.Window
|
|
|
|
# Keep native methods
|
|
-keepclasseswithmembernames class * {
|
|
native <methods>;
|
|
}
|
|
|
|
# Kotlin coroutines - expanded rules
|
|
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
|
|
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
|
|
-keepclassmembers class kotlinx.coroutines.** {
|
|
volatile <fields>;
|
|
}
|
|
-keepclassmembernames class kotlinx.** {
|
|
volatile <fields>;
|
|
}
|
|
-dontwarn kotlinx.coroutines.**
|
|
|
|
# Runtime annotations used by serializers and generated bindings.
|
|
-keepattributes RuntimeVisibleAnnotations,AnnotationDefault
|
|
-dontwarn kotlin.**
|
|
|
|
# Android instantiates these components from the manifest. Preserve only their
|
|
# names and constructors; normal reachability can now shrink/optimize helpers,
|
|
# coroutine state machines, and unused members in the rest of the app package.
|
|
-keep,allowoptimization class com.zarz.spotiflac.MainActivity {
|
|
public <init>();
|
|
}
|
|
-keep,allowoptimization class com.zarz.spotiflac.DownloadService {
|
|
public <init>();
|
|
}
|
|
-keep,allowoptimization class com.zarz.spotiflac.DownloadQueueWidgetProvider {
|
|
public <init>();
|
|
}
|
|
|
|
# Flutter's fragment builders instantiate this class through reflection.
|
|
-keep,allowoptimization class com.zarz.spotiflac.MainActivity$ImpellerAwareFlutterFragment {
|
|
public <init>();
|
|
}
|
|
|
|
# Prevent R8 from removing metadata
|
|
-keepattributes *Annotation*
|
|
-keepattributes SourceFile,LineNumberTable
|
|
-keepattributes Signature
|
|
-keepattributes Exceptions
|
|
-keepattributes InnerClasses
|
|
-keepattributes EnclosingMethod
|
|
|
|
# Flutter invokes the generated registrant by name. Individual plugins are
|
|
# referenced by this class and retain their own consumer rules.
|
|
-keep class io.flutter.plugins.GeneratedPluginRegistrant { *; }
|