pipe理Androidapp store(Google / Amazon /等)的代码/构build?

我有一个主要从Android Market(现在,Google Play)下载的Android应用程序。 我们对源代码进行了一些调整,并提交给亚马逊应用程序商店,以了解它获得了什么样的牵引力。 我现在正在寻找一种可持续的方式,从一个共同的代码库开发,然后构build,以便我可以提交给/两者。

亚马逊的商店对可用的API有一些限制,因此我想有条件地删除/修改该版本的function。 由于Java不支持传统的条件编译,并且在Eclipse中有条件地包含文件似乎并不重要(甚至有可能吗?),我想问问别人正在做什么来解决这个问题。

无可否认,我不是Eclipse / Java专家,所以请随时上我学。

我在寻找解决scheme:

  • 使用Eclipse构build/debugging。
  • 静态代码文件,使用环境/设置切换来控制要构build的内容。
  • 代码中没有重复的代码或条件逻辑来在运行时select代码stream

这是你专门为Android应用程序或其他基于Java / Eclipse的项目解决的问题吗? 从哪里开始的build议?

Solutions Collecting From Web of "pipe理Androidapp store(Google / Amazon /等)的代码/构build?"

在最新版本的ADT(版本17)中做这件事很容易,但是我发现它使得编译时间更长一些:

  1. 创build一个新的Android项目( proj-A
  2. 转到Project-> Properties,selectAndroid,然后选中“Is Library”
  3. 把你所有的通用代码移到proj-A ,导入所有必要的库
  4. 为Google Play创build一个新的Android项目( proj-B
  5. 转到Project-> Properties,selectAndroid,然后将Proj-A添加到库中
  6. 重复亚马逊版本的#4和5

如果你有一些variables应该为每个子项目设置不同的值(例如布尔值GOOGLE_PLAY_VERSION来启用Google Play特定function),那么你必须创build另一个项目来包含这些值,因为你不能在项目中引用一个项目循环时尚。 您可以通过添加以下步骤来解决这个问题:

  1. 将所有的子项目特定的variables放到一个或多个只作为这些variables的容器的类中
  2. 创build一个“虚拟”Java项目( 虚拟
  3. configurationproj-A将一个新的Source链接添加到dummy的bin目录
  4. 在每个子项目中添加configuration类和项目特定的更改
  5. 利润!

请注意, dummy中的variables应该被设置为final,否则将会覆盖子项目的设置。

这可能看起来像是一些前期工作,但是对于我来说,版本控制起到了很好的作用。

编辑:现在,随着Google向Android Studio&Gradle的转移,如果您想要支持多个APK,请参阅Android开发站点的使用Gradle#构build您的项目#使用构build变体 。 在决定之前评估这个选项肯定没有什么坏处。

不幸的是,基于C / C ++中的内容 – 土地条件编译,在运行时改变stream程是Android中的一种惯例。

我们的应用程序必须为不同的API级别维护不同的行为,所以我们创build了一些应用程序级别的常量,这些常量是根据我们可用的API级别信息静态初始化的,并在整个代码中使用。 这是Google在其示例中执行操作的方式(例如,请参阅ActionBarCompat兼容性库,特别是此处使用的工厂方法)。

您可以创build一个接口CustomBuild,并在AmazonBuild和GooglePlayBuild中实现它,然后使用静态getBuild()方法根据需要切换function:

 if(getBuild().shouldEnableFeatureX()){ doStuff(); } else { doDifferentStuff(); } 

然后,所有你必须担心在工厂之间切换是一行或两个代码,并保持你想在哪个版本中启用哪些东西。 或者你可以为每个构build包含一个不同版本的静态类CustomBuild。

我将在上面再次提到别人的build议:改用像Maven这样的build筑; 一旦你build立起来,它应该让你的生活变得更容易。

我也想说,你应该把应用程序的核心作为上面build议的库,并有两个不同的模块(一个用于亚马逊,一个用于游戏商店)依赖于库,但每个只包含一个自定义工厂文件(或者只是一个包含相同的“我应该做这个事情吗?”方法的每种types的构build的静态类…一旦你有基础设施,它只是一个偏好问题)。

我还没有尝试过,但这是我想过的。

如何使用Eclipse的能力链接到您的工作区以外的目录中的文件?

从一个Eclipse项目开始:为了争辩,说它是Google Play版本。

现在构build第二个项目,首先要求Eclipse链接(不复制)来自第一个项目的源文件。

要开发第二个项目,添加从原始项目子类的类来实现您的修改。 对于资源,可以使用包含,属性覆盖和select器的一些组合。

在无法inheritance或扩展的地方,显然你只能复制原始的源文件,然后进行破解。 如果你确实是OCD的话,你可能只需要维护一个补丁集,而不是一整套冗余的文件。

你觉得呢,它会起作用吗?

您可以在Eclipse中手动创build两个项目,指向相同的源文件夹,但具有不同的包含/排除filter和不同的目标目录。

然后使用属性将两个Ant目标从javac文件集切换到排除的文件就足以生成相应的jar文件。

目标是为每个目标获得一个干净的应用程序,而不需要另一个代码。

通过在属性文件或XMLconfiguration中列出可插入行为的function,您的运行时将自行适应添加的菜单条目。