When releasing to the Play Store, you build a release version of the APK, stripped of all debugging information. So if a crash happens, there is no way to connect to the phone over adb and get system logs. The solution is to use a library that catches those exceptions and sends them to a server. We will use Crashlytics by Fabric. Firebase also has its own solution, but it is being replaced by Crashlytics. The process is simple so this post will be short:

  • Create an account
  • Get the Fabric plugin for Android Studio.
  • Then I got an error saying that firebase-ui-auth already set up a fabric api key, and suggests a way to override that value.
Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute meta-data#io.fabric.ApiKey@value value=(...) from AndroidManifest.xml:40:13-69
  	is also present at [com.firebaseui:firebase-ui-auth:2.3.0] AndroidManifest.xml:21:13-60 value=(@string/twitter_consumer_secret).
  	Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:38:9-40:72 to override.
  • In order to use tools:replace, I had to add the tools namespace. The changes to the manifest look like this:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.wafrat.rappel">
    ...
    <application ...>
        ...
        <meta-data
            android:name="io.fabric.ApiKey"
            android:value="..."
            tools:replace="android:value" />
    </application>
</manifest>
  • Then it compiled and upon launching, the Fabric website showed me I had successfully integrated its library into my app.

Now that the app reports crashes, we can set up ProGuard more easily.

Screen-Shot-2017-10-02-at-6.26.29-AM