首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >管理Android应用商店(Google/Amazon/等)的代码/构建?

管理Android应用商店(Google/Amazon/等)的代码/构建?
EN

Stack Overflow用户
提问于 2012-03-22 08:56:25
回答 4查看 2.5K关注 0票数 18

我有一个Android应用程序,主要是从Android Market (现在是Google Play)下载的。我们对源代码做了一些调整,并提交到亚马逊应用商店,看看它得到了什么样的吸引力。我现在正在寻找一种可持续的方式,从一个通用的代码库进行开发,然后构建,这样我就可以提交给任何一个/两者。

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

诚然,我不是Eclipse/Java专家,所以请随时教我。

我在解决方案中寻找的是:

使用Eclipse的

  • Building/debugging。
  • 静态代码文件,使用环境/设置切换来控制要构建的内容。
  • 在代码中没有重复的代码或条件逻辑,以便在运行时选择代码流

这是你专门为Android应用程序解决的,还是为其他基于Java/Eclipse的项目解决的?关于从哪里开始的建议?

EN

回答 4

Stack Overflow用户

发布于 2012-04-02 14:02:27

在最新版本的ADT (版本17)中很容易做到这一点,尽管我确实发现它使编译变得有点长:

  1. 创建一个新的安卓项目( Proj-A )
  2. 转到项目->属性,选择安卓,选中"Is Library“
  3. 将所有常用代码移到proj-A,导入所有必要的内容并为Google Play (Proj-B)
  4. 创建一个新的安卓项目。转到项目->属性,选择安卓,然后将Proj-A添加到亚马逊版本

的Library

  1. Repeat #4&5中<代码>G213

如果你有一些变量应该为每个子项目设置不同的值(例如,启用Google Play特定功能的布尔GOOGLE_PLAY_VERSION ),你必须创建另一个项目来包含这些值,因为你不能让项目以循环的方式相互引用。您可以通过添加以下步骤来解决此问题:

Java A将所有子项目特定的变量放入一个或多个类中,这些类只是充当这些项目的容器。要将新的源代码链接添加到虚拟changes

  • Profits!

的目录中,请使用项目特定的

  1. 在每个子项目中添加配置类

请注意,dummy中的变量应该not设置为final,否则它将覆盖子项目的设置。

这可能看起来像是相当多的前期工作,但就版本控制而言,它对我来说工作得很好。

编辑:现在随着谷歌转移到Android Studio和Gradle,如果你想开始一个新项目,如果你想支持多个Building Your Project with Gradle#Work with build variants,那可能会更好,参见Android开发网站的APK。在做出决定之前,评估一下这个选项绝对不会有坏处。

票数 10
EN

Stack Overflow用户

发布于 2012-04-03 02:18:36

不幸的是,在Android中,根据C/C++中的条件编译在运行时更改流程是一种约定。

我们的应用程序必须为不同的API级别维护不同的行为,所以我们创建了一些应用程序级别的常量,这些常量是基于我们可用的API级别信息静态初始化的,并在整个代码中使用。这就是谷歌在他们的示例中做事情的方式(例如,请参阅ActionBarCompat兼容性库,特别是使用here的工厂方法)。

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

代码语言:javascript
复制
if(getBuild().shouldEnableFeatureX()){
    doStuff();
} else {
    doDifferentStuff();
}

然后,在构建之间切换时,您所要担心的就是工厂中的一行或两行代码,以及维护您希望在哪些版本中启用哪些内容。或者,您可以为每个构建包含不同版本的静态类CustomBuild。

我将采纳上面其他人的建议:切换到像Maven这样的东西来构建;一旦你建立了它,它应该会让你的生活变得更容易。

我还想说的是,你应该像上面建议的那样将应用程序的核心做成一个库,并有两个不同的模块(一个用于amazon,一个用于play store),它们依赖于这个库,但每个模块都只包含一个自定义工厂文件(或者只包含一个静态类,用于每种类型的构建,其中包含相同的“我应该做这件事吗?”方法...一旦你有了基础设施,这只是一个偏好的问题)。

票数 1
EN

Stack Overflow用户

发布于 2012-03-27 03:46:49

我还没有真正尝试过,但我已经考虑过了。

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

从一个Eclipse项目开始:为了便于讨论,假设它是Google Play版本。

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

要开发第二个项目,请从原始项目中添加子类,以实现您的修改。对于资源,您可以使用包含、属性覆盖和选择器的某种组合。

这是不可能的子类化或扩展,那么很明显,您将不得不只复制原始的源文件,并对其进行修改。如果您真的对此有兴趣,那么您可能只需要维护一个补丁集,而不是整个冗余的文件集。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9815038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档