diff --git a/app-compose/build.gradle.kts b/app-compose/build.gradle.kts index cf8a4bfecc..d47b87c4a5 100644 --- a/app-compose/build.gradle.kts +++ b/app-compose/build.gradle.kts @@ -22,7 +22,6 @@ plugins { alias(libs.plugins.blocker.android.application.flavors) alias(libs.plugins.blocker.android.application.jacoco) alias(libs.plugins.blocker.android.hilt) - alias(libs.plugins.blocker.android.application.firebase) alias(libs.plugins.ksp) id("kotlin-parcelize") alias(libs.plugins.baselineprofile) @@ -33,11 +32,8 @@ android { namespace = "com.merxury.blocker" defaultConfig { applicationId = "com.merxury.blocker" - val gitCommitCount = providers.exec { - commandLine("git", "rev-list", "--count", "HEAD") - }.standardOutput.asText.get().trim() - versionCode = gitCommitCount.toIntOrNull() ?: 1 - versionName = "2.0.$gitCommitCount" // X.Y.Z; X = Major, Y = minor, Z = version code + versionCode = 4839 + versionName = "2.0.4839-fdroid" // X.Y.Z; X = Major, Y = minor, Z = version code // Custom test runner to set up Hilt dependency graph testInstrumentationRunner = "com.merxury.blocker.core.testing.BlockerTestRunner" diff --git a/app-compose/dependencies/marketReleaseRuntimeClasspath.txt b/app-compose/dependencies/marketReleaseRuntimeClasspath.txt index 9968fc57b5..17ab1a1f49 100644 --- a/app-compose/dependencies/marketReleaseRuntimeClasspath.txt +++ b/app-compose/dependencies/marketReleaseRuntimeClasspath.txt @@ -79,10 +79,6 @@ androidx.datastore:datastore-core-android:1.1.1 androidx.datastore:datastore-core-okio-jvm:1.1.1 androidx.datastore:datastore-core-okio:1.1.1 androidx.datastore:datastore-core:1.1.1 -androidx.datastore:datastore-preferences-android:1.1.1 -androidx.datastore:datastore-preferences-core-jvm:1.1.1 -androidx.datastore:datastore-preferences-core:1.1.1 -androidx.datastore:datastore-preferences:1.1.1 androidx.datastore:datastore:1.1.1 androidx.documentfile:documentfile:1.0.1 androidx.drawerlayout:drawerlayout:1.1.1 @@ -130,8 +126,6 @@ androidx.navigation:navigation-runtime:2.8.5 androidx.palette:palette-ktx:1.0.0 androidx.palette:palette:1.0.0 androidx.print:print:1.0.0 -androidx.privacysandbox.ads:ads-adservices-java:1.0.0-beta05 -androidx.privacysandbox.ads:ads-adservices:1.0.0-beta05 androidx.profileinstaller:profileinstaller:1.4.1 androidx.recyclerview:recyclerview:1.1.0 androidx.resourceinspection:resourceinspection-annotation:1.0.1 @@ -172,45 +166,15 @@ com.github.topjohnwu.libsu:nio:6.0.0 com.github.topjohnwu.libsu:service:6.0.0 com.google.accompanist:accompanist-drawablepainter:0.32.0 com.google.accompanist:accompanist-permissions:0.37.0 -com.google.android.datatransport:transport-api:3.2.0 -com.google.android.datatransport:transport-backend-cct:3.3.0 -com.google.android.datatransport:transport-runtime:3.3.0 -com.google.android.gms:play-services-ads-identifier:18.0.0 -com.google.android.gms:play-services-base:18.5.0 -com.google.android.gms:play-services-basement:18.4.0 -com.google.android.gms:play-services-measurement-api:22.1.2 -com.google.android.gms:play-services-measurement-base:22.1.2 -com.google.android.gms:play-services-measurement-impl:22.1.2 -com.google.android.gms:play-services-measurement-sdk-api:22.1.2 -com.google.android.gms:play-services-measurement-sdk:22.1.2 -com.google.android.gms:play-services-measurement:22.1.2 -com.google.android.gms:play-services-stats:17.0.2 -com.google.android.gms:play-services-tasks:18.2.0 com.google.android.material:material:1.12.0 com.google.code.findbugs:jsr305:3.0.2 com.google.dagger:dagger-lint-aar:2.54 com.google.dagger:dagger:2.54 com.google.dagger:hilt-android:2.54 com.google.dagger:hilt-core:2.54 -com.google.errorprone:error_prone_annotations:2.26.0 -com.google.firebase:firebase-analytics:22.1.2 -com.google.firebase:firebase-annotations:16.2.0 -com.google.firebase:firebase-bom:33.7.0 -com.google.firebase:firebase-common-ktx:21.0.0 -com.google.firebase:firebase-common:21.0.0 -com.google.firebase:firebase-components:18.0.0 -com.google.firebase:firebase-config-interop:16.0.1 -com.google.firebase:firebase-crashlytics:19.3.0 -com.google.firebase:firebase-datatransport:19.0.0 -com.google.firebase:firebase-encoders-json:18.0.1 -com.google.firebase:firebase-encoders-proto:16.0.0 -com.google.firebase:firebase-encoders:17.0.0 -com.google.firebase:firebase-installations-interop:17.2.0 -com.google.firebase:firebase-installations:18.0.0 -com.google.firebase:firebase-measurement-connector:20.0.1 -com.google.firebase:firebase-sessions:2.0.7 +com.google.errorprone:error_prone_annotations:2.15.0 com.google.guava:failureaccess:1.0.1 -com.google.guava:guava:31.1-android +com.google.guava:guava:31.0.1-jre com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 com.google.protobuf:protobuf-javalite:4.29.3 @@ -272,7 +236,6 @@ org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.10.1 org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.10.1 org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1 org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.10.1 -org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.1 org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.6.1 org.jetbrains.kotlinx:kotlinx-datetime:0.6.1 org.jetbrains.kotlinx:kotlinx-serialization-bom:1.8.0 diff --git a/app-compose/marketRelease-badging.txt b/app-compose/marketRelease-badging.txt index 8dbae3e1fc..4004e63fd5 100644 --- a/app-compose/marketRelease-badging.txt +++ b/app-compose/marketRelease-badging.txt @@ -1,4 +1,4 @@ -package: name='com.merxury.blocker' versionCode='5322' versionName='2.0.5322' platformBuildVersionName='15' platformBuildVersionCode='35' compileSdkVersion='35' compileSdkVersionCodename='15' +package: name='com.merxury.blocker' versionCode='4839' versionName='2.0.4839-fdroid' platformBuildVersionName='15' platformBuildVersionCode='35' compileSdkVersion='35' compileSdkVersionCodename='15' minSdkVersion:'21' targetSdkVersion:'35' uses-permission: name='android.permission.INTERNET' @@ -11,10 +11,6 @@ uses-permission: name='moe.shizuku.manager.permission.API' uses-permission: name='android.permission.QUERY_ALL_PACKAGES' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' -uses-permission: name='com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE' -uses-permission: name='com.google.android.gms.permission.AD_ID' -uses-permission: name='android.permission.ACCESS_ADSERVICES_ATTRIBUTION' -uses-permission: name='android.permission.ACCESS_ADSERVICES_AD_ID' uses-permission: name='com.merxury.blocker.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION' application-label:'Blocker' application-label-af:'Blocker' @@ -111,15 +107,12 @@ application-icon-640:'res/mipmap-anydpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-anydpi-v26/ic_launcher.xml' application: label='Blocker' icon='res/mipmap-anydpi-v26/ic_launcher.xml' launchable-activity: name='com.merxury.blocker.MainActivity' label='' icon='' -property: name='android.adservices.AD_SERVICES_CONFIG' resource='res/xml/ga_ad_services_config.xml' -uses-library-not-required:'android.ext.adservices' uses-library-not-required:'androidx.window.extensions' uses-library-not-required:'androidx.window.sidecar' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' main -other-activities other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index c38b1ce4a3..2c38270274 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -34,8 +34,6 @@ dependencies { compileOnly(libs.android.gradlePlugin) compileOnly(libs.android.tools.common) compileOnly(libs.compose.gradlePlugin) - compileOnly(libs.firebase.performance.gradlePlugin) - compileOnly(libs.firebase.crashlytics.gradlePlugin) compileOnly(libs.kotlin.gradlePlugin) compileOnly(libs.ksp.gradlePlugin) compileOnly(libs.licensee.gradlePlugin) @@ -93,10 +91,6 @@ gradlePlugin { id = libs.plugins.blocker.android.room.get().pluginId implementationClass = "AndroidRoomConventionPlugin" } - register("firebase") { - id = libs.plugins.blocker.android.application.firebase.get().pluginId - implementationClass = "AndroidApplicationFirebaseConventionPlugin" - } register("androidFlavors") { id = libs.plugins.blocker.android.application.flavors.get().pluginId implementationClass = "AndroidApplicationFlavorsConventionPlugin" diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt deleted file mode 100644 index 195b2fd5dc..0000000000 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2025 Blocker - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import com.android.build.api.dsl.ApplicationExtension -import com.android.build.api.variant.ApplicationAndroidComponentsExtension -import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension -import com.merxury.blocker.BlockerFlavor -import com.merxury.blocker.libs -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.Task -import org.gradle.kotlin.dsl.configure -import org.gradle.kotlin.dsl.dependencies -import org.gradle.kotlin.dsl.withType - -class AndroidApplicationFirebaseConventionPlugin : Plugin { - override fun apply(target: Project) { - with(target) { - dependencies { - val bom = libs.findLibrary("firebase-bom").get() - "marketImplementation"(platform(bom)) - "marketImplementation"(libs.findLibrary("firebase.analytics").get()) - "marketImplementation"(libs.findLibrary("firebase.crashlytics").get()) - } - extensions.configure { - pluginManager.apply("com.google.gms.google-services") - pluginManager.apply("com.google.firebase.crashlytics") - } - extensions.configure { - buildTypes.configureEach { - configure { - mappingFileUploadEnabled = this@configureEach.name.contains("release") - } - } - tasks.configureEach { - val isFossTask = name.contains(BlockerFlavor.foss.name, ignoreCase = true) - if (isFossTask) { - val disableKeywords = listOf("google", "crashlytics", "upload", "gms") - if (disableKeywords.any { name.contains(it, ignoreCase = true) }) { - logger.debug("Disabling task: $name") - enabled = false - } - } - } - } - tasks.withType().configureEach { - if (name == "uploadCrashlyticsMappingFileMarketRelease") { - mustRunAfter(tasks.named("updateMarketReleaseBadging")) - } - } - } - } -} diff --git a/build.gradle.kts b/build.gradle.kts index dde2bcb9f1..9caebec396 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -39,9 +39,6 @@ plugins { alias(libs.plugins.hilt) apply false alias(libs.plugins.kotlin.serialization) apply false alias(libs.plugins.licensee) apply false - alias(libs.plugins.firebase.crashlytics) apply false - alias(libs.plugins.firebase.perf) apply false - alias(libs.plugins.gms) apply false alias(libs.plugins.ksp) apply false alias(libs.plugins.roborazzi) apply false alias(libs.plugins.room) apply false diff --git a/core/analytics/build.gradle.kts b/core/analytics/build.gradle.kts index fea26455e0..1721d92793 100644 --- a/core/analytics/build.gradle.kts +++ b/core/analytics/build.gradle.kts @@ -27,7 +27,4 @@ android { dependencies { implementation(libs.androidx.compose.runtime) implementation(libs.timber) - - marketImplementation(platform(libs.firebase.bom)) - marketImplementation(libs.firebase.analytics) } diff --git a/core/analytics/src/market/kotlin/com/merxury/blocker/core/analytics/AnalyticsModule.kt b/core/analytics/src/market/kotlin/com/merxury/blocker/core/analytics/AnalyticsModule.kt index c5acd41d3e..9a12545624 100644 --- a/core/analytics/src/market/kotlin/com/merxury/blocker/core/analytics/AnalyticsModule.kt +++ b/core/analytics/src/market/kotlin/com/merxury/blocker/core/analytics/AnalyticsModule.kt @@ -17,25 +17,14 @@ package com.merxury.blocker.core.analytics -import com.google.firebase.analytics.FirebaseAnalytics -import com.google.firebase.analytics.ktx.analytics -import com.google.firebase.ktx.Firebase import dagger.Binds import dagger.Module -import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) internal abstract class AnalyticsModule { @Binds - abstract fun bindsAnalyticsHelper(analyticsHelperImpl: FirebaseAnalyticsHelper): AnalyticsHelper - - companion object { - @Provides - @Singleton - fun provideFirebaseAnalytics(): FirebaseAnalytics = Firebase.analytics - } + abstract fun bindsAnalyticsHelper(analyticsHelperImpl: StubAnalyticsHelper): AnalyticsHelper } diff --git a/core/analytics/src/market/kotlin/com/merxury/blocker/core/analytics/FirebaseAnalyticsHelper.kt b/core/analytics/src/market/kotlin/com/merxury/blocker/core/analytics/FirebaseAnalyticsHelper.kt deleted file mode 100644 index 82d9d42f6b..0000000000 --- a/core/analytics/src/market/kotlin/com/merxury/blocker/core/analytics/FirebaseAnalyticsHelper.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.merxury.blocker.core.analytics - -import android.os.Bundle -import com.google.firebase.analytics.FirebaseAnalytics -import timber.log.Timber -import javax.inject.Inject - -/** - * Implementation of `AnalyticsHelper` which logs events to a Firebase backend. - */ -internal class FirebaseAnalyticsHelper @Inject constructor( - private val firebaseAnalytics: FirebaseAnalytics, -) : AnalyticsHelper { - private var enableStatistics = true - - override fun setEnableStatistics(enable: Boolean) { - Timber.i("Setting analytics collection enabled: $enable") - enableStatistics = enable - firebaseAnalytics.setAnalyticsCollectionEnabled(enable) - } - - override fun logEvent(event: AnalyticsEvent) { - Timber.v("Received analytics event: $event") - if (enableStatistics) { - firebaseAnalytics.logEvent(event.type, event.extras.toBundle()) - } - } - - private fun List.toBundle(): Bundle { - val bundle = Bundle() - for (extra in this) { - // Truncate parameter keys and values according to firebase maximum length values. - bundle.putString(extra.key.take(40), extra.value.take(100)) - } - return bundle - } -} diff --git a/feature/settings/src/main/AndroidManifest.xml b/feature/settings/src/main/AndroidManifest.xml index 3b9785d9fd..9d8cf647b3 100644 --- a/feature/settings/src/main/AndroidManifest.xml +++ b/feature/settings/src/main/AndroidManifest.xml @@ -22,4 +22,4 @@ - \ No newline at end of file + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 88c60548a5..2019444628 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -36,10 +36,6 @@ appiconloader = "1.5.0" coil = "2.7.0" composeMarkdown = "0.5.6" dependencyGuard = "0.5.0" -firebaseBom = "33.7.0" -firebaseCrashlyticsPlugin = "3.0.2" -firebasePerfPlugin = "1.4.2" -gmsPlugin = "4.4.2" googleAndroidMaterial = "1.12.0" hilt = "2.54" hiltExt = "1.2.0" @@ -70,6 +66,7 @@ xmlutil = "0.90.3" turbine = "1.2.0" truth = "1.4.4" material = "1.12.0" +# Non open-source dependencies [bundles] androidx-compose-ui-test = ["androidx-compose-ui-test", "androidx-compose-ui-testManifest"] @@ -132,12 +129,7 @@ coil-kt-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = " coil-kt-svg = { group = "io.coil-kt", name = "coil-svg", version.ref = "coil" } compose-markdown = { group = "com.github.jeziellago", name = "compose-markdown", version.ref = "composeMarkdown" } eclipse-jgit = { group = "org.eclipse.jgit", name = "org.eclipse.jgit", version.ref = "jgit" } -firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.ref="firebaseBom"} -firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics"} -firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics"} -firebase-performance = { group = "com.google.firebase", name = "firebase-perf"} google-android-material = { group = "com.google.android.material", name = "material", version.ref = "googleAndroidMaterial" } -google-services = { module = "com.google.gms:google-services", version.ref = "gmsPlugin" } hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } hilt-ext-work = { group = "androidx.hilt", name = "hilt-work", version.ref = "hiltExt" } hilt-ext-compiler = { group = "androidx.hilt", name = "hilt-compiler", version.ref = "hiltExt" } @@ -181,18 +173,18 @@ xmlutil-core-android = { group = "io.github.pdvrieze.xmlutil", name = "core-andr xmlutil-serialization-android = { group = "io.github.pdvrieze.xmlutil", name = "serialization-android", version.ref = "xmlutil" } timber = { group = "com.jakewharton.timber", name = "timber", version.ref = "timber" } hiddenapibypass = "org.lsposed.hiddenapibypass:hiddenapibypass:4.3" +# Non open-source dependencies # Dependencies of the included build-logic android-gradlePlugin = { group = "com.android.tools.build", name = "gradle", version.ref = "androidGradlePlugin" } android-tools-common = { group = "com.android.tools", name = "common", version.ref = "androidTools" } compose-gradlePlugin = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } -firebase-crashlytics-gradlePlugin = { group = "com.google.firebase", name = "firebase-crashlytics-gradle", version.ref = "firebaseCrashlyticsPlugin" } -firebase-performance-gradlePlugin = { group = "com.google.firebase", name = "perf-plugin", version.ref = "firebasePerfPlugin" } kotlin-gradlePlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } ksp-gradlePlugin = { group = "com.google.devtools.ksp", name = "com.google.devtools.ksp.gradle.plugin", version.ref = "ksp" } licensee-gradlePlugin = { group = "app.cash.licensee", name = "licensee-gradle-plugin", version.ref = "licensee" } room-gradlePlugin = { group = "androidx.room", name = "room-gradle-plugin", version.ref = "room" } work-testing = { group = "androidx.work", name = "work-testing", version.ref = "androidxWork" } +# Non open-source plugins [plugins] android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" } @@ -202,9 +194,6 @@ android-test = { id = "com.android.test", version.ref = "androidGradlePlugin" } baselineprofile = { id = "androidx.baselineprofile", version.ref = "androidxMacroBenchmark"} compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } dependencyGuard = { id = "com.dropbox.dependency-guard", version.ref = "dependencyGuard" } -firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebaseCrashlyticsPlugin"} -firebase-perf = { id = "com.google.firebase.firebase-perf", version.ref = "firebasePerfPlugin"} -gms = { id = "com.google.gms.google-services", version.ref = "gmsPlugin"} hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } @@ -215,11 +204,11 @@ module-graph = { id = "com.jraska.module.graph.assertion", version.ref = "module protobuf = { id = "com.google.protobuf", version.ref = "protobufPlugin" } roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" } room = { id = "androidx.room", version.ref = "room" } +# Non open-source plugins # Plugins defined by this project blocker-android-application = { id = "blocker.android.application" } blocker-android-application-compose = { id = "blocker.android.application.compose" } -blocker-android-application-firebase = { id = "blocker.android.application.firebase" } blocker-android-application-flavors = { id = "blocker.android.application.flavors" } blocker-android-application-jacoco = { id = "blocker.android.application.jacoco" } blocker-android-feature = { id = "blocker.android.feature" }