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生效)
升级AGP版本
在项目根目录的build.gradle(或build.gradle.kts)中,将AGP版本指定为7.0.0及以上:buildscript { dependencies { classpath "com.android.tools.build:gradle:7.0.0" // 可使用更高稳定版本,如8.2.0 } }配置编译选项与目标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' }正确引入MRJAR依赖
将MRJAR放入app/libs目录后,在app模块的依赖块中声明:dependencies { implementation files('libs/your-mrjar-file.jar') }验证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,提问作者黄柯睿
相关产品推荐
相关产品推荐

