Если вы говорите, что некоторая часть проекта библиотеки зависит от класса, который будет иметь одну реализацию в одном проекте приложения и другую или, возможно, несуществующую реализацию в другом проекте приложения, то я подозреваю, что простой интерфейс поможет.
Объявите интерфейс в проекте библиотеки и измените все ссылки в этом проекте на ваш интерфейс.В проектах приложения предоставьте различные классы, которые реализуют этот интерфейс и изменяют свое поведение в зависимости от того, является ли он легким или полным.
Я не вижу, как будет проявляться зависимость от Activity, поскольку в большинстве случаев вы ссылаетесь на нее.действие это по ComponentName через строку.
В качестве небольшого примера представим, что мы хотим внедрить представление изображения рекламного баннера в группу представлений в нашем облегченном издании, но ничего не делать или, возможно, скрытьпросмотрите группу в нашем полном издании.
В проекте библиотеки объявите интерфейс для AdBannerProvider:
public interface AdBannerProvider
{
public void InjectAd(ViewGroup v);
}
В разделе Действия в проекте библиотеки, для которого может потребоваться объявление, в зависимости от того, горит или полный, ссылкаинтерфейс как в:
private void getAdBanner(AdBannerProvider pProvider, ViewGroup pAdView)
{
pProvider.InjectAd(pAdView);
}
Затем в версии Lite предоставьте реализацию AdBannerProvider, которая делает правильные вещи для этой редакции:
public class LiteAdBannerProviderImpl implements AdBannerProvider {
@Override
public void InjectAd(ViewGroup v) {
// do something useful for the lite edition, like add an imageview to the passed viewgroup
}
}
А в полной редакции другаякласс делает то, что нужно для этого издания:
public class FullAdBannerProviderImpl implements AdBannerProvider {
@Override
public void InjectAd(ViewGroup v) {
// do something useful for the full edition, like maybe set the viewgroup to GONE or INVISIBLE
}
}