- Platform: MonoDroid v4.2.4
- IDE: Visual Studio 2012
- Minimum SDK version: API 12
I'm having runtime issues when trying to utilize the LocalBroadcastManager class included in the Android.Support.v4.Content namespace. In my IDE, I've explicitly added the reference and can scope the namespace/class fine, and, after writing some code, compiles as expected. However, upon application deployment and launch, I'm prompted with the error: "NoClassDefFoundError: android/support/v4/content/LocalBroadcastManager"
Here's the code that prompts the runtime error (DSC_Discconected_From_Device is a class that inherits from BroadcastReceiver). It stops execution at the last line.
IntentFilter filter = new IntentFilter(UsbManager.ActionUsbDeviceDetached);
DSC_Disconnected_From_Device Receiver = new DSC_Disconnected_From_Device();
LocalBroadcastManager.GetInstance(this).RegisterReceiver(Receiver, filter);
Under the SDK manager, all the API packages are installed, as well as the "Support Library" package under extras.
Where is it looking for the definition of the class? I've presumably copied the source, LocalBroadcastManager.java, to paths in the android-sdk framework where it "might" be looking. For example: ..\android-sdk\extras\android\support\v4\src\honeycomb\android\support\v4\content\LocalBroadcastManager.java
Ideas?
Edit: Forgot to mention that my project already references the support library, android-support-v4, in the folder "libs", located in the root of my project. I had to create the directory and add it through Visual Studio.
This problem was hounding me for almost six months now and no solution was helping me but today I have managed to find the correct solution on my own.
When you select your project target version to be greater than or equal to Android 4.0, Android SDK includes "android-support-v4.jar" file in your projects "libs" folder. This jar contains all the classes and methods related Android 4.0 or later.
Android is trying to find the class definition which is in "android-support-v4.jar" so that means you have not configured the build path to the "android-support-v4.jar" file. To do this, follow these steps:
- Open your project properties
- Select "Java Build Path" from left side menu
- Select "Libraries" tab
- Press "Add External Jar"
- (Most important step) Select "android-support-v4" jar file of "libs" folder from your CURRENT PROJECT LOCATION (path should be on your project folder and not the android sdk).
- Select "Order and Export" tab and "TICK" the checkbox of "android-support-v4.jar"
That's it, you're done!
I had this error with android facebook integration.The reason was I had android-support-v4.jar library added to my project. Facebook sdk has already support library. So delete support library both from libs and from java build path If you are using a library already has support library in it.
in Android Studio 0.8.2
Press the green "+" in tab Dependencies of Project-Structure, then the keyboard key "1" (for libs) and choose the v4+ lib
If you have proguard enabled, try adding
# Local Broadcast Manager
-keep public class android.support.v4.content.LocalBroadcastManager
This fixed it for me.
You need to add the support library .jar file to the /libs directory in your IDE if it is Eclipse so that when the apk is made the Android packager will include that in your apk.
The problem seems to be related to the "properties" of the android-support-v4.jar library.
By default, the "Build Action" listed in the Advanced Properties in Visual Studio had a value of Content. I switched the value to AndroidJavaLibrary and the runtime error has disappeared.
However, the BroadcastReceiver isn't receiving the USB disconnect intent, hmm... Will update this answer accordingly.
Edit: I could never get a LocalBroadcastReceiver to work, so I had to use a regular one.
Just replace the android-support-v4.jar of your project that is in>libs folder with android-support-v4.jar present in FacebookSDK>libs folder