android-studio - com.android.tools.r8.a:MethodHandle.invoke 和 MethodHandle.invokeExact 仅从 Android O 开始支持 (--min-api 26)
问题描述
实现 'org.apache.poi:poi:5.0.0'
当我使用 Run 'app' 在模拟器/手机上运行时,上述依赖项工作正常,但是当我尝试构建 apk 时,出现以下错误。
com.android.tools.r8.a:MethodHandle.invoke 和 MethodHandle.invokeExact 仅从 Android O 开始支持 (--min-api 26)
我在下面尝试
如果我删除依赖项,它工作正常。
如果我将 minSdkVersion 21 更新为 26,那么它工作正常。
所以我的问题是我想使用 minsdkversion 21 以及依赖项(此功能(EXCEL 文件)仅适用于 sdkversion>=26)
那么我怎样才能达到同样的效果呢?
先感谢您。
解决方案
目前这是不可能的。D8 将只允许编译使用调用自定义和方法句柄的代码minSdkVersion
为 26 或更高,因为这是 Android 支持这些功能的第一个版本。
取消该限制存在一个悬而未决的问题。但是,根据库中的代码,如果使用调用自定义和方法句柄的代码将在运行时在 API 级别为 25 或更低的设备上命中,则这可能会最终成为运行时错误。
您可以从 Android Studio 运行代码的原因是,在设备或模拟器上进行调试时,Android Studio 会“人为地”将minSdkVersion
构建提升到附加的设备或模拟器的构建。这是为了通过利用设备或仿真器所支持的功能来提供最佳的开发体验。
推荐阅读
- java - 设备特定的振动问题
- android - Android Studio 更新后无法解析符号“NonNull”
- jmeter - 需要使用 JMeter 获取第一次出现的 JSON 响应
- r - strsplit 按点和下划线并将数据粘贴到两列中
- groovy - 如何编写 Groovy 脚本以逐块迭代特定字段的日志文件
- vba - 在 Excel 列中查找所有实例
- java - 在 assertj 中使用ComparatorForType 似乎不适用于作为对象属性的对象属性
- c# - 来自 PLC 的 C# UDP 消息无法在 Unity3D 中接收,但在 Wireshark 中可见
- android - Android:按住/单击按钮时如何更改/删除按钮行程
- jsf - 在primefaces中显示数据表中的数据到inputText