В моем проекте 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
}