当前位置: 首页 > news >正文

Invoke-customs are only supported starting with Android O (--min-api 26)

在这里插入图片描述

错误含义
D8 编译器告诉你:
代码里用了 Java 8 “invoke-dynamic” 语法(lambda、方法引用、默认接口方法、静态接口方法、重复注解等),但 当前 minSdk<26,低版本 Android 设备没有对应运行时支持,因此直接中断构建。

官方解决思路(二选一)
方案
是否推荐
说明

  1. 升 minSdk 到 26
    ✅ 最简单
    只要业务允许,一行搞定,无需额外依赖。

  2. 保持 minSdk<26
    ✅ 主流做法
    启用 desugaring(脱糖),让构建器把 Java 8 语法 转成旧指令,API 21+ 也能跑。


实操步骤
✅ 方案 A:直接升 minSdk(能接受 5.0 以下弃用)
android {
defaultConfig {
minSdk 26 // 从 21/23 提到 26
}
}Sync → Clean → Rebuild,报错立刻消失。
✅ 方案 B:保持低 minSdk,启用 desugaring

  1. 模块级 build.gradle 打开 Java 8 兼容 & 脱糖
android {compileOptions {// 1. 语言级别sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8// 2. 核心脱糖开关(AGP 4.0+)coreLibraryDesugaringEnabled true}kotlinOptions {jvmTarget = '1.8'}
}
dependencies {// 3. 官方脱糖库(用最新)coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
}2. Sync → Clean → Rebuild

现在 minSdk 21 也能正常使用 lambda / Stream / Optional / 方法引用 等 Java 8 特性。

常见坑
• 只写 compileOptions 但没加 coreLibraryDesugaringEnabled → 依旧报错。
• AGP < 4.0 → 需用 老插件 desugar_jdk_libs:1.1.5 且 不支持 Stream / Optional,最好 升级 AGP 到 7.0+。

一句话总结
能升 minSdk 就升到 26;
要兼容 5.0 以下 → 加 coreLibraryDesugaringEnabled true + 依赖 desugar_jdk_libs,lambda / Stream 随便用,构建不再报 Invoke-customs。

❗这样会导致原有的生产工程异常,因此不建议这么做,而是仔细梳理吃透工程配置。然后变更冲突工程参数即可

📌java.lang.NoSuchMethodError: No static method
metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
in class Ljava/lang/invoke/LambdaMetafactory; or its super classes
(declaration of ‘java.lang.invoke.LambdaMetafactory’ appears in
/apex/com.android.runtime/javalib/core-oj.jar)

异常含义
运行时跑到 LambdaMetafactory.metafactory 这个 Java 8 标准库方法时,发现 API < 26 的 Android 系统里根本没有该类,于是抛出:
java.lang.NoSuchMethodError: No static method metafactory(…LambdaMetafactory不是你代码写错,而是 minSdk < 26 的设备 不支持 invoke-dynamic 指令(lambda、方法引用、Stream 等)。

官方解决路线(二选一)
路线
是否推荐
说明

  1. 直接升 minSdk 到 26
    ✅ 最快
    只要业务允许,一行搞定,无需额外依赖。

  2. 保持 minSdk<26
    ✅ 主流
    启用 核心库脱糖(desugaring),把 LambdaMetafactory 等 Java 8 API 打包进 APK,21+ 也能跑。


实操步骤
✅ 方案 A:直接升 minSdk(放弃 5.0 以下)
android {
defaultConfig {
minSdk 26 // 从 21/23 提到 26
}
}Sync → Clean → Rebuild → 运行,崩溃消失。
✅ 方案 B:保持低 minSdk,启用 核心脱糖

  1. 模块级 build.gradle 打开脱糖 & Java 8 兼容
android {compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8// 关键:启用脱糖coreLibraryDesugaringEnabled true}kotlinOptions {jvmTarget = '1.8'}
}dependencies {// 官方脱糖库(用最新)coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
}2. Sync → Clean → Rebuild

现在 minSdk 21 的设备也能正常使用 lambda / 方法引用 / Stream / Optional 等,不再找系统 LambdaMetafactory。

常见坑
• 只写 compileOptions 但忘了 coreLibraryDesugaringEnabled true → 依旧崩溃。
• AGP < 4.0 → 老插件 不支持 LambdaMetafactory 脱糖,请升级 AGP 到 7.0+。
• Kotlin 1.5+ 默认生成 inddy lambda,必须脱糖或升 minSdk,无其他开关。

一句话总结
想支持 5.0 以下 → 加 coreLibraryDesugaringEnabled true + 依赖 desugar_jdk_libs:2.0.4,LambdaMetafactory 会被 脱糖库打包进 APK,系统再旧也能跑;
能接受 8.0+ → 直接把 minSdk 提到 26,崩溃立刻消失。
❗参考一下即可,并不建议使用上面解决方案

大前端++

AI 对大前端项目的冲击,【大前端++】来抵御
【混合开发】进阶到【大前端++】
【大前端++】几大特征
【大前端++】前端、大前端、大前端++的区别有哪些?

Android推荐阅读

Cannot fit requested classes in a single dex file (# methods: 93047 > 65536)
【Android】开发者模式启用

开发工具链推荐

API开发工具postman、国内xxapi和SmartApi的性能对比

健康杂谈

【论健康】怎么才算健康(健康的本质)
【论健康】健康的不可能三角

http://www.dtcms.com/a/427321.html

相关文章:

  • 安卓基础组件014--button圆角 背景色 边框
  • 【Android】浅谈kotlin协程应用
  • 比价网站源码整站程序梦幻西游网页版app
  • dz做网站虚拟主机可以干什么
  • Windows10,11自带的Hyper-V虚拟机开启及使用方法
  • QCustomPlot 系列总结:从入门到精通的完整指南与资源整理
  • RK3566鸿蒙开发板规格书Purple Pi OH
  • 大模型落地深水区:企业 AI 转型的实践路径与价值突破
  • 金顺广州外贸网站建设图片模板网站
  • LinuxC++——etcd-cpp-api精简源代码函数参数查询参考
  • [特殊字符]️ Spring Cloud Eureka 三步通:搭建注册中心 + 服务注册 + 服务发现,通俗易懂!
  • 打工人日报#20250930
  • 六安网站建设网络服务中国都在那个网站上做外贸
  • 软件工程实践团队作业——团队组建与实践选题
  • YDWE编辑器系列教程二:物体编辑器
  • 软考-系统架构设计师 NoSQL数据库详细讲解
  • 钢铁厂设备健康监测系统:AIoT技术驱动的智慧运维革命​
  • Elasticsearch集群监控信息(亲测)
  • TARA (威胁分析与风险评估) 学习笔记
  • 网站集成微信登陆如何选择大良网站建设
  • 鸿蒙:使用Image组件展示相册图片或rawfile图片
  • ubuntu系统当前的时间和时区
  • 图解式部署:WSL2 中 Dify 本地化安装与访问故障排查指南
  • ABAP+新值过长,仅可以传输255个元素
  • 顺序队列与环形队列的基本概述及应用
  • 数组的三角和
  • 文创产品设计的目的和意义岳阳优化营商环境
  • Spring Boot 内置日志框架 Logback - 以及 lombok 介绍
  • 网站优化塔山双喜百度关键词快速排名方法
  • 第十二届全国社会媒体处理大会笔记