Chrome CustomTab 错误:java.lang.NoSuchMethodError:没有静态方法 startActivity

Posted

技术标签:

【中文标题】Chrome CustomTab 错误:java.lang.NoSuchMethodError:没有静态方法 startActivity【英文标题】:Chrome CustomTab error: java.lang.NoSuchMethodError: No static method startActivity 【发布时间】:2017-05-24 16:31:46 【问题描述】:

我正在尝试使用 chrome 自定义标签将 fitbit 与我的应用程序连接起来。但我收到以下错误。

java.lang.NoSuchMethodError: 类 Landroid/support/v4/app/ActivityCompat 中没有静态方法 startActivity(Landroid/app/Activity;Landroid/content/Intent;Landroid/os/Bundle;)V;或其超类(“android.support.v4.app.ActivityCompat”的声明出现在 /data/data/com.life.myApp.app/files/instant-run/dex/slice-com.android.support-support -compat-25.0.1_a32c44837a06d33159cc113605aa7f1cb8d56675-classes.dex) 在 android.support.customtabs.CustomTabsIntent.launchUrl(CustomTabsIntent.java:200) 在 com.life.myApp.app.ThirdPartyLibrary.TrackersDevies.FitBitTracker.LoginFitTrackers.onActivityCreated(LoginFitTrackers.java:208) 在 android.app.Fragment.performActivityCreated (Fragment.java:2289) 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1008) 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1164) 在 android.app.BackStackRecord.run(BackStackRecord.java:793) 在 android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1557) 在 android.app.FragmentManagerImpl$1.run(FragmentManager.java:488) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:7223) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

这是我的 gradle 文件

buildscript 
repositories 
    maven  url 'https://maven.fabric.io/public' 


dependencies 
    classpath 'io.fabric.tools:gradle:1.+'


apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
android 
compileSdkVersion 24
buildToolsVersion '24.0.1'

dexOptions 
    javaMaxHeapSize "4g"
    incremental = true;



defaultConfig 
    applicationId "com.life.myApp.app"
    minSdkVersion 16
    targetSdkVersion 24
    versionCode 20
    versionName "1.1.0.15"
    multiDexEnabled true

compileOptions 
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7

buildTypes 
    release 
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    

allprojects 
    tasks.withType(JavaCompile) 
        options.compilerArgs << "-Xlint:deprecation"
    



repositories 
maven  url 'https://maven.fabric.io/public' 



dependencies 
compile 'com.android.support:customtabs:24.2.1'
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:design:24.2.1'
compile 'com.android.support:support-v4:24.2.1'
compile 'com.android.support:multidex:1.0.1'
compile 'com.google.android.gms:play-services-analytics:9.6.1'
compile 'com.adjust.sdk:adjust-android:4.7.0'
compile 'com.segment.analytics.android:analytics:4.2.0'
compile('com.crashlytics.sdk.android:crashlytics:2.6.5@aar') 
    transitive = true;

compile 'oauth.signpost:signpost-core:1.2.1.2'
compile 'oauth.signpost:signpost-commonshttp4:1.2.1.2'
compile 'com.squareup.picasso:picasso:2.4.0'
compile 'com.google.android.gms:play-services-fitness:9.6.1'
compile 'com.google.android.gms:play-services-auth:9.6.1'
compile 'com.google.code.gson:gson:2.7'
compile 'com.android.support:cardview-v7:24.2.1'
compile 'com.mcxiaoke.volley:library-aar:1.0.0'
compile 'com.liulishuo.magicprogresswidget:library:1.0.9'
compile 'com.wdullaer:materialdatetimepicker:3.0.0'



configurations 
compile.exclude group: "org.apache.httpcomponents", module: "httpclient"

/*
android 
useLibrary 'org.apache.http.legacy'
*/

这是我的 java 代码。

speedUpChromeTabs();
        weakReference = new WeakReference<Activity>(getActivity());

        CustomTabsClient.bindCustomTabsService(getActivity().getApplicationContext(), CUSTOM_TAB_PACKAGE_NAME, mCustomTabsServiceConnection);
        customTabsIntent = new CustomTabsIntent.Builder(mCustomTabsSession)
                .setToolbarColor(ContextCompat.getColor(getActivity(), R.color.blue))
                .setShowTitle(true)
                .build();
     url = url + "?time=" + (new Date().getTime());
                customTabsIntent.launchUrl(getActivity(), Uri.parse("http://www.google.com"));

我尝试过This、This 和This,但目前没有成功。

【问题讨论】:

也添加java代码 错误是No static method startActivity(Landroid/app/Activity;Landroid/content/Intent;Landroid/os/Bundle;)V in class Landroid/support/v4/app/ActivityCompat; or its super classes,可能错误是在活动中。 嗨@W4R10CK 感谢您的回复。请你详细解释一下。 在我看到活动代码后让我解释一下。请也发布。 【参考方案1】:

我在我的应用程序中更新了该代码并且运行良好。因为 文档说 23 版本,它会引发此错误。

mCustomTabsServiceConnection = new CustomTabsServiceConnection() 
            @Override
            public void onCustomTabsServiceConnected(ComponentName componentName, CustomTabsClient customTabsClient) 
                mCustomTabsClient= customTabsClient;
                mCustomTabsClient.warmup(0L);
                mCustomTabsSession = mCustomTabsClient.newSession(null);
            

            @Override
            public void onServiceDisconnected(ComponentName name) 
                mCustomTabsClient= null;
            
        ;

        CustomTabsClient.bindCustomTabsService(getActivity(), CUSTOM_TAB_PACKAGE_NAME, mCustomTabsServiceConnection);

        mCustomTabsIntent = new CustomTabsIntent.Builder(mCustomTabsSession)
                .setShowTitle(true)
                .build();

并且在 gradle 文件中也进行了更改

android 
    compileSdkVersion 25
    buildToolsVersion '25.0.1'

    defaultConfig 
        applicationId "com.MyApp.app"
        minSdkVersion 16
        targetSdkVersion 25
        multiDexEnabled true
    

 compile 'com.android.support:appcompat-v7:25.1.0'
    compile 'com.android.support:design:25.1.0'

    compile 'com.android.support:customtabs:25.1.0+'
    compile 'com.android.support:design:25.1.0'
    compile 'com.android.support:support-v4:25.1.0'

【讨论】:

【参考方案2】:

我做的是那个

 compile 'com.android.support:customtabs:25.1.0+'

因为文档说是 23 版本,所以会抛出这个错误。

【讨论】:

【参考方案3】:

我已经在一个项目中使用了以下 sdk 版本集

 compileSdkVersion 25
 buildToolsVersion '25.0.1'

但我使用 Chrome 自定义选项卡并获得相同异常的项目

 compileSdkVersion 24
 buildToolsVersion '24.0.0'

请将 compile 和 target sdk 版本从 24 更新到 25

【讨论】:

以上是关于Chrome CustomTab 错误:java.lang.NoSuchMethodError:没有静态方法 startActivity的主要内容,如果未能解决你的问题,请参考以下文章

Swift:为 CustomTab 重用一个 ViewController

Python/Chrome/Java 的分段错误(linux mint)

java WebDriverException:未知错误:Chrome无法启动:异常退出

Headless Chrome Circle CI - 错误:spawn /usr/lib64/jvm/java-1.8.0-openjdk-1.8.0/bin/java ENOENT

Chrome 浏览器无法使用 Java 在 Appium 中启动

获取chrome的控制台日志