如何为多个 Android 商店支持我的 Android 应用程序?

2024-05-07

我最近开始在 Google Android Market 上销售我的 Android 应用程序,并实施他们的应用程序许可方案以防止未经授权使用我的应用程序。我现在正计划将其发布到 Amazon Android 应用商店,并且想知道维护我的应用程序的两个版本的最佳方法:一个实现 Android 许可,另一个不实现。

虽然我当前的解决方案有效,但它并不是最佳的,我正在尝试找出其他人处理此问题的方法。现在,我已经为我的应用程序实现了两个启动屏幕:SplashGoogle.java 和 SplashAmazon.java。我有两个相应的清单文件:GoogleManifest.xml 和 AmazonManifest.xml。每个清单都将不同的启动定义为启动器意图。

当我想要发布应用程序的某个版本时,我将其中一个清单文件重命名为 AndroidManifest.xml,导出应用程序,然后对另一个清单文件执行相同的操作。这是我的解决方案,因为这是我能想到的最好的解决方案,并且不知道还有其他方法可以做到这一点。它之所以有效,是因为我的应用程序的亚马逊和谷歌市场版本之间的唯一区别是相应的启动类,一个检查许可,另一个不检查许可。

今后,我可能想要实施其他更改(或合并为只有一个启动屏幕),并且正在寻找一种更持久的方法来管理同一应用程序中的细微更改。

我想,当开发人员创建付费应用程序的精简版、免费版或广告支持版本时,也会出现类似的问题。

补充笔记:

  1. 对于使用Google Android Licensing的版本,我在AndroidManifet.xml文件中请求CHECK_LICENSE权限,而在Amazon版本中,这不是必需的。

I am not sure if this should be considered a community wiki, but if so, please mark it as such as opposed to closing the question. I believe this would be useful to a lot of developers out there.


我首先将现有的代码库重构为 Android 库项目。这很容易做到。请务必阅读本文。 http://developer.android.com/guide/developing/projects/projects-eclipse.html文档非常稀疏,但我能够让它工作。请务必严格遵循“在清单文件中声明库组件”部分。

因此,要重构为库,您基本上将现有项目标记为库项目。您只需在项目设置中勾选一个框(请参阅链接)。

现在转到库,我们想要将包名称更改为不同的名称。例如,如果您发布的版本包是 com.mywebsite.myappname.android_market 那么我会将其重命名为 com.mywebsite.myappname.common_code

您可以右键单击项目并选择Android Tools->Rename application package。这一半对我有用。我还必须手动将代码中的所有引用重命名为我的 R 类。您可以使用全局搜索替换将 com.mywebsite.myappname.android_market.R 重命名为 com.mywebsite.myappname.common_code.R

现在您的图书馆已准备就绪

现在是时候制作您将构建的实际项目了。

创建一个新的 android 项目,并使用 android market 的包名称进行命名,例如 com.mywebsite.myappname.android_market。按照链接上的说明将新的公共库添加为该包使用的库。

Android 库项目的一个限制是库的清单不会合并到顶级项目的清单中。您需要手动将其粘贴到那里。另外(请参阅链接)您需要确保清单中的所有内容都使用完全限定的包名称。因此,如果您曾经使用诸如 android:name=".SplashScreenActivity" 之类的活动名称,请将其更改为 android:name="com.mywebsite.myappname.common_code.SplashScreenActivity"

因此,您再次需要手动合并所有内容,包括权限、意图、活动等。

现在只要构建顶级项目就可以了。 为您想要构建的每个变体制作一个包装器。

您还可以让这些新的顶级项目实现不同版本之间不同的任何内容。因此,您的 Android Market 包装器可以实现一个启动屏幕,而您的 Amazon 版本则可以实现一个不同的启动屏幕。或者,您可以在公共项目中使用枚举来驱动它,并将两个启动屏幕保留在那里。

另一个不错的功能是,顶级项目中的资源将覆盖库中的资源(如果提供)。因此,如果您想在您的启动画面上拥有一个亚马逊版本徽标和一个根据版本而变化的 Android 市场徽标,只需使用与公共资源相同的图像名称,并在两个版本中放置不同的副本即可。

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

