在尝试使用Android.Support.v4.Content命名空间中包含的LocalBroadcastManager类时,我遇到了运行时问题。在我的IDE中,我明确地添加了引用,并且可以将命名空间/类的范围设置得很好,并且在编写一些代码之后,按预期编译。但是,在应用程序部署和启动时,我提示错误:“NoClassDefFoundError:android / support / v4 / content / LocalBroadcastManager”
这是提示运行时错误的代码(DSC_Discconected_From_Device是一个继承自BroadcastReceiver的类)。它会在最后一行停止执行。
IntentFilter filter = new IntentFilter(UsbManager.ActionUsbDeviceDetached);
DSC_Disconnected_From_Device Receiver = new DSC_Disconnected_From_Device();
LocalBroadcastManager.GetInstance(this).RegisterReceiver(Receiver, filter);
在SDK管理器下,安装了所有API包,以及额外的“支持库”包。
它在哪里寻找班级的定义?我可能会将源LocalBroadcastManager.java复制到android-sdk框架中“可能”正在寻找的路径。例如:.. \ android-sdk \ extras \ android \ support \ v4 \ src \ honeycomb \ _android \ support \ v4 \ content \ LocalBroadcastManager.java
想法?
编辑:忘记提到我的项目已经在位于项目根目录的文件夹“libs”中引用了支持库android-support-v4。我必须创建目录并通过Visual Studio添加它。
这个问题困扰了我近六个月,没有任何解决方案可以帮助我,但今天我已经设法找到了正确的解决方案。
当您选择项目目标版本大于或等于Android 4.0时,Android SDK会在项目“libs”文件夹中包含“android-support-v4.jar”文件。此jar包含与Android 4.0或更高版本相关的所有类和方法。
Android正在尝试查找“android-support-v4.jar”中的类定义,这意味着您尚未配置“android-support-v4.jar”文件的构建路径。为此,请按照下列步骤操作:
就是这样,你完成了!
我在android facebook集成时遇到了这个错误。原因是我在我的项目中添加了android-support-v4.jar库。 Facebook sdk已经支持图书馆了。因此,从libs和java构建路径中删除支持库如果您使用的库中已经有支持库。
在Android Studio 0.8.2中
在项目结构的依赖项选项卡中按绿色“+”,然后按键盘键“1”(对于libs)并选择v4 + lib
如果您启用了proguard,请尝试添加
# Local Broadcast Manager
-keep public class android.support.v4.content.LocalBroadcastManager
这为我修好了。
您需要将支持库.jar文件添加到IDE中的/ libs目录(如果它是Eclipse),以便在制作apk时Android安卓程序包将包含在您的apk中。
这个问题似乎与android-support-v4.jar库的“属性”有关。
默认情况下,Visual Studio中“高级属性”中列出的“构建操作”具有“内容”值。我将值切换到AndroidJavaLibrary,运行时错误消失了。
但是,BroadcastReceiver没有收到USB断开连接意图,嗯......会相应地更新这个答案。
编辑:我永远无法让LocalBroadcastReceiver工作,所以我不得不使用常规的。
只需用FacebookSDK> libs文件夹中的android-support-v4.jar替换> libs文件夹中项目的android-support-v4.jar