关闭。这个问题需要更多 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/
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我安装了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
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
在编写Ruby(客户端脚本)时,我看到了三种构建更长字符串的方法,包括行尾,所有这些对我来说“闻起来”有点难看。有没有更干净、更好的方法?变量递增。ifrender_quote?quote="NowthatthereistheTec-9,acrappyspraygunfromSouthMiami."quote+="ThisgunisadvertisedasthemostpopularguninAmericancrime.Doyoubelievethatshit?"quote+="Itactuallysaysthatinthelittlebookthatcomeswithit:themo
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
我从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
前置步骤我们都操作完了,这篇开始介绍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
注意:本文主要掌握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配