草庐IT

android - 在 Android/Intellij/Jenkins 中构建配置管理

coder 2023-11-26 原文

关闭。这个问题需要更多 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 和游戏内容也不同。

游戏发布了两个平台和几个商店(都有不同的授权机制):

安卓:

  • Google Play(2:免费+付费)
  • AndroidPit(2:免费+付费)
  • SlideMe(1:免费)
  • 三星商店(1:免费)

  • 黑莓操作系统 10
  • 黑莓世界(1:付费)

  • window
  • 我们使用这个版本在PC上进行开发和测试(1:付费)

  • 这给了我们 8 种不同 分发包。

    环境

    我们的生产工具链基于 gitTeamCity .不使用特殊工具(如 Maven、Gradle)。

    解决方案

    我们工作流程的终点是 TeamCity 项目页面,其中我们拥有对应于 8 个分发包的所有构建配置以及一些用于调试的额外构建(即带有额外检查和日志)。任何包都可以通过网络界面从任何地方一键构建。

    每个包裹都有一个 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_androidpitrelease300-paid_apps内容基本一致,但是,它添加了一些新功能(如许可库等)。和release300-blackberry是完全独立的,因为它必须针对具有不寻常屏幕宽高比 1:1 的设备并具有特殊设计的 UI。因此,这 5 个分支用于构建我们的 8 个发行包。

    我们从不将这些发布分支的更改合并回 master。错误修正以相同的方向传播。

    每个包都有自己的脚本文件,即为 Google Play 构建免费应用程序就像调用 Python 脚本 BuildAndroid.py 一样简单在分支 release300-master .

    同样的想法适用于所有其他包:仅使用单行 TeamCity 命令行构建运行程序。

    关于android - 在 Android/Intellij/Jenkins 中构建配置管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17783254/

    有关android - 在 Android/Intellij/Jenkins 中构建配置管理的更多相关文章

    1. ruby - i18n Assets 管理/翻译 UI - 2

      我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

    2. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

      我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

    3. Ruby Sinatra 配置用于生产和开发 - 2

      我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

    4. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

      我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

    5. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

      是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

    6. ruby - 在 Ruby 中构建长字符串的简洁方法 - 2

      在编写Ruby(客户端脚本)时,我看到了三种构建更长字符串的方法,包括行尾,所有这些对我来说“闻起来”有点难看。有没有更干净、更好的方法?变量递增。ifrender_quote?quote="NowthatthereistheTec-9,acrappyspraygunfromSouthMiami."quote+="ThisgunisadvertisedasthemostpopularguninAmericancrime.Doyoubelievethatshit?"quote+="Itactuallysaysthatinthelittlebookthatcomeswithit:themo

    7. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

      之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

    8. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

      我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

    9. jenkins部署1--jenkins+gitee持续集成 - 2

      前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

    10. 神州数码无线产品(AC+AP)配置 - 2

      注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

    随机推荐