Fix crash by disabling Flipper on API 22 and below (#7428)

* Disable Flipper on API 21 and below - only affects debug builds.

Due to a bug: https://github.com/facebook/flipper/issues/3572

* Add jonnyandrew to PR sign-off allowlist

Co-authored-by: Benoit Marty <benoit.marty@gmail.com>
This commit is contained in:
jonnyandrew 2022-10-21 17:36:31 +01:00 committed by GitHub
parent e003d01ec4
commit 31811bb7e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 38 additions and 20 deletions

1
changelog.d/7428.bugfix Normal file
View File

@ -0,0 +1 @@
Fix crash by disabling Flipper on Android API 22 and below - only affects debug version of the application.

View File

@ -81,6 +81,7 @@ const allowList = [
"Florian14", "Florian14",
"ganfra", "ganfra",
"jmartinesp", "jmartinesp",
"jonnyandrew",
"langleyd", "langleyd",
"MadLittleMods", "MadLittleMods",
"manuroe", "manuroe",

View File

@ -17,6 +17,7 @@
package im.vector.app.flipper package im.vector.app.flipper
import android.content.Context import android.content.Context
import android.os.Build
import com.facebook.flipper.android.AndroidFlipperClient import com.facebook.flipper.android.AndroidFlipperClient
import com.facebook.flipper.android.utils.FlipperUtils import com.facebook.flipper.android.utils.FlipperUtils
import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin
@ -31,6 +32,7 @@ import com.kgurgul.flipper.RealmDatabaseDriver
import com.kgurgul.flipper.RealmDatabaseProvider import com.kgurgul.flipper.RealmDatabaseProvider
import im.vector.app.core.debug.FlipperProxy import im.vector.app.core.debug.FlipperProxy
import io.realm.RealmConfiguration import io.realm.RealmConfiguration
import okhttp3.Interceptor
import org.matrix.android.sdk.api.Matrix import org.matrix.android.sdk.api.Matrix
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Singleton import javax.inject.Singleton
@ -41,29 +43,43 @@ class VectorFlipperProxy @Inject constructor(
) : FlipperProxy { ) : FlipperProxy {
private val networkFlipperPlugin = NetworkFlipperPlugin() private val networkFlipperPlugin = NetworkFlipperPlugin()
private val isEnabled: Boolean
get() {
// https://github.com/facebook/flipper/issues/3572
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
return false
}
return FlipperUtils.shouldEnableFlipper(context)
}
override fun init(matrix: Matrix) { override fun init(matrix: Matrix) {
if (!isEnabled) return
SoLoader.init(context, false) SoLoader.init(context, false)
if (FlipperUtils.shouldEnableFlipper(context)) { val client = AndroidFlipperClient.getInstance(context)
val client = AndroidFlipperClient.getInstance(context) client.addPlugin(CrashReporterPlugin.getInstance())
client.addPlugin(CrashReporterPlugin.getInstance()) client.addPlugin(SharedPreferencesFlipperPlugin(context))
client.addPlugin(SharedPreferencesFlipperPlugin(context)) client.addPlugin(InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()))
client.addPlugin(InspectorFlipperPlugin(context, DescriptorMapping.withDefaults())) client.addPlugin(networkFlipperPlugin)
client.addPlugin(networkFlipperPlugin) client.addPlugin(
client.addPlugin( DatabasesFlipperPlugin(
DatabasesFlipperPlugin( RealmDatabaseDriver(
RealmDatabaseDriver( context = context,
context = context, realmDatabaseProvider = object : RealmDatabaseProvider {
realmDatabaseProvider = object : RealmDatabaseProvider { override fun getRealmConfigurations(): List<RealmConfiguration> {
override fun getRealmConfigurations(): List<RealmConfiguration> { return matrix.debugService().getAllRealmConfigurations()
return matrix.debugService().getAllRealmConfigurations() }
} })
}) )
) )
) client.start()
client.start()
}
} }
override fun networkInterceptor() = FlipperOkhttpInterceptor(networkFlipperPlugin) override fun networkInterceptor(): Interceptor? {
if (!isEnabled) return null
return FlipperOkhttpInterceptor(networkFlipperPlugin)
}
} }