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

旧项目生成的.jar引入新项目后崩溃,报NoSuchFieldError求助

问题排查:引入旧项目JAR后应用崩溃

我从旧项目生成了一个.jar文件,引入新项目后应用直接崩溃。新项目只有一个布局,和JAR里的布局名称不同,两个项目包名也不一样,实在找不到问题所在,麻烦帮忙排查。

崩溃日志

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.clientapp, PID: 2837
    java.lang.NoSuchFieldError: No static field abc_text_select_handle_left_mtrl of type I in class Landroidx/appcompat/R$drawable; or its superclasses (declaration of 'androidx.appcompat.R$drawable' appears in /data/app/~~m2UIxY8m41H6F1206VId5A==/com.example.clientapp-uQDl-7yLeT3HZC91kbld4Q==/base.apk)
        at androidx.appcompat.widget.AppCompatDrawableManager$1.<init>(AppCompatDrawableManager.java:93)
        at androidx.appcompat.widget.AppCompatDrawableManager.preload(AppCompatDrawableManager.java:62)
        at androidx.appcompat.app.AppCompatDelegateImpl.<init>(AppCompatDelegateImpl.java:342)
        at androidx.appcompat.app.AppCompatDelegateImpl.<init>(AppCompatDelegateImpl.java:292)
        at androidx.appcompat.app.AppCompatDelegate.create(AppCompatDelegate.java:230)
        at androidx.appcompat.app.AppCompatActivity.getDelegate(AppCompatActivity.java:586)
        at androidx.appcompat.app.AppCompatActivity.attachBaseContext(AppCompatActivity.java:139)
        at android.app.Activity.attach(Activity.java:7939)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3622)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3832)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2247)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7886)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:568)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045)

新项目build.gradle内容

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}

android {
    namespace 'com.example.clientapp'
    compileSdk 33

    defaultConfig {
        applicationId "com.example.clientapp"
        minSdk 24
        targetSdk 33
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.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
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.9.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation files('libs/BpLibrary.jar')
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}

问题原因与解决方法

核心原因

崩溃是AppCompat版本不兼容导致的:你新项目使用的androidx.appcompat:appcompat:1.2.0版本较低,而旧项目生成的JAR可能依赖了不同版本的AppCompat,导致资源字段abc_text_select_handle_left_mtrl无法找到——该资源在AppCompat的部分版本中被移除或重命名,版本不匹配时就会触发NoSuchFieldError。

解决步骤

  1. 统一AppCompat版本
    将新项目的AppCompat依赖升级到与旧项目一致的版本,或直接使用最新稳定版,比如:

    implementation 'androidx.appcompat:appcompat:1.6.1'
    

    若不确定旧项目版本,优先尝试最新稳定版,最大程度避免版本冲突。

  2. 改用AAR格式替代JAR
    JAR无法妥善处理Android资源依赖,建议将旧项目改为Android Library模块,生成AAR文件引入新项目。AAR会自动管理资源和依赖,避免资源冲突问题。

  3. 清理并重构项目
    调整依赖后,执行以下操作确保缓存清理、依赖生效:

    • 点击Android Studio菜单栏的Build > Clean Project
    • 再执行Build > Rebuild Project
  4. 排查依赖树
    若问题仍存在,用Gradle命令查看完整依赖树,确认是否有其他冲突:

    ./gradlew app:dependencies
    

    搜索appcompat相关条目,确保所有模块使用同一版本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:25:49