如何在市场上发布应用程序的两个版本?

2024-01-27

我想将我的应用程序的两个版本添加到 Android 市场,一种只需几美分,另一种是带有广告的免费版本。这是一种非常常见的做法。

我目前正在将 AdMod 构建到我的应用程序中,看来我必须更改相当多的文件,因此最好为此制作一个单独的应用程序版本。

你如何实现这一目标?分店?不同的存储库?有没有人找到一种方法以合理的方式将两个应用程序保存在同一个存储库中?

标题没有拼写错误,我的意思是“实现”,即人们如何管理这两个版本,而不是他们如何将它们添加到市场。


这种事情完全是一场噩梦——不幸的是 Android 构建系统并没有真正以任何好的方式支持它。

我们通过将应用程序 99% 的代码放在库项目中来实现这一点。然后,我们为应用程序的每个不同版本创建一个应用程序项目,每个版本都使用该库。

当我们需要不同版本的应用程序有不同的行为时,我们目前通过在运行时查询不同的资源来实现这一点。然而,我们正在转向通过 RoboGuice 使用依赖注入。

其中有些元素工作得相当好,而另一些则不然。例如,有必要复制 AndroidManifest.xml 文件,这可能容易出错(例如,很容易将新活动添加到一个清单中,而忘记在其他清单中执行此操作)。不幸的是,这是一团糟,但这是我们找到的最不糟糕的解决方案。

就我个人而言,我强烈建议不要使用分支来实现这种效果。它们最初可以很好地工作,但很快就会成为维护的噩梦。

使用库的另一个好处是我们发现它使测试变得更加容易。有关如何设置的示例,请参阅:

http://www.paulbutcher.com/2010/09/android-library-project-with-tests-step-by-step/ http://www.paulbutcher.com/2010/09/android-library-project-with-tests-step-by-step/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在市场上发布应用程序的两个版本? 的相关文章

随机推荐

  • 返回带有字段名称而不是别名的 pydantic 模型作为 fastapi 响应

    我试图用定义的字段名称而不是别名返回我的模型 class FooModel BaseModel foo str Field alias bar app get gt FooModel return FooModel bar baz 响应将是
  • jsTree 拖放按类限制文件夹

    如何通过类名 class locked 锁定文件夹上的拖动功能 同时锁定其他要拖到该文件夹 中的文件夹class locked 我想要一个既具有拖放功能又具有上下文菜单的设置 如果节点的类名 锁定 我只想禁用上下文菜单的编辑以及拖入此文件夹
  • 使用 python 有效提取 1-5 克

    我有一个 3 000 000 行的巨大文件 每行有 20 40 个单词 我必须从语料库中提取 1 到 5 个 ngram 我的输入文件是标记化的纯文本 例如 This is a foo bar sentence There is a com
  • 用于从 Google Sheets URL 中提取电子表格 ID 和工作表 ID 的 JavaScript 正则表达式

    我想要 Javascript 正则表达式从 google 表格 URL 中提取电子表格 ID 和工作表 ID Sheets google com 电子表格的 URL 如下所示 https docs google com spreadshee
  • 删除 d3js 不工作的事件侦听器

    我有一个 SVG 结构 里面有一些形状 我想在单击形状时触发一个事件 在 SVG 上单击时触发另一个事件 问题是 SVG 事件总是被触发 为了防止这种情况 我禁用了形状的事件冒泡 我还尝试使用 d3 禁用该事件 但似乎不起作用 还尝试使用本
  • 朱莉娅 git 错误

    几个月前我在使用 Julia 最近我想再次使用它 我想要一个新版本 所以我删除了以前的版本和我拥有的所有软件包 现在 安装新版本后 0 6 2 我无法使用任何 Pkg 命令 使用后会出现以下错误init add or update 错误 G
  • 通过 pod 访问 kubernetes python api

    所以我需要通过 pod 连接到 python kubernetes 客户端 我一直在尝试使用config load incluster config 基本上遵循以下示例here https github com kubernetes cli
  • Spearman 与底座 R 的尺距距离

    给定两个排列 v1 1 4 3 1 5 2 v2 1 2 3 4 5 1 如何计算以 R 为基数的 Spearman 尺尺距离 所有元素的总位移 可灵活用于任意两种尺寸排列n 例如 对于这两个向量 如下 1被感动了2地点来自v1 to v2
  • 如何为多个开发人员使用 git

    对于经验丰富的 Git 用户来说 这是一个非常简单的问题 我已经在 git 托管上创建了存储库并设置了我的电脑 git init git remote add origin git sourcerepo com git 然后 经过一些更改后
  • 爪哇。 GUI WindowBuilder 通过单击按钮从 JTextField 读取

    I m useing WindowBuilder and I want to ask how to search in a text file for specific word which I enter to JTextField by
  • 如何在 Python 中使用 Selenium 获取
    1. 元素的长度?

    我有一个 ol 在我的 HTML 中列出 如下所示 ol li class foo li li class foo li li class foo li li class foo li ol 我需要做的是验证 ol 列表包含 li 内的项目
  • ReaderWriterLockSlim 和 async\await

    我有一些问题ReaderWriterLockSlim 我无法理解它是如何发挥作用的 My code private async Task LoadIndex if File Exists FileName index txt return
  • 在 vi 中删除连续的重复行而不排序

    这个问题 https stackoverflow com questions 351161 removing duplicate rows in vi已经解决了如何删除重复行 但强制首先对列表进行排序 我想执行删除连续重复行步骤 即uniq
  • 带数组的 SwitchMap 运算符

    我正在尝试学习 rxjs 和 Observable 的一般概念 并且有一个场景 我有一类
  • 如何防止引用的包含搜索当前源文件的目录?

    海湾合作委员会提供 I 选项 其中 I之前的目录 I 搜索引用的包含 include foo h and I以下目录 I 搜索括号内的包含 include
  • 在verilog中将wire值转换为整数

    我想将电线中的数据转换为整数 例如 wire 2 0 w 3 b101 我想要一个将其转换为 5 并将其存储在整数中的方法 我怎样才能以比这更好的方式做到这一点 j 1 for i 0 i lt 2 i i 1 begin a a w i
  • 如何通过 Google Drive API 使用刷新令牌生成访问令牌?

    我已完成授权步骤并获得访问令牌和刷新令牌 接下来我应该做什么来使用我通过 google Drive API 存储的刷新令牌生成访问令牌 由于我在 Force com 上工作 因此我无法使用任何 sdk 因此请建议直接通过 API 实现它的方
  • 经典 asp - 仅接收肥皂响应的一部分

    我试图从经典 asp 调用肥皂请求 它将在稍后更新 但现在它仍然是经典 asp 但我只得到一半的响应 当我在 SoapUI 中使用请求字符串时 我得到了我正在寻找的响应 但在 asp 中我只收到了部分响应 ASP 请求 Set oXmlHT
  • scala:重写构造函数的隐式参数

    我有一个类 它采用隐式参数 该参数由类内部方法调用的函数使用 我希望能够覆盖该隐式参数 或者从其源复制隐式参数 举个例子 def someMethod implicit p List Int uses p class A implicit
  • 如何在市场上发布应用程序的两个版本?

    我想将我的应用程序的两个版本添加到 Android 市场 一种只需几美分 另一种是带有广告的免费版本 这是一种非常常见的做法 我目前正在将 AdMod 构建到我的应用程序中 看来我必须更改相当多的文件 因此最好为此制作一个单独的应用程序版本