如果你说库项目的某些部分依赖于一个类,该类在一个应用程序项目中有一个实现,在另一个应用项目中可能有另一个实现或不存在,那么我怀疑一个简单的接口会有所帮助。
在库项目中声明一个接口,并更改该项目中对接口的所有引用。在应用程序项目中,提供实现该接口的不同类,并根据接口是精简还是完整来改变它们的行为。
我看不出对活动的依赖是如何表现出来的,因为在大多数情况下,你都是通过字符串通过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
}
}