Унаследованный класс зависимости реализации gradle не может использоваться в другом модуле - PullRequest
0 голосов
/ 16 октября 2018

В моем проекте Android я хочу обернуть стороннюю библиотеку, чтобы я мог запретить прямой доступ к сторонним классам из модуля приложения.

В библиотеке оберток я добавил зависимость сторонней библиотекина implementation.AppWorker библиотеки переносов расширяют XWorker сторонних библиотек, но когда я вызываю AppWorker.doWork в модуле приложения, возникает ошибка компиляции: «не удается получить доступ к XWorker».

Если AppWorker не расширяетсяXWorker, но создайте XWorker член для использования, ошибки не будет, но этот подход работает только в некоторых ситуациях, потому что иногда мы должны использовать наследование, например, мне нужен настроенный BroadcastReceiver, который расширяет BroadcastReceiverсторонней библиотеки.

Если я использую api вместо implementation в зависимостях библиотеки обтекания, ошибки также не будет.Но это откроет доступ к сторонним классам при использовании библиотеки wrap в модуле приложения.

Так что, похоже, я не могу унаследовать класс, который зависит от реализации, и затем использовать его в другом модуле.Это ошибка Gralde?Если нет, то почему?

Ниже приведен пример кода из трех модулей:

третьей стороны

public class XWorker {
    public void doWorkX() {
    }
}

wraplibrary

dependencies {
    implementation project(":thirdparty")
}

public class AppWorker extends XWorker {
    public void doWork() {
        // do some preparatory work
        super.doWorkX();
    }
}

приложение

dependencies {
    implementation project(":wraplibrary")
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    AppWorker worker = new AppWorker();
    worker.doWork();    // compile error: cannot access XWorker
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...