从库项目引用项目对象

时间:2011-05-25 14:28:53

标签: android shared-libraries

我有一个我已经建立的游戏将有2个版本。一个“精简”和一个“完整”。 为此,我将大部分代码放在库项目中。

事情是,在代码的一部分内,我必须启动一个Activity,其代码将在程序项目中而不是库中。 我发现它不会编译。

我要解决的问题是为库项目中的活动创建一个虚拟类,但这可能不是正确的方法。

2 个答案:

答案 0 :(得分:1)

应用程序项目应该依赖于库项目的组件/资源。如果需要从库启动活动/服务,那么可能使用正确的组件集发布意图可能有效。

Intent intent=new Intent();
intent.setComponent(new ComponentName("com.pkg", "com.pkg.class"));
startActivity(intent); 

答案 1 :(得分:1)

如果你说某个库项目的某些部分依赖于一个类在一个应用程序项目中有一个实现而另一个或者可能在另一个应用程序项目中不存在的实现,那么我怀疑一个简单的界面会有所帮助。 / p>

在库项目中声明一个接口,并将该项目中的所有引用更改为您的接口。在app项目中,提供实现该接口的不同类,并根据它是精简还是完整来改变它们的行为。

我无法看到对Activity的依赖性如何表现出来,因为在大多数情况下,你通过ComponentName引用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
    }
}