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升级到与当前Lifecycle
2.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
相关产品推荐
相关产品推荐

