java - Android 4.2.2 设备上的 java.lang.NoClassDefFoundError
问题描述
我有一个 Android 应用程序,需要实现蓝牙低功耗功能。BLE 功能应在 Android API 级别 > 26 (Android 8) 的设备上运行,但应用程序也应在 Android > 17 (Android 4.2) 的设备上启动。我已经在 Android 8 和 4.4 上测试了这个应用程序,没有任何问题。如果我让应用程序在装有 Android 4.2.2 的设备上运行,它会在启动后立即崩溃。日志如下所示:
AndroidRuntime:致命异常:主要 java.lang.NoClassDefFoundError:android/bluetooth/BluetoothGatt
引起:java.lang.ClassNotFoundException:在路径上找不到类“android.bluetooth.BluetoothGatt”:/data/app/com.evva.aess.android.programmingdevice-1.apk
安卓项目配置:
compileSdkVersion = 26
buildToolsVersion = '27.0.3'
minSdkVersion = 17
targetSdkVersion = 26
MultiDex 也已启用,我的主应用程序扩展了 MultiDexApplication。
是否需要配置proguard规则?我不知道如何解决这个问题,谢谢你的帮助。
解决方案
从文档中可以看出,BluethoothGatt 是在 API 级别 18 中添加的:https ://developer.android.com/reference/android/bluetooth/BluetoothGatt 。
您当前的 minSDK 是 17。您必须更新您的 minSDK 或找到其他解决方案(例如 3rd 方库等)
推荐阅读
- mysql - 当两个表中都不存在数据时查询不返回结果
- android-studio - 如何安装已经在后台下载的android studio sdk包?
- javascript - 如何指示一个对象在打字稿中可能没有键
- php - 如何将参数传递给 PDO 准备语句
- spring-boot - 如何使用注释将 3 个类相互连接?(JPA/Spring-Boot)
- docker - Vagrant + Docker 提供商,在静态 IP 上苦苦挣扎
- twitter - 关于 Twitter 的黑客马拉松项目
- node.js - 如何制作向用户添加角色的命令
- vue.js - 如何在中间件中调用mixin函数
- linux - 为什么 fdatasync() 等同于 Linux 2.2 及更早版本中的 fsync()?