- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
关闭。这个问题需要更多 focused .它目前不接受答案。
想改进这个问题?更新问题,使其仅关注一个问题 editing this post .
2年前关闭。
Improve this question
这个问题可能是主观的,但我认为 Stackoverflow 仍然是最好的提问场所:
问题域是“高级 Android 编程”。我不需要有关如何设置单个 Android 项目、如何使用库项目或如何使用 ANT 构建普通项目的信息。
假设你有一个正在运行的应用程序,一个由 Jenkins/Ant/Proguard 构建的普通 Android 项目(选择的 IDE 是 IntelliJ,但这并不重要)。此构建的结果是您将放入 Play 商店的最终 APK。
现在想象一下,您需要这个应用程序作为免费和付费版本。到目前为止没问题,只需将所有共享代码放入一个库项目中,然后创建两个子项目,一个带有 App.java 启用许可证检查,另一个例如限制使用。
现在想象一下,你也想瞄准亚马逊,也许有一个新闻稿版本,等等。所以你的代码开始出现分歧,仍然有很多东西共享,但某些部分是特定于例如的。您瞄准的市场。
在 C# 中有“条件编译语句”,例如“IF PLAY_STORE ...”。 Java/Android有类似的东西吗?此外,它们是否与 ANT 和构建过程配合得很好。
但我不限于条件编译。 “每个市场一个项目”的方法是不同的。我只是想了解您如何以可持续的方式管理这些不同的“构建配置”。这意味着它适用于 15 个项目,针对 2 种口味(免费和付费)的 3 个市场。我希望你明白我在暗示什么。所有应用程序的代码都非常相似,但是在上面的示例中,我将拥有 90 个不同的 APK - 有了这些数字,“在源代码中手动注释仅在此构建中需要等”就不再适用了。
因此,任何提示、工具、搜索词、这些问题域的经验(例如 MAVEN,它会帮助我解决这些问题,还是生成 build.xml 的 ANT + 脚本会更好)。另一个例子,如果我有一个适用于所有目标市场的“真正的”Android 项目,那么我几乎可以做任何事情。但当然,不利的一面是,如果我在最低级别添加一个新页面(例如印记页面),我需要进入 90 Manifest.xml 来添加页面......
感谢您对此的任何帮助,
克里斯
PS:我会在底部添加一些我找到的关于这个主题的链接,如果有人在没有答案的情况下遇到这个问题,这可能是“第一次阅读这个”部分
http://www.asyncdev.net/2011/02/android-dev-prod-builds/
http://www.slf4j.org/
(在“放入JAR以提供IMPL”方式中相关)
(SLF4J 只是一种减少依赖关系并在部署期间提供配置的好方法 - 通过简单地添加不同的 JAR。使用这样的东西对于您自己的项目可能是矫枉过正,但这是一种方式。例如,用于许可证写入接口(interface)和一些类似 SLF4J 的代码,然后在构建期间在 Lib 文件夹中提供 PressRelease.jar 或 Productive.jar,从而更改应用程序的行为方式......)
最佳答案
这个问题在某种程度上是基于意见的,因为在一个复杂的项目中总是有不止 1 个合适的解决方案。
序言
我将尝试解释我用于部署的一些原则Linderdaum Puzzle HD .游戏有付费和免费版本,不仅代码不同,UI 和游戏内容也不同。
游戏发布了两个平台和几个商店(都有不同的授权机制):
安卓:
git
和
TeamCity
.不使用特殊工具(如 Maven、Gradle)。
git
分支名称(由一些包共享)所以
TeamCity
知道从哪里获取资源。目前我们有这个分支:
remotes/origin/master
remotes/origin/release300-blackberry
remotes/origin/release300-master
remotes/origin/release300-paid_apps
remotes/origin/release300-paid_apps_androidpit
release300
代表游戏的一个版本。我们有很多存档分支。这些不是开发或功能分支 - 它们仅用于保存特定游戏包的更改。 IE。在
paid_apps
还有更多游戏内容和
paid_apps_androidpit
包含 AndroidPit 许可库。
master
并在合并回master的功能分支中。然后发生合并过程。合并的方向是(并且只有这些方向):
master -> release300-master -> release300-paid_apps -> release300-paid_apps_androidpit
\
\-> release300-blackberry
release300-paid_apps_androidpit
与
release300-paid_apps
内容基本一致,但是,它添加了一些新功能(如许可库等)。和
release300-blackberry
是完全独立的,因为它必须针对具有不寻常屏幕宽高比 1:1 的设备并具有特殊设计的 UI。因此,这 5 个分支用于构建我们的 8 个发行包。
BuildAndroid.py
一样简单在分支
release300-master
.
关于android - 在 Android/Intellij/Jenkins 中构建配置管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17783254/
上篇文章“vSAN Data Protection Part 1:安装部署。”介绍了如何安装及部署 VMware Snapshot Service Appliance 设备,并在 vSAN ESA 集
我在我的 android 项目中使用 Realm。目前我在我的应用程序类中定义默认 Realm 配置如下- @Override public void onCreate(){ super.o
在问我的问题之前,让我先介绍一些背景信息: 我最近加入了一个新的软件开发小组,该小组使用 Rational 工具进行配置管理,包括源控制和变更管理系统。 除了这些工具之外,团队还有一个标准做法是将任何
我正在从事的一个项目涉及持续维护一个被克隆到嵌入式设备上的基本 Linux 磁盘镜像。 现在,每次进行更改时,我们都会在文件中记录所做的操作并保存磁盘镜像的副本。然而,作为一名软件工程师,这与传统做法
我目前正在寻找管理 app.config 文件的方法。我目前有多个版本的相同软件在不同的环境中运行,其中每个软件都使用特定版本的 app.config 文件。用户在更改配置时经常会出错,并且很难验证当
前言: 继上篇: Taurus .Net Core 微服务开源框架:Admin 插件【3】 - 指标统计管理 本篇继续介绍下一个内容: 1、系统配置节点:App -
前言: 继上篇: Taurus .Net Core 微服务开源框架:Admin 插件【4-1】 - 配置管理-Kestrel【含https启用】 本篇继续介绍下一个内容: 1、
前言: 继上篇: Taurus .Net Core 微服务开源框架:Admin 插件【4-2】 - 配置管理-Mvc【含请求日志打印】 本篇继续介绍下一个内容: 1、系统配置节
我是一名优秀的程序员,十分优秀!