如何为多个 Android 商店支持我的 Android 应用程序? 的相关文章

  • Android 通知进度条冻结

    这是我正在使用的代码 http pastebin com 3bMCKURu http pastebin com 3bMCKURu 问题是 一段时间后 文件变得更重 通知栏下拉速度变慢 最后它就冻结了 你的通知太频繁了 这就是它冻结的原因 让
  • 从 Throwable 获取错误代码 - Android

    我怎样才能从错误代码可投掷 https developer android com reference java lang Throwable html public void onFailure Throwable exception 我
  • 导航组件重复 NavArgs 的问题

    我有一个片段 class SomeFragment private val args by navArgs
  • 与 Admob 广告单元 ID 混淆

    我跟着tutorial https developers google com admob android quick start在我的应用程序中创建广告横幅 到目前为止 这有效 我可以看到测试广告 但是 本教程指示我在两个不同的位置使用两
  • Android:“dp”到“px”转换?

    我正在读这篇文章 http developer android com guide practices screens support html http developer android com guide practices scre
  • 设置从 Facebook 登录获取用户电子邮件 ID 的权限

    我在用着Facebook 3 0 SDK对于安卓 我必须实施Facebook登录 我正在访问用户的基本信息 例如姓名 用户 ID 但我也想访问用户的电子邮件 我浏览了很多博客和论坛 但不知道该怎么做 我正在使用我自己的 android 按钮
  • 如果我们使用后退按钮退出,为什么 Android 应用程序会重新启动?

    按住主页按钮并返回应用程序时 应用程序不会重新启动 为什么使用后退按钮会重新启动 如果我们使用后退按钮退出 有什么方法可以解决在不重新启动的情况下获取应用程序的问题吗 请帮忙 当您按下Home按钮 应用程序将暂停并保存当前状态 最后应用程序
  • 在 Android 中使用 DataOutputStream 在 POST 正文中发送特殊字符 (ë ä ï)

    我目前正在开发一个具有大量服务器端通信的 Android 应用程序 昨天 我收到一份错误报告 称用户无法发送 简单 特殊字符 例如 我搜索过但没有找到任何有用的东西 可能重复 没有答案 https stackoverflow com que
  • TextView 之间有分隔线

    我正在尝试在 android studio 中创建以下布局 因为我对 android 东西还很陌生 所以我第一次尝试使用 LinearLayout 并认为这可能无法实现 现在我正在尝试使用RelativeLayout 我已经用颜色创建了这个
  • Firebase:如何在Android应用程序中设置默认通知渠道?

    如何设置default通知渠道通知消息当应用程序在后台运行时会出现什么情况 默认情况下 这些消息使用 杂项 通道 如你看到的在官方文档中 https firebase google com docs cloud messaging andr
  • CookieManager.getInstance().removeAllCookie();不删除所有cookie

    我在应用程序的 onCreate 中调用 CookieManager getInstance removeAllCookie 我遇到了一个奇怪的问题 我看到 GET 请求中传递了意外的 cookie 值 事实上 cookie 值是一个非常非
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • MediaCodec 创建输入表面

    我想使用 MediaCodec 将 Surface 编码为 H 264 使用 API 18 有一种方法可以通过调用 createInputSurface 然后在该表面上绘图来对表面中的内容进行编码 我在 createInputSurface
  • Android构建apk:控制MANIFEST.MF

    Android 构建 APK 假设一个 apk 包含一个库 jar 例如 foo jar 该库具有 META INF MANIFEST MF 这对于它的运行很重要 但在APK中有一个包含签名数据的MANIFEST MF 并且lib jar
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • Android - 将 ImageView 保存到具有全分辨率图像的文件

    我将图像放入 ImageView 中 并实现了多点触控来调整 ImageView 中的图像大小和移动图像 现在我需要将调整大小的图像保存到图像文件中 我已经尝试过 getDrawingCache 但该图像具有 ImageView 的大小 我
  • 使用 Espresso 检查 EditText 的字体大小、高度和宽度

    如何使用 Espresso 检查 EditText 的字体大小 高度和宽度 目前要分割我使用的文本 onView withId R id editText1 perform clearText typeText Amr 并阅读文本 onVi
  • 如何删除因 Google Fitness API 7.5.0 添加的权限

    将我的 play services fitness api 从 7 0 0 更新到 7 5 0 后 我注意到当我将新版本上传到 PlayStore 时 它 告诉我正在添加一个新权限和 2 个新功能 我没有这样做 有没有搞错 在做了一些研究来
  • 找到 Android 浏览器中使用的 webkit 版本?

    有没有办法知道某些特定手机上的 Android 浏览器使用的是哪个版本的 webkit 软件 如果有一个您可以浏览以获取该信息的 URL 那就太好了 但任何其他方式也很好 如果你知道 webkit 版本 你就知道 html5 支持多少 至少
  • 在 Google 地图上绘制线条/路径

    我很长一段时间都在忙于寻找如何在 HelloMapView 中的地图上的两个 GPS 点之间画一条线 但没有运气 谁能告诉我该怎么做 假设我使用扩展 MapView 的 HelloMapView 我需要使用叠加层吗 如果是这样 我是否必须重

