我有一个游戏,我已经建成,将有2个版本。一个“精简版”和一个“完整版”。为了这个目的,我把大部分代码放在一个库项目中。从库项目引用项目对象
问题是,在部分代码中,我必须启动一个Activity,其代码将在程序项目中,而不是库中的代码。 我发现它不会编译。
我做了什么来解决它是为库项目内的活动创建一个虚拟类,但它可能不是正确的方法。
我有一个游戏,我已经建成,将有2个版本。一个“精简版”和一个“完整版”。为了这个目的,我把大部分代码放在一个库项目中。从库项目引用项目对象
问题是,在部分代码中,我必须启动一个Activity,其代码将在程序项目中,而不是库中的代码。 我发现它不会编译。
我做了什么来解决它是为库项目内的活动创建一个虚拟类,但它可能不是正确的方法。
如果youre说,库项目的某些部分是依赖于一个类,将有一个应用项目,是一种实现,另一个或可能不存在的执行在其他应用程序的项目,然后我怀疑一个简单的界面有助于。
在库项目中声明接口并将该项目中的所有引用更改为接口。在应用程序项目中,提供实现该界面的不同类,并根据其是精简还是完整来改变其行为。
我不明白活动上的依赖关系如何表现出来,因为在大多数情况下,您都是通过字符串引用ComponentName的活动。
作为一个小例子,假装我们希望能够在我们的lite版本中将广告横幅图像视图注入到视图组中,但什么也不做,或者可能隐藏完整版中的视图组。
在库项目申报的接口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
}
}
应用程序项目应该依赖于库项目的组件/资源。如果需要从库中启动一个活动/服务,那么可能会使用正确的组件集发布意向。
Intent intent=new Intent();
intent.setComponent(new ComponentName("com.pkg", "com.pkg.class"));
startActivity(intent);