gradle实现依赖关系的继承类不能在其他模块中使用

时间:2018-10-16 05:11:56

标签: android gradle android-gradle

在我的android项目中,我想包装一个第三方库,以便防止从应用程序模块直接访问第三方类。

在包装库中,我通过implementation添加了第三方库的依赖项。包装库的AppWorker扩展了第三方库的XWorker,但是当我在应用模块中调用AppWorker.doWork时,出现了编译错误:“无法访问XWorker”。

如果AppWorker不扩展XWorker而是创建一个XWorker成员以供使用,则不会有错误,但是这种方法仅在某些情况下有效,因为有时我们必须使用继承,例如,我需要自定义的BroadcastReceiver,它扩展了BroadcastReceiver的第三方库。

如果我在包装库的依赖项中使用api而不是implementation,也将没有错误。但这会在应用模块中使用包装库时打开对第三方类的访问。

所以,看来我不能继承来自实现依赖的类,然后在另一个模块中使用它。这是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
}

0 个答案:

没有答案