随机推荐

  • 如何使用 Javascript 弹出一个新窗口,其 html 与其父窗口几乎相同

    我想从单个页面创建多个版本的适合打印的页面 我正在考虑这样做 在原始页面上放置几个按钮 然后单击一个按钮将弹出一个新窗口 其html与其父窗口相同 但进行了一些修改 例如 将某些DIV的显示属性设置为没有任何 可以使用javascript来
  • 比较通用列表和数组

    为什么 generic list 比 array 慢 通用列表比数组稍慢 但在大多数情况下您不会注意到 主要与稍微复杂的查找有关 据说 List 在幕后 使用数组 但不能保证以与数组相同的方式将节点保留在相邻内存中 然而 我早在 2005
  • 广告过滤服务器端[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在开发一个 Web 应用程序 在其中显示来自其他网站的 HTML 在显示最终版本之前 我想去掉广告 关于如何实现这一目标有什么想法
  • 在哪里可以找到 Qt 的 dll 的 pdb 文件?

    我正在调试 Qt 应用程序 在哪里可以找到 Qt 的调试 dll 我在windows上使用的是vs2010 它说它需要 Qt 中的许多 dll 的 pdb 文件 从 Qt 5 9 开始 与 Windows 发行版相对应的 PDB 可作为单独
  • 如何在派生类中引用基类的属性?

    我可以做这个 class Blah2 atttr 5 aa atttr ob Blah2 print ob aa http ideone com pKxMc2 http ideone com pKxMc2 所以我想我也可以这样做 class
  • UIView 被状态栏剪切直到自动旋转

    我创建了一个多视图应用程序 它使用多个控制器来显示和控制视图 我遇到的问题是 当模拟器最初加载视图时 标题部分被屏幕顶部的栏覆盖 并且底部的工具栏没有接触屏幕的底部 我使用界面生成器大小属性来控制 iPhone 旋转时的视图 效果非常好 旋
  • 如何让 minimongo.js 在浏览器中运行?

    The minimongo 的 github 演示 https github com mWater minimongo陈述为 客户端 mongo 数据库 通过 http 与服务器同步 还有一个还有一个minimongo 独立 https g
  • Clang 格式将 if 语句体拆分为多行

    我有以下 cpp 文件 void call long function name bool void sf bool int main bool test true if test call function name test if te
  • 具有多个等待组的管道中通道范围内的死锁

    我正在练习通过同时将计算分为 100 组来计算阶乘的挑战 我解决了 WaitGroups 上的很多问题 但仍然处于calculateFactorial函数我在通道部分的范围上陷入了僵局 希望有人能指出这个问题 谢谢 package main
  • 使用链接进行电子邮件验证是一个坏主意

    在我的注册过程中 用户注册后 他们会收到通过电子邮件发送的验证链接 如果他们单击该链接 那么他们的帐户才会得到验证 但这种验证方法对于机器人来说是不是太容易了 我认为电子邮件可以由机器人创建 但可以肯定的是 如果验证只是单击链接 那么它也可
  • AWS Serverless Lambda + Angular - TypeError:express 不是函数

    该应用程序在 localhost 4200 中运行良好 但是 当我通过无服务器 Lambda 迁移到 AWS 时 我在 cloudwatch 日志中收到此错误 我想正因为如此我得到了500 message Internal server e
  • 如何在 ADO.NET 对象上调用 Dispose?

    实现的数据库访问类IDbConnection IDbCommand and IDataReader全部实施IDisposable 但显然 Command 和 Reader 依赖于 Connection 我的问题是 我是否必须单独对每个对象进
  • NLTK 中的 wordnet lemmatizer 不适用于副词 [重复]

    这个问题在这里已经有答案了 from nltk stem import WordNetLemmatizer x WordNetLemmatizer x lemmatize angrily pos r Out 41 angrily 这是 nl
  • 去掉尾随零和小数点

    使用 Lua 我将数字格式化为可变位数并去掉尾随零 小数点 例如 string format precision f value gsub 0 1 gsub 值的类型为数字 正数 负数 整数 小数 所以任务已经解决了 但出于美学 教育和性能
  • C# 访问冲突异常

    这是我的代码抛出异常 它今天随机开始 这是照片 这是整个页面代码和错误异常 public frmWFDocumentDetail InitializeComponent NavigationInTransition navigateInTr
  • 如何查找依赖于Python中特定模块的模块列表

    为了减少基于 Python 的 Web 应用程序的开发时间 我尝试对我最近修改的模块使用 reload reload 通过一个专用网页 Web 应用程序的开发版本的一部分 进行 该网页列出了最近修改的模块 并且 py 文件的修改时间戳晚于相
  • 如何在 Android Studio 中立即获取 LivaData 的值?

    savedRecordFileName是一个变量LivaData
  • 默认启动器图标大小应该是多少

    我参考了文档http developer android com guide practices ui guidelines icon design html icon sets http developer android com gui
  • 自定义 OpenLayers 控件

    如何轻松自定义 OpenLayers 地图控件 或者至少 如何最小化控件的高度 谢谢 附言 有 CSS 覆盖吗 您可以对任何 openLayers 控件进行子类化 我刚刚通过对 PanZoomBar panZoomBar js 进行子类化
  • 如何为多个 Android 商店支持我的 Android 应用程序?

    我最近开始在 Google Android Market 上销售我的 Android 应用程序 并实施他们的应用程序许可方案以防止未经授权使用我的应用程序 我现在正计划将其发布到 Amazon Android 应用商店 并且想知道维护我的应