我正在尝试使用Chrome自定义标签将fitbit与我的应用相关联。但我得到了以下错误。
java.lang.NoSuchMethodError:没有静态方法startActivity(Landroid / app / Activity; Landroid / content / Intent; Landroid / os / Bundle;)类Landroid / support / v4 / app / ActivityCompat中的V;或其超级类(声明' android.support.v4.app.ActivityCompat'出现在/data/data/com.life.myApp.app/files/instant-run/dex/slice-com中。 android.support支持-COMPAT-25.0.1_a32c44837a06d33159cc113605aa7f1cb8d56675-classes.dex) 在android.support.customtabs.CustomTabsIntent.launchUrl(CustomTabsIntent.java:200) at 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) at java.lang.reflect.Method.invoke(Native Method) 在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"));
答案 0 :(得分:3)
我在我的应用中更新了该代码,并且工作得很好。因为 文档说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'
答案 1 :(得分:2)
我做的是那个
compile 'com.android.support:customtabs:25.1.0+'
因为文档说23版本,它会抛出此错误。
答案 2 :(得分:0)
我已经在一个项目中使用了下面的sdk版本
compileSdkVersion 25
buildToolsVersion '25.0.1'
但我正在使用Chrome自定义标签并获得相同异常的项目
compileSdkVersion 24
buildToolsVersion '24.0.0'
请将编译和目标sdk版本从24更新到25