Внешний сервис Android из библиотеки (AAR, а не общий сервис)

Я пытаюсь создать библиотеку Android, содержащую простой сервис. Например:

public class BasicService extends Service {
    public BasicService() {
        Log.d("I", "work");
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

Я запускаю сервис следующим образом:

startService(new Intent(this, BasicService.class));

Служба компилируется в файл AAR, и после добавления этого в приложение я получаю исключение ClassNotFoundException.

 Caused by: java.lang.ClassNotFoundException: Didn't find class "nl.company.example.library.Services.BasicService" on path: DexPathList[[zip file "/data/app/nl.example.aartest-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]

Мне не нужно связывать сервис, так как приложение не должно связываться с сервисом. Мне также не нужен вспомогательный интерфейс, так как я не хочу делиться сервисом с другими приложениями. Я знаю, что мне нужно объявить службу на стороне приложения (не библиотеки), поэтому я сделал это следующим образом:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="nl.company.example.exampleApp"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="17"
    android:targetSdkVersion="19" />

<application
    android:settings... >
    <service
        android:name="nl.company.example.library.Services.BasicService"
        android:enabled="true"
        android:exported="true" />
</application>

</manifest>

Это манифест моей библиотеки:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="nl.company.example.library" >
    <application/>
</manifest>

Я провел некоторые исследования в Stackru/Google и не смог найти ответ на свою проблему.

Android сервис в библиотеке

Также пробовал разные способы запуска сервиса (в действии и т. Д.), Но пока ничего хорошего.

Любая помощь приветствуется и мои извинения, если я сделал злой дубликат вопрос.

1 ответ

Решение

BaseService реализовывал интерфейс из другой библиотеки, которая не была упакована с aar файл. Это вызвало сбой приложения сразу после запуска на устройстве, поскольку оно не могло разрешить зависимость.

public class BaseService implements OtherLibraryInterface {
    ...
}

Вместо того, чтобы бросать ClassNotFoundException для OtherLibraryInterfaceAndroid будет выбрасывать именно это исключение для BaseService, Что очень сбивает с толку и заставляет нас думать, что с Сервисом что-то не так.

Явное добавление зависимости OtherLibrary в качестве зависимости от основного приложения решило эту проблему.

Другие вопросы по тегам