239 lines
8.2 KiB
Prolog
239 lines
8.2 KiB
Prolog
-dontobfuscate
|
|
|
|
# Extensions may require methods unused in the core app
|
|
-dontwarn eu.kanade.tachiyomi.**
|
|
-keep class eu.kanade.tachiyomi.** { public protected private *; }
|
|
|
|
-keep class org.jsoup.** { *; }
|
|
-keep class kotlin.** { *; }
|
|
-keep class okhttp3.** { *; }
|
|
-keep class com.google.gson.** { *; }
|
|
-keep class com.github.salomonbrys.kotson.** { *; }
|
|
-keep class com.squareup.duktape.** { *; }
|
|
|
|
# === Keep EH classes
|
|
-keep class exh.** { *; }
|
|
-keep class xyz.nulldev.** { *; }
|
|
|
|
# === Keep RxAndroid, https://github.com/ReactiveX/RxAndroid/issues/350
|
|
-keep class rx.android.** { *; }
|
|
|
|
# Design library
|
|
-dontwarn com.google.android.material.**
|
|
-keep class com.google.android.material.** { *; }
|
|
-keep interface com.google.android.material.** { *; }
|
|
-keep public class com.google.android.material.R$* { *; }
|
|
|
|
-keep class com.hippo.image.** { *; }
|
|
-keep interface com.hippo.image.** { *; }
|
|
-keepclassmembers class * extends nucleus.presenter.Presenter {
|
|
<init>();
|
|
}
|
|
|
|
# Madokami extension username and password crash fix
|
|
-keepclassmembers class androidx.preference.EditTextPreference {
|
|
*** mOnBindEditTextListener;
|
|
*** mText;
|
|
public *;
|
|
}
|
|
|
|
# RxJava 1.1.0
|
|
-dontwarn sun.misc.**
|
|
|
|
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
|
|
long producerIndex;
|
|
long consumerIndex;
|
|
}
|
|
|
|
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
|
|
rx.internal.util.atomic.LinkedQueueNode producerNode;
|
|
}
|
|
|
|
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
|
|
rx.internal.util.atomic.LinkedQueueNode consumerNode;
|
|
}
|
|
|
|
-dontnote rx.internal.util.PlatformDependent
|
|
|
|
# === Reactive network: https://github.com/pwittchen/ReactiveNetwork/tree/v0.12.4#proguard-configuration
|
|
-dontwarn com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork
|
|
-dontwarn io.reactivex.functions.Function
|
|
-dontwarn rx.internal.util.**
|
|
-dontwarn sun.misc.Unsafe
|
|
|
|
# === Okhttp: https://github.com/square/okhttp/blob/3637fc56f70f87da696847defd311dbfb28e87b5/okhttp/src/main/resources/META-INF/proguard/okhttp3.pro
|
|
# JSR 305 annotations are for embedding nullability information.
|
|
-dontwarn javax.annotation.**
|
|
# A resource is loaded with a relative path so the package of this class must be preserved.
|
|
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
|
|
# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
|
|
-dontwarn org.codehaus.mojo.animal_sniffer.*
|
|
# OkHttp platform used only on JVM and when Conscrypt dependency is available.
|
|
-dontwarn okhttp3.internal.platform.ConscryptPlatform
|
|
|
|
# === Okio: https://github.com/square/okio/tree/9b8545e7fa267c9d89753283990f24a35cd69cd6#proguard
|
|
-dontwarn okio.**
|
|
|
|
# === GSON: https://raw.githubusercontent.com/google/gson/master/examples/android-proguard-example/proguard.cfg
|
|
# Gson uses generic type information stored in a class file when working with fields. Proguard
|
|
# removes such information by default, so configure it to keep all of it.
|
|
-keepattributes Signature
|
|
|
|
# For using GSON @Expose annotation
|
|
-keepattributes *Annotation*
|
|
|
|
# Gson specific classes
|
|
-dontwarn sun.misc.**
|
|
#-keep class com.google.gson.stream.** { *; }
|
|
|
|
# Application classes that will be serialized/deserialized over Gson
|
|
-keep class com.google.gson.examples.android.model.** { <fields>; }
|
|
|
|
# Prevent proguard from stripping interface information from TypeAdapterFactory,
|
|
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
|
|
-keep class * implements com.google.gson.TypeAdapterFactory
|
|
-keep class * implements com.google.gson.JsonSerializer
|
|
-keep class * implements com.google.gson.JsonDeserializer
|
|
|
|
# Prevent R8 from leaving Data object members always null
|
|
-keepclassmembers,allowobfuscation class * {
|
|
@com.google.gson.annotations.SerializedName <fields>;
|
|
}
|
|
|
|
# == Nucleus
|
|
-keepclassmembers class * extends nucleus.presenter.Presenter {
|
|
<init>();
|
|
}
|
|
|
|
# TODO Changeloglib? Does it need proguard?
|
|
|
|
# === Injekt
|
|
## From original config: "Attempt to fix: java.lang.NoClassDefFoundError: uy.kohesive.injekt.registry.default.DefaultRegistrar$NOKEY$1"
|
|
-keep class uy.kohesive.injekt.** { *; }
|
|
|
|
|
|
# === Glide
|
|
-keep public class * implements com.bumptech.glide.module.GlideModule
|
|
-keep public class * extends com.bumptech.glide.module.AppGlideModule
|
|
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
|
|
**[] $VALUES;
|
|
public *;
|
|
}
|
|
|
|
-dontwarn com.bumptech.glide.load.resource.bitmap.VideoDecoder
|
|
|
|
# === Glide-transformations: https://github.com/wasabeef/glide-transformations/blob/3aa8e53c6a51b8351d312f802ba1354c5b115168/transformations/proguard-rules.txt
|
|
-dontwarn jp.co.cyberagent.android.gpuimage.**
|
|
|
|
# === Conductor
|
|
# This isn't in the consumer proguard rules yet: https://github.com/bluelinelabs/Conductor/pull/550/files
|
|
-keepclassmembers public class * extends com.bluelinelabs.conductor.ControllerChangeHandler {
|
|
public <init>();
|
|
}
|
|
|
|
# === RxBinding
|
|
-dontwarn com.google.auto.value.AutoValue
|
|
|
|
# === Crashlytics
|
|
-keepattributes *Annotation*
|
|
-keepattributes SourceFile,LineNumberTable
|
|
-keep class com.crashlytics.** { *; }
|
|
-dontwarn com.crashlytics.**
|
|
|
|
# === Humanize + Guava: https://github.com/google/guava/wiki/UsingProGuardWithGuava
|
|
-dontwarn javax.lang.model.element.Modifier
|
|
-keep class org.ocpsoft.prettytime.i18n.**
|
|
|
|
# Note: We intentionally don't add the flags we'd need to make Enums work.
|
|
# That's because the Proguard configuration required to make it work on
|
|
# optimized code would preclude lots of optimization, like converting enums
|
|
# into ints.
|
|
|
|
# Throwables uses internal APIs for lazy stack trace resolution
|
|
-dontnote sun.misc.SharedSecrets
|
|
-keep class sun.misc.SharedSecrets {
|
|
*** getJavaLangAccess(...);
|
|
}
|
|
-dontnote sun.misc.JavaLangAccess
|
|
-keep class sun.misc.JavaLangAccess {
|
|
*** getStackTraceElement(...);
|
|
*** getStackTraceDepth(...);
|
|
}
|
|
|
|
# FinalizableReferenceQueue calls this reflectively
|
|
# Proguard is intelligent enough to spot the use of reflection onto this, so we
|
|
# only need to keep the names, and allow it to be stripped out if
|
|
# FinalizableReferenceQueue is unused.
|
|
-keepnames class com.google.common.base.internal.Finalizer {
|
|
*** startFinalizer(...);
|
|
}
|
|
# However, it cannot "spot" that this method needs to be kept IF the class is.
|
|
-keepclassmembers class com.google.common.base.internal.Finalizer {
|
|
*** startFinalizer(...);
|
|
}
|
|
-keepnames class com.google.common.base.FinalizableReference {
|
|
void finalizeReferent();
|
|
}
|
|
-keepclassmembers class com.google.common.base.FinalizableReference {
|
|
void finalizeReferent();
|
|
}
|
|
|
|
# Striped64, LittleEndianByteArray, UnsignedBytes, AbstractFuture
|
|
-dontwarn sun.misc.Unsafe
|
|
|
|
# Striped64 appears to make some assumptions about object layout that
|
|
# really might not be safe. This should be investigated.
|
|
-keepclassmembers class com.google.common.cache.Striped64 {
|
|
*** base;
|
|
*** busy;
|
|
}
|
|
-keepclassmembers class com.google.common.cache.Striped64$Cell {
|
|
<fields>;
|
|
}
|
|
|
|
-dontwarn java.lang.SafeVarargs
|
|
|
|
-keep class java.lang.Throwable {
|
|
*** addSuppressed(...);
|
|
}
|
|
|
|
# Futures.getChecked, in both of its variants, is incompatible with proguard.
|
|
|
|
# Used by AtomicReferenceFieldUpdater and sun.misc.Unsafe
|
|
-keepclassmembers class com.google.common.util.concurrent.AbstractFuture** {
|
|
*** waiters;
|
|
*** value;
|
|
*** listeners;
|
|
*** thread;
|
|
*** next;
|
|
}
|
|
-keepclassmembers class com.google.common.util.concurrent.AtomicDouble {
|
|
*** value;
|
|
}
|
|
-keepclassmembers class com.google.common.util.concurrent.AggregateFutureState {
|
|
*** remaining;
|
|
*** seenExceptions;
|
|
}
|
|
|
|
# Since Unsafe is using the field offsets of these inner classes, we don't want
|
|
# to have class merging or similar tricks applied to these classes and their
|
|
# fields. It's safe to allow obfuscation, since the by-name references are
|
|
# already preserved in the -keep statement above.
|
|
-keep,allowshrinking,allowobfuscation class com.google.common.util.concurrent.AbstractFuture** {
|
|
<fields>;
|
|
}
|
|
|
|
# Futures.getChecked (which often won't work with Proguard anyway) uses this. It
|
|
# has a fallback, but again, don't use Futures.getChecked on Android regardless.
|
|
-dontwarn java.lang.ClassValue
|
|
|
|
# MoreExecutors references AppEngine
|
|
-dontnote com.google.appengine.api.ThreadManager
|
|
-keep class com.google.appengine.api.ThreadManager {
|
|
static *** currentRequestThreadFactory(...);
|
|
}
|
|
-dontnote com.google.apphosting.api.ApiProxy
|
|
-keep class com.google.apphosting.api.ApiProxy {
|
|
static *** getCurrentEnvironment (...);
|
|
}
|