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

Android系统是否支持Multi-Release JAR?如何使其正常工作?

Android对Multi-Release JAR的支持及配置方案

一、Android是否支持Multi-Release JAR?

Android从API 30(Android 11)开始原生支持Multi-Release JAR(MRJAR)的多版本类加载逻辑,同时需要配合Android Gradle Plugin(AGP)7.0及以上版本使用——旧版AGP会忽略MRJAR的META-INF/versions/目录结构,无法正确加载对应JDK版本的实现类。

如果在低于API30的设备上使用MRJAR,系统只会加载JAR根目录的基础版本类,不会触发多版本分支逻辑。

二、配置步骤(确保MRJAR生效)

  1. 升级AGP版本
    在项目根目录的build.gradle(或build.gradle.kts)中,将AGP版本指定为7.0.0及以上:

    buildscript {
        dependencies {
            classpath "com.android.tools.build:gradle:7.0.0" // 可使用更高稳定版本,如8.2.0
        }
    }
    
  2. 配置编译选项与目标JDK版本
    在app模块的build.gradle(或build.gradle.kts)中,设置与MRJAR兼容的JDK版本,并按需启用核心库脱糖:

    android {
        compileOptions {
            // 匹配MRJAR支持的最高JDK版本,比如11
            sourceCompatibility JavaVersion.VERSION_11
            targetCompatibility JavaVersion.VERSION_11
            // 若需兼容API30以下设备,启用核心库脱糖
            coreLibraryDesugaringEnabled true
        }
    
        // 若使用Kotlin,同步设置JVM目标版本
        kotlinOptions {
            jvmTarget = "11"
        }
    }
    
    // 核心库脱糖依赖(启用脱糖时需添加)
    dependencies {
        coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
    }
    
  3. 正确引入MRJAR依赖
    将MRJAR放入app/libs目录后,在app模块的依赖块中声明:

    dependencies {
        implementation files('libs/your-mrjar-file.jar')
    }
    
  4. 验证MRJAR结构合规性
    确保你的MRJAR符合规范:

    • 根目录包含基础版本的类文件(兼容最低JDK版本)
    • 存在META-INF/versions/目录,子目录以JDK版本号命名(如9、11),内部存放对应JDK版本的实现类
      可通过命令jar tf your-mrjar-file.jar查看结构是否正确。

三、常见问题排查

  • 测试设备版本过低:仅API30+设备会自动加载对应JDK版本的MRJAR类,低版本设备只会使用基础版本,若你的API仅在高版本分支中实现,低版本设备无法触发打印逻辑。
  • AGP版本未达标:旧版AGP会合并MRJAR所有目录的类,可能导致类冲突或多版本逻辑失效,必须升级到7.0+。
  • MRJAR结构错误:若META-INF/versions/目录缺失或类路径不正确,系统无法识别多版本分支。

内容的提问来源于stack exchange,提问作者黄柯睿

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:38:13