diff --git a/app/build.gradle b/app/build.gradle index 4102ea7cc..a13261c0b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -316,6 +316,9 @@ dependencies { implementation Deps.glide annotationProcessor Deps.glideAnnotationProcessor + + debugImplementation Deps.flipper + debugImplementation Deps.soLoader } if (project.hasProperty("raptor")) { diff --git a/app/src/debug/AndroidManifest.xml b/app/src/debug/AndroidManifest.xml index f3c91aa4e..27db316cd 100644 --- a/app/src/debug/AndroidManifest.xml +++ b/app/src/debug/AndroidManifest.xml @@ -3,8 +3,15 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> + + + android:name="org.mozilla.fenix.DebugFenixApplication"> + + + + \ No newline at end of file diff --git a/app/src/debug/java/org/mozilla/fenix/DebugFenixApplication.kt b/app/src/debug/java/org/mozilla/fenix/DebugFenixApplication.kt index d9e98ce17..fa75b4e6c 100644 --- a/app/src/debug/java/org/mozilla/fenix/DebugFenixApplication.kt +++ b/app/src/debug/java/org/mozilla/fenix/DebugFenixApplication.kt @@ -7,6 +7,14 @@ package org.mozilla.fenix import android.content.Context import android.content.SharedPreferences import androidx.preference.PreferenceManager +import com.facebook.flipper.android.AndroidFlipperClient +import com.facebook.flipper.android.utils.FlipperUtils +import com.facebook.flipper.plugins.inspector.DescriptorMapping +import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin +import com.facebook.flipper.plugins.leakcanary.LeakCanaryFlipperPlugin +import com.facebook.flipper.plugins.leakcanary.RecordLeakService +import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin +import com.facebook.soloader.SoLoader import com.squareup.leakcanary.AndroidHeapDumper import com.squareup.leakcanary.HeapDumper import com.squareup.leakcanary.LeakCanary @@ -17,6 +25,22 @@ import java.io.File class DebugFenixApplication : FenixApplication() { + override fun onCreate() { + super.onCreate() + SoLoader.init(this, false) + + if (FlipperUtils.shouldEnableFlipper(this)) { + AndroidFlipperClient.getInstance(this).apply { + addPlugin(InspectorFlipperPlugin(this@DebugFenixApplication, + DescriptorMapping.withDefaults())) + addPlugin(LeakCanaryFlipperPlugin()) + addPlugin(SharedPreferencesFlipperPlugin(this@DebugFenixApplication, + this@DebugFenixApplication.packageName + "_preferences")) + start() + } + } + } + private var heapDumper: ToggleableHeapDumper? = null override fun setupLeakCanary() { @@ -24,6 +48,7 @@ class DebugFenixApplication : FenixApplication() { val defaultDumper = AndroidHeapDumper(this, leakDirectoryProvider) heapDumper = ToggleableHeapDumper(this, defaultDumper) LeakCanary.refWatcher(this) + .listenerServiceClass(RecordLeakService::class.java) .heapDumper(heapDumper) .buildAndInstall() } diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index 10c74a775..a5b1ddc6c 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -35,6 +35,8 @@ private object Versions { const val mockito = "2.23.0" const val mockk = "1.9.kotlin12" const val glide = "4.9.0" + const val flipper = "0.18.0" + const val soLoader = "0.5.1" } @Suppress("unused") @@ -141,4 +143,7 @@ object Deps { const val glide = "com.github.bumptech.glide:glide:${Versions.glide}" const val glideAnnotationProcessor = "com.github.bumptech.glide:compiler:${Versions.glide}" + + const val flipper = "com.facebook.flipper:flipper:${Versions.flipper}" + const val soLoader = "com.facebook.soloader:soloader:${Versions.soLoader}" } diff --git a/gradle.properties b/gradle.properties index 17b8acca5..e7060cfc0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx1536m +org.gradle.jvmargs=-Xmx2048m # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects