Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 90dbdbab94 | |||
| a97e14e589 | |||
| ac9bb7e302 | |||
| 8160038777 | |||
| d81924917b | |||
| a9310567c7 | |||
| e04131eefe |
@@ -6,4 +6,10 @@
|
||||
-include rules/glide.pro
|
||||
-include rules/kaspersky.pro
|
||||
-include rules/appsflyer.pro
|
||||
-include rules/appmetrica.pro
|
||||
-include rules/moshi.pro
|
||||
-include rules/androidx_security.pro
|
||||
-include rules/kotlinx_serialization.pro
|
||||
-include rules/workmanager.pro
|
||||
-include rules/navigation.pro
|
||||
-include rules/logs.pro
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
# AppMetrica SDK (io.appmetrica.analytics:analytics 8.x)
|
||||
# https://appmetrica.yandex.ru/docs/mobile-sdk-dg/android/quickstart.html
|
||||
# https://github.com/appmetrica/appmetrica-sdk-android
|
||||
|
||||
# Сохраняем все классы SDK — внутри активно используется reflection
|
||||
# (генерация ID, сериализация событий, нативные крэш-репорты).
|
||||
-keep class io.appmetrica.analytics.** { *; }
|
||||
-keep interface io.appmetrica.analytics.** { *; }
|
||||
-dontwarn io.appmetrica.analytics.**
|
||||
|
||||
# Старый namespace Yandex.Metrica (до миграции в io.appmetrica).
|
||||
# В transitive-зависимостях ещё может встречаться — держим на всякий случай.
|
||||
-keep class com.yandex.metrica.** { *; }
|
||||
-keep interface com.yandex.metrica.** { *; }
|
||||
-dontwarn com.yandex.metrica.**
|
||||
|
||||
# AppMetrica использует OkHttp internal через свой shaded-вариант, плюс GMS
|
||||
# (Google Advertising ID, Play Install Referrer) — gms-классы могут отсутствовать
|
||||
# в huawei/rustore-flavor'ах.
|
||||
-dontwarn com.google.android.gms.ads.identifier.**
|
||||
-dontwarn com.google.android.gms.common.**
|
||||
-dontwarn com.huawei.hms.ads.identifier.**
|
||||
-dontwarn com.android.installreferrer.**
|
||||
@@ -0,0 +1,21 @@
|
||||
-keepattributes *Annotation*, InnerClasses
|
||||
-dontnote kotlinx.serialization.AnnotationsKt
|
||||
|
||||
-keepclassmembers class kotlinx.serialization.json.** { *** Companion; }
|
||||
-keepclasseswithmembers class kotlinx.serialization.json.** {
|
||||
kotlinx.serialization.KSerializer serializer(...);
|
||||
}
|
||||
|
||||
-keepclasseswithmembers class **$$serializer {
|
||||
static **$$serializer INSTANCE;
|
||||
}
|
||||
|
||||
-keepclassmembers @kotlinx.serialization.Serializable class ** {
|
||||
static **$serializer INSTANCE;
|
||||
static kotlinx.serialization.KSerializer serializer(...);
|
||||
*** Companion;
|
||||
*** INSTANCE;
|
||||
kotlinx.serialization.KSerializer serializer();
|
||||
}
|
||||
|
||||
-keep @kotlinx.serialization.Serializable class * { *; }
|
||||
@@ -0,0 +1,55 @@
|
||||
# Стрипаем все логи в release/customer-сборках через R8.
|
||||
#
|
||||
# -assumenosideeffects говорит R8, что вызов метода можно удалить, если его
|
||||
# возвращаемое значение не используется. Для Log.v/d/i/w/e и Timber.v/d/i/w/e
|
||||
# это безопасно: они возвращают Int (всегда 0) и вызываются ради побочного
|
||||
# эффекта — печати в logcat.
|
||||
#
|
||||
# Покрываем ВСЕ уровни (v/d/i/w/e), включая w и e — реестр дефектов (С_1)
|
||||
# требует полного отсутствия служебных сообщений в финальной сборке для
|
||||
# предотвращения раскрытия архитектуры приложения при декомпиляции и снижения
|
||||
# I/O-нагрузки. Crashlytics в проде не привязан к android.util.Log (нет
|
||||
# CrashReportingTree, Timber.plant вызывается только при ENABLE_LOGS), поэтому
|
||||
# полный strip не ухудшает удалённую диагностику. Исключения, отправляемые
|
||||
# через FirebaseCrashlytics.recordException(), не задеты.
|
||||
#
|
||||
# Дублирует и подстраховывает гард `if (BuildConfig.ENABLE_LOGS)` вокруг
|
||||
# `Timber.plant(...)` в App.kt: даже если разработчик случайно вызовет
|
||||
# `android.util.Log.d(...)` напрямую (минуя Timber) — в release этот код
|
||||
# не попадёт в APK.
|
||||
|
||||
-assumenosideeffects class android.util.Log {
|
||||
public static *** v(...);
|
||||
public static *** d(...);
|
||||
public static *** i(...);
|
||||
public static *** w(...);
|
||||
public static *** e(...);
|
||||
}
|
||||
|
||||
# Timber 5.x: статический API делегирует в companion object `Forest`,
|
||||
# плюс есть базовый класс `Tree`. Покрываем все три точки входа.
|
||||
-assumenosideeffects class timber.log.Timber {
|
||||
public static *** v(...);
|
||||
public static *** d(...);
|
||||
public static *** i(...);
|
||||
public static *** w(...);
|
||||
public static *** e(...);
|
||||
}
|
||||
|
||||
-assumenosideeffects class timber.log.Timber$Forest {
|
||||
public *** v(...);
|
||||
public *** d(...);
|
||||
public *** i(...);
|
||||
public *** w(...);
|
||||
public *** e(...);
|
||||
}
|
||||
|
||||
-assumenosideeffects class timber.log.Timber$Tree {
|
||||
public *** v(...);
|
||||
public *** d(...);
|
||||
public *** i(...);
|
||||
public *** w(...);
|
||||
public *** e(...);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
-keepnames class * implements com.manzherok.mobile.corenavigation.Route
|
||||
-keep class * implements com.manzherok.mobile.corenavigation.Route {
|
||||
public java.lang.String getName();
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
-keep class * extends androidx.work.Worker { *; }
|
||||
-keep class * extends androidx.work.CoroutineWorker { *; }
|
||||
-keep class * extends androidx.work.ListenableWorker {
|
||||
public <init>(android.content.Context, androidx.work.WorkerParameters);
|
||||
}
|
||||
-keepclasseswithmembers class * {
|
||||
@dagger.assisted.AssistedInject <init>(...);
|
||||
}
|
||||
Reference in New Issue
Block a user