Move firebase stuff to a standalone module (#1841)

This commit is contained in:
AntsyLich 2025-03-11 12:55:50 +06:00 committed by GitHub
parent eddf07f9ac
commit 046f09c4bd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 101 additions and 65 deletions

View File

@ -1,3 +1,4 @@
import mihon.buildlogic.Config
import mihon.buildlogic.getBuildTime import mihon.buildlogic.getBuildTime
import mihon.buildlogic.getCommitCount import mihon.buildlogic.getCommitCount
import mihon.buildlogic.getGitSha import mihon.buildlogic.getGitSha
@ -10,16 +11,6 @@ plugins {
alias(libs.plugins.aboutLibraries) alias(libs.plugins.aboutLibraries)
} }
class ConfigClass {
val includeAnalytics: Boolean = project.hasProperty("include-analytics")
val enableUpdater: Boolean = project.hasProperty("enable-updater")
val enableCodeShrink: Boolean = !project.hasProperty("disable-code-shrink")
val includeDependencyInfo: Boolean = project.hasProperty("include-dependency-info")
}
@Suppress("PropertyName")
val Config = ConfigClass()
if (Config.includeAnalytics) { if (Config.includeAnalytics) {
pluginManager.apply { pluginManager.apply {
apply(libs.plugins.google.services.get().pluginId) apply(libs.plugins.google.services.get().pluginId)
@ -94,8 +85,6 @@ android {
} }
sourceSets { sourceSets {
val analyticsDir = if (Config.includeAnalytics) "analytics-firebase" else "analytics-firebase-noop"
getByName("main").kotlin.srcDirs("src/$analyticsDir/kotlin")
getByName("preview").res.srcDirs("src/debug/res") getByName("preview").res.srcDirs("src/debug/res")
getByName("benchmark").res.srcDirs("src/debug/res") getByName("benchmark").res.srcDirs("src/debug/res")
} }
@ -187,6 +176,7 @@ dependencies {
implementation(projects.domain) implementation(projects.domain)
implementation(projects.presentationCore) implementation(projects.presentationCore)
implementation(projects.presentationWidget) implementation(projects.presentationWidget)
implementation(projects.telemetry)
// Compose // Compose
implementation(compose.activity) implementation(compose.activity)
@ -280,13 +270,6 @@ dependencies {
// Logging // Logging
implementation(libs.logcat) implementation(libs.logcat)
// Crash reports/analytics
if (Config.includeAnalytics) {
implementation(platform(libs.firebase.bom))
implementation(libs.firebase.analytics)
implementation(libs.firebase.crashlytics)
}
// Shizuku // Shizuku
implementation(libs.bundles.shizuku) implementation(libs.bundles.shizuku)

View File

@ -33,23 +33,6 @@
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<!-- Remove unnecessary permissions from Firebase dependency -->
<uses-permission
android:name="android.permission.ACCESS_ADSERVICES_AD_ID"
tools:node="remove" />
<uses-permission
android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION"
tools:node="remove" />
<uses-permission
android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE"
tools:node="remove" />
<uses-permission
android:name="com.google.android.gms.permission.AD_ID"
tools:node="remove" />
<application <application
android:name=".App" android:name=".App"
android:allowBackup="false" android:allowBackup="false"
@ -248,28 +231,6 @@
android:name="android.webkit.WebView.MetricsOptOut" android:name="android.webkit.WebView.MetricsOptOut"
android:value="true" /> android:value="true" />
<!-- Disable for manual opt-in -->
<meta-data
android:name="firebase_analytics_collection_enabled"
android:value="false" />
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
<!-- Disable unnecessary stuff from Firebase -->
<meta-data
android:name="google_analytics_adid_collection_enabled"
android:value="false" />
<meta-data
android:name="google_analytics_automatic_screen_reporting_enabled"
android:value="false" />
<meta-data
android:name="google_analytics_default_allow_ad_personalization_signals"
android:value="false" />
</application> </application>
</manifest> </manifest>

View File

@ -52,9 +52,9 @@ import kotlinx.coroutines.flow.onEach
import logcat.AndroidLogcatLogger import logcat.AndroidLogcatLogger
import logcat.LogPriority import logcat.LogPriority
import logcat.LogcatLogger import logcat.LogcatLogger
import mihon.core.firebase.FirebaseConfig
import mihon.core.migration.Migrator import mihon.core.migration.Migrator
import mihon.core.migration.migrations.migrations import mihon.core.migration.migrations.migrations
import mihon.telemetry.TelemetryConfig
import org.conscrypt.Conscrypt import org.conscrypt.Conscrypt
import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.i18n.stringResource
import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.Preference
@ -80,7 +80,7 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor
override fun onCreate() { override fun onCreate() {
super<Application>.onCreate() super<Application>.onCreate()
patchInjekt() patchInjekt()
FirebaseConfig.init(applicationContext) TelemetryConfig.init(applicationContext)
GlobalExceptionHandler.initialize(applicationContext, CrashActivity::class.java) GlobalExceptionHandler.initialize(applicationContext, CrashActivity::class.java)
@ -136,12 +136,12 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor
privacyPreferences.analytics() privacyPreferences.analytics()
.changes() .changes()
.onEach(FirebaseConfig::setAnalyticsEnabled) .onEach(TelemetryConfig::setAnalyticsEnabled)
.launchIn(scope) .launchIn(scope)
privacyPreferences.crashlytics() privacyPreferences.crashlytics()
.changes() .changes()
.onEach(FirebaseConfig::setCrashlyticsEnabled) .onEach(TelemetryConfig::setCrashlyticsEnabled)
.launchIn(scope) .launchIn(scope)
basePreferences.hardwareBitmapThreshold().let { preference -> basePreferences.hardwareBitmapThreshold().let { preference ->

View File

@ -0,0 +1,17 @@
package mihon.buildlogic
import org.gradle.api.Project
interface BuildConfig {
val includeAnalytics: Boolean
val enableUpdater: Boolean
val enableCodeShrink: Boolean
val includeDependencyInfo: Boolean
}
val Project.Config: BuildConfig get() = object : BuildConfig {
override val includeAnalytics: Boolean = project.hasProperty("include-analytics")
override val enableUpdater: Boolean = project.hasProperty("enable-updater")
override val enableCodeShrink: Boolean = !project.hasProperty("disable-code-shrink")
override val includeDependencyInfo: Boolean = project.hasProperty("include-dependency-info")
}

View File

@ -54,3 +54,4 @@ include(":presentation-core")
include(":presentation-widget") include(":presentation-widget")
include(":source-api") include(":source-api")
include(":source-local") include(":source-local")
include(":telemetry")

View File

@ -0,0 +1,26 @@
import mihon.buildlogic.Config
plugins {
id("mihon.library")
kotlin("android")
}
android {
namespace = "mihon.telemetry"
sourceSets {
getByName("main") {
val dir = if (Config.includeAnalytics) "firebase" else "noop"
kotlin.srcDirs("src/$dir/kotlin")
manifest.srcFile("src/$dir/AndroidManifext.xml")
}
}
}
dependencies {
if (Config.includeAnalytics) {
implementation(platform(libs.firebase.bom))
implementation(libs.firebase.analytics)
implementation(libs.firebase.crashlytics)
}
}

View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- Remove unnecessary permissions from Firebase dependency -->
<uses-permission
android:name="android.permission.ACCESS_ADSERVICES_AD_ID"
tools:node="remove" />
<uses-permission
android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION"
tools:node="remove" />
<uses-permission
android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE"
tools:node="remove" />
<uses-permission
android:name="com.google.android.gms.permission.AD_ID"
tools:node="remove" />
<application>
<!-- Disable for manual opt-in -->
<meta-data
android:name="firebase_analytics_collection_enabled"
android:value="false" />
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
<!-- Disable unnecessary stuff from Firebase -->
<meta-data
android:name="google_analytics_adid_collection_enabled"
android:value="false" />
<meta-data
android:name="google_analytics_automatic_screen_reporting_enabled"
android:value="false" />
<meta-data
android:name="google_analytics_default_allow_ad_personalization_signals"
android:value="false" />
</application>
</manifest>

View File

@ -5,7 +5,7 @@ import com.google.firebase.FirebaseApp
import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.crashlytics.FirebaseCrashlytics import com.google.firebase.crashlytics.FirebaseCrashlytics
object FirebaseConfig { object TelemetryConfig {
private lateinit var analytics: FirebaseAnalytics private lateinit var analytics: FirebaseAnalytics
private lateinit var crashlytics: FirebaseCrashlytics private lateinit var crashlytics: FirebaseCrashlytics

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest />

View File

@ -1,8 +1,9 @@
package mihon.core.firebase package mihon.telemetry
import android.content.Context import android.content.Context
object FirebaseConfig { @Suppress("UNUSED_PARAMETER")
object TelemetryConfig {
fun init(context: Context) = Unit fun init(context: Context) = Unit
fun setAnalyticsEnabled(enabled: Boolean) = Unit fun setAnalyticsEnabled(enabled: Boolean) = Unit