Java Eclipse构建Android应用程序:如何在编译时创建两个版本?

Java Eclipse构建Android应用程序:如何在编译时创建两个版本?,java,android,eclipse,Java,Android,Eclipse,我正在编写一个Android应用程序,并希望基于相同的代码创建两个版本——一个免费版本和一个高级版本。我为这两个版本都提供了一个代码库,通过各种运行时检查来启用或禁用某些功能,例如 public class MyAppContext extends Application { public static final boolean isPremium = true; } // later, in another file.... if (!MyAppContext.isPremium)

我正在编写一个Android应用程序,并希望基于相同的代码创建两个版本——一个免费版本和一个高级版本。我为这两个版本都提供了一个代码库,通过各种运行时检查来启用或禁用某些功能,例如

public class MyAppContext extends Application
{
    public static final boolean isPremium = true;
}

// later, in another file....
if (!MyAppContext.isPremium) {
   CoolFeatures.setVisibility(View.GONE);
}
我正在使用最新的开发工具(EclipseIndigo和Google的ADT16)。现在,我在我的源文件中将isPremium设置为true,将应用程序导出到一个APK,然后将其设置为false,再将其导出到另一个APK,这是一个相当麻烦的过程。这既烦人又容易出错

有没有办法使这个过程自动化?就是

1) 创建两个不同的构建配置,以便在导出应用程序时生成两个APK文件

2) 让构建配置在编译时影响代码——例如,将静态布尔值设置为true或false


谢谢

将您的项目更改为库项目。然后创建两个应用程序(免费、高级)并导入库。然后,您可以继承
MyAppContext
对象,并根据需要更改
isPremium
成员,也可以使用附加的
setPremium()
函数


注意,在清单XML中,您必须为每个活动、服务等使用库项目的包名。

为什么不使用ant自动化构建呢。您可以使用相同的目标和不同的参数(例如,您将在java代码中读取的属性文件的路径)。当然,您需要确保这两个APK的名称不同,但这是大多数连续构建工具为不同环境使用的方法,基本上是相同的。

请查看。您还需要在APK中使用不同的包名称。我不熟悉ant脚本。。。这也可能吗?你的意思是,在这种情况下,我们希望在同一台设备上同时安装高级版和免费版?然而,这对我来说毫无意义——为什么两个应用程序都需要代码?图书馆项目理念和ant构建都是如此。我已经有一个使用图书馆项目方法的现有应用程序(免费/付费)(如我在回答中所述),我只是想知道ant脚本是否是另一个未来项目的替代解决方案。对我来说,不同的软件包名称是区分两个应用程序版本的一种干净的方式,特别是在我的设备上测试这两个应用程序版本时。我多次看到免费/付费功能的实现。然而,付费部分总是较小的-它只是持有一把钥匙来解锁免费应用程序的附加功能。我认为这样做的主要原因是,用户在两个不同的应用程序中获得两倍的相同功能,这需要两倍的存储空间。此外,两个应用程序的两个版本的同步也将非常困难。如果你的手机中安装了付费应用程序,那么你为什么需要免费应用程序呢?当然,在最终用户的手机上,应该只安装其中一个应用程序,尽管从免费迁移到付费应用程序时,两个应用程序可能都安装了一段时间。我不想使用“专业应用程序只是一个关键”的方法,因为那时用户总是要处理两个APK。例如,在工厂重置后,仅自动恢复付费应用程序(至少在我的手机上)。。。因此,在这种情况下,只恢复密钥,而不恢复包含该功能的APK!?不是很酷。至于同步应用程序,这并不太糟糕,因为所有的公共代码都在库项目中。