Android: Без изключение на Class Def от модула за зависимости

Моят модул за приложение използва библиотечен модул в същия проект за различни класове. Няма показана грешка в 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)

person Chris    schedule 11.12.2015    source източник
comment
Публикувайте част от кода си, къде използвате класа Device?   -  person Jorgesys    schedule 11.12.2015
comment
Хей, публикувайте своя AndroidManifest.xml   -  person Jorgesys    schedule 11.12.2015
comment
Публикацията на @Elenasys е актуализирана.   -  person Chris    schedule 11.12.2015


Отговори (1)


Проблемът беше решен чрез добавяне на:

Bundle data = msg.getData();
data.setClassLoader(IDevice.class.getClassLoader());
person Chris    schedule 11.12.2015