Android应用启动崩溃-customtabs.CustomTabsSession.validateRelationship [英] Android App Startup Crash - customtabs.CustomTabsSession.validateRelationship

查看:95
本文介绍了Android应用启动崩溃-customtabs.CustomTabsSession.validateRelationship的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于最近的受信任的网络活动,我遵循Google的指南并且我的应用程序在我的设备和某些选定的模拟器上运行良好.

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

但是,在某些设备和仿真器(例如Google Pixel 2)上,我会在启动时立即崩溃.

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

logcat输出:

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:

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>

模块build.gradle:

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'
}

项目build.gradle:

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
}

我还通过 Browserstack 在Android模拟器上测试了我的发行版APK,并且收到了完全相同的问题.我还在某些经过测试的物理设备(例如三星Galaxy S7 Edge)上收到了该问题,但奇怪的是,我测试了另一款Galaxy S7 Edge,并且工作正常.从到目前为止的测试来看,我猜想它可以在50%的测试设备上运行.我不是继承的Android开发人员,所以我一直在努力寻找导致此问题的原因,以及为什么它在某些设备上运行正常,而在某些设备上却无法运行.

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.

推荐答案

我在Chromium论坛上发布了此问题,并将其重定向到列出的

I posted this question on the Chromium forums and got redirected to a temporary fix listed here.

简而言之,他们已经意识到了这个问题,并希望尽快找到一个永久性的解决方案,这样就不必长期使用此临时修复程序了.

In short, they are aware of the issue and hope to have a permanent solution out soon so the temporary fix shouldn't be needed for long.

给出的答案:

目前,您可以将最后一个参数更改为CustomTabsClient#getPackageName

For the moment, you can change the last parameter to CustomTabsClient#getPackageName here to true. This parameter is 'ignoreDefault' and as you can probably guess will make the package selection ignore the user's default. Ideally though this won't be necessary for long.

这篇关于Android应用启动崩溃-customtabs.CustomTabsSession.validateRelationship的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