Моят модул за приложение използва библиотечен модул в същия проект за различни класове. Няма показана грешка в Android Studio и когато компилирам, нямам никакви грешки. Но когато се опита да получи достъп до един от моите класове от библиотеката, той хвърля изключение NoClassDef. Някой знае ли какво правя погрешно? Изходът от Logcat е по-долу.
Манифест за услуга (използвам персонализиран SDK):
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.linear.deviceservice"
android:versionCode="1"
android:versionName="1.0"
android:sharedUserId="android.uid.system" >
<uses-sdk
android:minSdkVersion="19"
android:targetSdkVersion="19"
tools:ignore="OldTargetApi" />
<uses-permission android:name="android.permission.SERIAL_PORT"/>
<application
android:allowBackup="true">
<service
android:name="LinearService"
android:exported="true"
android:permission="com.project.permission.DEVICE_SERVICE">
<intent-filter>
<action android:name="com.project.deviceservice.BIND"/>
</intent-filter>
</service>
</application>
</manifest>
В основното ми приложение:
List<PeripheralDevice> devices =
mConfigurationManager.getConfiguration().getPeripheralDevices();
/* Send the update message with list of appropriate uris to each service. */
ArrayList<Uri> uris;
/* For each service, get the list of uris for that service. */
for (String scheme : mServices.keySet()) {
uris = new ArrayList<Uri>();
for (PeripheralDevice device : devices) {
if (scheme.equals(device.getUri().getScheme())) {
uris.add(device.getUri());
}
}
/* Send the update message here. */
updateDevices(mServices.get(scheme), uris);
}
В моята услуга:
protected List<IDevice> mDevices = new ArrayList<IDevice>();
...
{
mDevices = msg.getData().getParcelableArrayList(Messages.DEVICES_KEY);
}
Logcat
12-11 12:24:45.717 2391-2406/com.linear.service E/Parcel: Class not found when unmarshalling: com.project.deviceservice.Device
java.lang.ClassNotFoundException: com.project.deviceservice.Device
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:251)
at java.lang.Class.forName(Class.java:216)
at android.os.Parcel.readParcelableCreator(Parcel.java:2133)
at android.os.Parcel.readParcelable(Parcel.java:2097)
at android.os.Parcel.readValue(Parcel.java:2013)
at android.os.Parcel.readListInternal(Parcel.java:2343)
at android.os.Parcel.readArrayList(Parcel.java:1703)
at android.os.Parcel.readValue(Parcel.java:2034)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
at android.os.Bundle.unparcel(Bundle.java:249)
at android.os.Bundle.getParcelableArrayList(Bundle.java:1250)
at com.project.deviceservice.DeviceService$1.handleMessage(DeviceService.java:50)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:136)
at android.os.HandlerThread.run(HandlerThread.java:61)
Caused by: java.lang.NoClassDefFoundError: com/project/deviceservice/Device
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:251)
at java.lang.Class.forName(Class.java:216)
at android.os.Parcel.readParcelableCreator(Parcel.java:2133)
at android.os.Parcel.readParcelable(Parcel.java:2097)
at android.os.Parcel.readValue(Parcel.java:2013)
at android.os.Parcel.readListInternal(Parcel.java:2343)
at android.os.Parcel.readArrayList(Parcel.java:1703)
at android.os.Parcel.readValue(Parcel.java:2034)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
at android.os.Bundle.unparcel(Bundle.java:249)
at android.os.Bundle.getParcelableArrayList(Bundle.java:1250)
at com.project.deviceservice.DeviceService$1.handleMessage(DeviceService.java:50)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:136)
at android.os.HandlerThread.run(HandlerThread.java:61)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.project.deviceservice.Device" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:251)
at java.lang.Class.forName(Class.java:216)
at android.os.Parcel.readParcelableCreator(Parcel.java:2133)
at android.os.Parcel.readParcelable(Parcel.java:2097)
at android.os.Parcel.readValue(Parcel.java:2013)
at android.os.Parcel.readListInternal(Parcel.java:2343)
at android.os.Parcel.readArrayList(Parcel.java:1703)
at android.os.Parcel.readValue(Parcel.java:2034)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
at android.os.Bundle.unparcel(Bundle.java:249)
at android.os.Bundle.getParcelableArrayList(Bundle.java:1250)
at com.project.deviceservice.DeviceService$1.handleMessage(DeviceService.java:50)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:136)
at android.os.HandlerThread.run(HandlerThread.java:61)
12-11 12:24:45.727 2391-2406/com.linear.service W/dalvikvm: threadid=11: thread exiting with uncaught exception (group=0x41c21ba8)
12-11 12:24:45.727 2391-2406/com.linear.service E/AndroidRuntime: FATAL EXCEPTION: LinearService Messenger
Process: com.linear.service, PID: 2391
android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.project.deviceservice.Device
at android.os.Parcel.readParcelableCreator(Parcel.java:2147)
at android.os.Parcel.readParcelable(Parcel.java:2097)
at android.os.Parcel.readValue(Parcel.java:2013)
at android.os.Parcel.readListInternal(Parcel.java:2343)
at android.os.Parcel.readArrayList(Parcel.java:1703)
at android.os.Parcel.readValue(Parcel.java:2034)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
at android.os.Bundle.unparcel(Bundle.java:249)
at android.os.Bundle.getParcelableArrayList(Bundle.java:1250)
at com.project.deviceservice.DeviceService$1.handleMessage(DeviceService.java:50)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:136)
at android.os.HandlerThread.run(HandlerThread.java:61)