Не удается загрузить класс из файла .aar, когда я добавил библиотеку постоянства комнаты в свою библиотеку - PullRequest
0 голосов
/ 21 февраля 2019

В настоящее время я занимаюсь разработкой библиотеки тревог, которая должна хранить несколько деталей тревоги в базе данных sqlite.Поэтому я использовал библиотеку Google Persistence с моей библиотекой будильников.

Я добавил код ниже для build.gradle.

implementation 'android.arch.persistence.room:runtime:1.1.1'
annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'

Я добавил класс базы данных

@Database(entities = AlarmDetails.class, version = 1)
public abstract class AlarmDatabase extends RoomDatabase {

  public abstract AlarmDao alarmDao();
}

Я также добавил объект доступа к данным

@Dao
public interface AlarmDao {

  @Insert(onConflict = OnConflictStrategy.REPLACE)
  void insert(AlarmDetails alarmDetails);

  @Update
  void update(AlarmDetails alarmDetails);

  @Delete
  void delete(AlarmDetails alarmDetails);

  @Query("SELECT * FROM alarms")
  List<AlarmDetails> getAll();
}

Я создаю экземпляр базы данных в главном классемоя библиотека как показано ниже

/*Constructor*/
public AlarmBase(Context mcontext,Context ncontext) {
    this.mContext = mcontext;

    alarmDatabase= Room.databaseBuilder(ncontext,
            AlarmDatabase.class, "alarm_db")
            .build();
}

я вызываю вышеуказанный конструктор из моего демонстрационного проекта и передаю контекст приложения, как показано ниже

Context applicationContext=MyApplicationClass.getContext();
    alarmBase = new AlarmBase(this,applicationContext);

И это мой класс приложения

public class MyApplicationClass extends MultiDexApplication {
  private static MultiDexApplication instance;

  @Override
  public void onCreate() {
    super.onCreate();
    instance = this;
  }

  public static Context getContext() {
    return instance.getApplicationContext();
  }
}

Но когда я запускаю проект, я получаю следующую ошибку

    --------- beginning of crash
02-21 20:23:34.643 11930-11930/com.mid.alarmdemo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mid.alarmdemo, PID: 11930
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/mid/alarmlib/roomsqlite/AlarmDatabase;
    at com.mid.alarmlib.AlarmBase.<init>(AlarmBase.java:39)
    at com.mid.alarmdemo.MainActivity.onCreate(MainActivity.java:54)
    at android.app.Activity.performCreate(Activity.java:6362)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2441)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2548)
    at android.app.ActivityThread.access$1100(ActivityThread.java:154)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1399)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:157)
    at android.app.ActivityThread.main(ActivityThread.java:5613)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:774)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mid.alarmlib.roomsqlite.AlarmDatabase" on path: DexPathList[[zip file "/data/app/com.mid.alarmdemo-1/base.apk"],nativeLibraryDirectories=[/data/app/com.mid.alarmdemo-1/lib/arm64, /vendor/lib64, /system/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
    at com.mid.alarmlib.AlarmBase.<init>(AlarmBase.java:39) 
    at com.mid.alarmdemo.MainActivity.onCreate(MainActivity.java:54) 
    at android.app.Activity.performCreate(Activity.java:6362) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2441) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2548) 
    at android.app.ActivityThread.access$1100(ActivityThread.java:154) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1399) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:157) 
    at android.app.ActivityThread.main(ActivityThread.java:5613) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:774) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652) 
    Suppressed: java.lang.NoClassDefFoundError: com.mid.alarmlib.roomsqlite.AlarmDatabase
    at dalvik.system.DexFile.defineClassNative(Native Method)
    at dalvik.system.DexFile.defineClass(DexFile.java:226)
    at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:219)
    at dalvik.system.DexPathList.findClass(DexPathList.java:338)
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
            ... 16 more
    Suppressed: java.lang.ClassNotFoundException: com.mid.alarmlib.roomsqlite.AlarmDatabase
    at java.lang.Class.classForName(Native Method)
    at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
    at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
            ... 15 more
 Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

Я смог запустить проект вместе со своей библиотекой, пока не добавил постоянство Room в свою библиотеку

1 Ответ

0 голосов
/ 27 февраля 2019

Я только что добавил следующие строки в build.gradle (приложение модуля) проекта,

implementation 'android.arch.persistence.room:runtime:1.1.1'
annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'

, и все заработало

...