diff --git a/app/build.gradle b/app/build.gradle
index 4102ea7cc71e..a13261c0baf9 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 f3c91aa4e8e2..27db316cde0b 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 d9e98ce17e8e..fa75b4e6c741 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 10c74a775588..a5b1ddc6cb2c 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 17b8acca59fe..e7060cfc006c 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