Google Chrome TWA: Android App Startup Crash - customtabs.CustomTabsSession.validateRelationship

297 views
Skip to first unread message

GenesisBits

unread,
Feb 23, 2019, 8:34:47 AM2/23/19
to Chromium-discuss

I followed Googles guidelines for the recent Trusted Web Activities and my app has been working fine on my device and some select emulators.

However, on certain devices and emulators (such as Google Pixel 2) I get an immediate crash on startup.


The logcat outputs:


E/AndroidRuntime: FATAL EXCEPTION: main Process: com.ocdev.yu_gi_ohdatabase, PID: 5020 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.customtabs.CustomTabsSession.validateRelationship(int, android.net.Uri, android.os.Bundle)' on a null object reference at android.support.customtabs.TrustedWebUtils.launchAsTrustedWebActivity(TrustedWebUtils.java:134) at android.support.customtabs.trusted.LauncherActivity$TwaCustomTabsServiceConnection.onCustomTabsServiceConnected(LauncherActivity.java:199) at android.support.customtabs.CustomTabsServiceConnection.onServiceConnected(CustomTabsServiceConnection.java:44) at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1634) at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1663) at android.os.Handler.handleCallback(Handler.java:789) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ocdev.yu_gi_ohdatabase"> <application android:allowBackup="true" android:icon="@mipmap/ygo_fore" android:label="@string/app_name" android:roundIcon="@mipmap/ygo_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <meta-data android:name="asset_statements" android:resource="@string/asset_statements" /> <activity android:name="android.support.customtabs.trusted.LauncherActivity"> <!-- Edit android:value to change the url opened by the TWA --> <meta-data android:name="android.support.customtabs.trusted.DEFAULT_URL" android:value="https://db.ygoprodeck.com" /> <!-- This intent-filter adds the TWA to the Android Launcher --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- This intent-filter allows the TWA to handle Intents to open airhorner.com. --> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE"/> <!-- Edit android:host to handle links to the target URL--> <data android:scheme="https" android:host="db.ygoprodeck.com"/> </intent-filter> </activity> </application> </manifest>

Module build.gradle:
apply plugin: 'com.android.application' android { compileSdkVersion 28 defaultConfig { applicationId "com.ocdev.yu_gi_ohdatabase" minSdkVersion 16 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' implementation 'com.github.GoogleChrome.custom-tabs-client:customtabs:3a71a75c9f' implementation 'com.android.support:support-media-compat:28.0.0' implementation 'com.android.support:animated-vector-drawable:28.0.0' implementation 'com.android.support:support-v4:28.0.0' }

Project build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.3.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() maven { url "https://jitpack.io" } } } task clean(type: Delete) { delete rootProject.buildDir }

I also tested my release apk on Android Emulators via Browserstack and I receive the exact same issue. I also received the issue on some physical devices I test such as Samsung Galaxy S7 Edge but the strange thing is that I tested a different Galaxy S7 Edge and it worked without issues. From what I have tested so far, I'd guess it works on 50% of the devices I've tested. I'm not an inherit Android developer so I am struggling to find the cause of this issue and why it works fine and some devices and not on others.

I have this issue opened on Stack Exchange and it seems to be an issue with multiple people. Some are saying if Chrome is not the default web browser then this issue occurs.

domi...@chromium.org

unread,
Feb 24, 2019, 7:52:50 PM2/24/19
to Chromium-discuss, sixteen...@gmail.com, Peter Conn
+peconn - perhaps a bug in the support library?

Peter Conn

unread,
Feb 25, 2019, 5:41:00 AM2/25/19
to domi...@chromium.org, Chromium-discuss, sixteen...@gmail.com
Hello,

It sounds like you are running into this bug. There is a temporary fix linked, but we're going to make the client code more resilient.

Peter
Reply all
Reply to author
Forward
0 new messages