You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android项目启动报java.lang.NoSuchMethodError依赖问题求助

Android项目启动崩溃:NoSuchMethodError(ViewModelProvider构造方法缺失)

崩溃日志

FATAL EXCEPTION: main

Process: com.parsons.bakery, PID: 7383

java.lang.NoSuchMethodError: No direct method <init>(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;)V in class Landroidx/lifecycle/ViewModelProvider; or its super classes (declaration of 'androidx.lifecycle.ViewModelProvider' appears in /data/app/~~N-cXo7nNU-D-YF78BsrFiA==/com.parsons.bakery-FmBA96FlD6t9sILcrQfjgw==/base.apk)

at androidx.fragment.app.FragmentManagerViewModel.getInstance(FragmentManagerViewModel.java:52)

at androidx.fragment.app.FragmentManager.attachController(FragmentManager.java:2703)

at androidx.fragment.app.FragmentController.attachHost(FragmentController.java:117)

at androidx.fragment.app.FragmentActivity.lambda$init$3$androidx-fragment-app-FragmentActivity(FragmentActivity.java:139)

at androidx.fragment.app.FragmentActivity$$ExternalSyntheticLambda3.onContextAvailable(Unknown Source:2)

at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable(ContextAwareHelper.kt:84)

at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:358)

at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:216)

at com.parsons.bakery.Loading.onCreate(Loading.java:14)

at android.app.Activity.performCreate(Activity.java:8595)

at android.app.Activity.performCreate(Activity.java:8573)

at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1456)

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3764)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3922)

at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)

at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139)

at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)

at android.os.Handler.dispatchMessage(Handler.java:106)

at android.os.Looper.loopOnce(Looper.java:205)

at android.os.Looper.loop(Looper.java:294)

at android.app.ActivityThread.main(ActivityThread.java:8177)

at java.lang.reflect.Method.invoke(Native Method)

at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)

问题背景

回到旧Android项目修改内容并更新依赖后,启动时在Loading类的super.onCreate(savedInstanceState)处触发崩溃,推测是依赖冲突导致,但尝试过更新/回滚依赖、清除缓存重启、修改ProGuard规则等操作均未解决。

项目build.gradle配置

plugins {
    id 'com.android.application'
    id 'com.google.gms.google-services'
}

android {
    compileSdk 34

    defaultConfig {
        applicationId "com.parsons.bakery"
        minSdk 27
        targetSdk 34
        versionCode 1
        versionName "1.1"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        proguardFiles 'proguard-rules.pro'
    }

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            multiDexKeepProguard = file('multidex-config.pro')
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    buildFeatures {
        viewBinding true
    }
    //namespace '${namespaceId}'
    allprojects {
        tasks.withType(JavaCompile).tap {
            configureEach {
                options.compilerArgs << "-Xlint:deprecation"
            }
        }
    }
}

dependencies {
    implementation 'com.google.code.gson:gson:2.11.0'
    implementation 'com.squareup.retrofit2:retrofit:2.11.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.11.0'
    implementation 'org.mindrot:jbcrypt:0.4'
    implementation 'androidx.appcompat:appcompat:1.7.0'
    implementation 'androidx.activity:activity:1.7.0'
    implementation 'androidx.fragment:fragment:1.5.4'
    implementation 'com.google.android.material:material:1.12.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'

    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.8.1'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.1'
    implementation 'androidx.navigation:navigation-fragment-ktx:2.7.7'
    implementation 'androidx.navigation:navigation-ui-ktx:2.7.7'
    implementation 'androidx.preference:preference:1.2.1'
    implementation 'androidx.annotation:annotation:1.8.0'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.17.1'
    implementation 'com.google.firebase:firebase-messaging:24.0.0'
    implementation 'com.google.firebase:firebase-auth:23.0.0'
    implementation 'com.google.firebase:firebase-firestore:25.0.0'
    implementation 'androidx.startup:startup-runtime:1.1.1'

    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}

崩溃触发代码片段

public class Loading extends AppCompatActivity {
    TextView currentActions;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); //Error when this is hit
        setContentView(R.layout.activity_loading);
...

解决方案

1. 统一AndroidX组件版本(推荐)

使用AndroidX BOM来统一管理所有AndroidX组件的版本,彻底避免版本不兼容问题:

  • 在dependencies块最顶部添加BOM依赖:
    implementation platform('androidx:androidx-bom:2024.06.00')
    
  • 移除所有AndroidX组件的版本号(比如androidx.appcompat:appcompat、androidx.fragment:fragment、androidx.lifecycle:lifecycle-viewmodel-ktx等的版本号),由BOM自动匹配兼容版本。

2. 手动对齐Fragment与Lifecycle版本

若不想使用BOM,需确保Fragment库和Lifecycle库版本兼容:

  • 当前Fragment版本为1.5.4,对应的Lifecycle版本最高兼容到2.5.x,可将Lifecycle依赖改为:
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.1'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1'
    
  • 或者将Fragment升级到与当前Lifecycle2.8.1匹配的版本,比如1.8.1:
    implementation 'androidx.fragment:fragment:1.8.1'
    

3. 检查并排除依赖冲突

执行以下Gradle命令查看项目依赖树,确认是否有低版本的lifecycle-viewmodel被间接引入:

./gradlew app:dependencies

若发现冲突,在对应依赖中添加exclude规则,比如:

implementation('androidx.fragment:fragment:1.8.1') {
    exclude group: 'androidx.lifecycle', module: 'lifecycle-viewmodel'
}

4. 清理构建缓存并重新编译

执行以下命令清理缓存,然后重新构建项目:

./gradlew clean
./gradlew assembleDebug

内容的提问来源于stack exchange,提问作者Charlotta16

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:35:01