gpt4 book ai didi

android - 旧版 Android SDK 上的 java.lang.NoClassDefFoundError

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:15 26 4
gpt4 key购买 nike

我在 Google Play 上发布了我的应用程序的一个版本,今天早上醒来发现有很多不满意的客户。该应用程序的最新版本集成了对低功耗蓝牙 (BTLE) 心率监测器的支持。

该应用在 Android 4.3 和 4.4 上运行良好,但在 4.0、4.1 和 4.2 上崩溃并出现以下错误。

FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: com.eiref.boatcoach.MainActivity
at com.eiref.boatcoach.WhatToDo.onClick(WhatToDo.java:274)
at android.view.View.performClick(View.java:4204)
at android.view.View$PerformClick.run(View.java:17355)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:152)
at android.app.ActivityThread.main(ActivityThread.java:5132)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

在类似下面的简单Onclick中创建Intent时出现错误...

public void onClick(View v) {
Intent i = new Intent(this, MainActivity.class);
startActivity(i);
}

为了重现这个问题,我赶紧买了一台 4.2 平板电脑,然后得出结论,这与支持蓝牙 LE 的新版应用程序有关,它在 SDK 4.3 及更高版本中启用。如果我在 MainActivity 中删除所有对蓝牙的引用,那么崩溃就会在 4.2 和更早版本的设备上消失。

我从阅读文档中了解到,可以编写一个包含蓝牙 LE 功能的应用程序,并且它可以在旧设备上运行,只要小心不要使用类似以下内容的 BTLE 代码...

if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) return;
BluetoothManager manager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
mBluetoothAdapter = manager.getAdapter();
//etc.

因此我的 manifest.xml 包含以下内容,因为它会阻止下载到旧设备,而且我显然希望尽可能维护一个代码库......

<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />    

第一个问题,我上面的假设是否能够在 4.3 之前的 SDK 中包含 BTLE 代码是否正确?如果不是,我是否真的需要创建应用程序的两个版本...一个供使用 4.3 及更高版本的人使用,另一个供其他人使用?

StackOverflow 上有很多关于 java.lang.NoClassDefFoundError 的帖子,我想我已经阅读了大部分相关的帖子。许多人建议我检查 Java Build Path 以确保检查了 Android Private Libraries 和 Android Dependencies。他们是。有些人建议将 gen 文件夹移动到 src 文件夹之前,但这似乎没有什么不同。

我会发布 Eclipse Java 构建路径的图像,但由于这是我的第一篇文章,我没有插入图像所需的 10 个信誉点,所以这是我关注的另一篇文章... Android java.lang.NoClassDefFoundError

那么,第二个问题,关于构建路径可能有什么问题还有其他想法吗?

非常感谢。


更新...不知何故,通过问一个问题,我得到了足够的分数来发布 java 构建路径的图像。正如@Ashoke 指出的那样,我认为这与错误的构建路径或支持库有关。

Eclipse Order and Export

Eclipse Libraries

最佳答案

尝试将所有与 Ble 相关的代码放入一个单独的类中,如果在具有必要 API 级别的设备上,您才完全实例化该类。我认为没有这个回调可能会导致您的问题。

关于android - 旧版 Android SDK 上的 java.lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26790594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com