安卓应用程序白标化

6
我正在寻找白标化安卓应用的最佳方法。基本上,我想能够构建几乎相同的多个版本的应用程序,每个版本将具有不同的资源(例如可绘制图标、颜色等),但它们将共享很多代码库。一些应用程序还将具有其他功能,因此它们不仅仅是克隆彼此。
我考虑过的一种方法是将共享的代码分离成一个库,但问题在于一些共享的代码包括活动,所以我不确定如何在每个应用程序中更改资源。
另一种方法是克隆和拥有,但那样的话,任何一个存储库中的漏洞或更改都必须应用到另一个存储库中。
还有其他选择吗?在两个安卓应用程序之间共享代码(包括活动、某些资源和其他常规Java类)的最佳实践是什么?

创建一个 Android 库项目(共享代码库),并将该 Android 库添加到您想要创建的所有应用程序中。 - Jared Burrows
1个回答

13

在两个Android应用程序之间共享代码,包括活动、一些资源以及其他普通的Java类,最佳实践是什么?

通过使用Android Studio和Gradle for Android,白标签化(white-labeling)可以很方便地设置每个客户的产品风味。您的公共代码和默认资源放在src/main/中,而您额外的代码和资源覆盖则放在src/根据您为客户指定的产品风味给出的任意名称/中。然后,无论是从Android Studio(左侧停靠的“构建变量”视图)还是从命令行,您都可以构建针对每个特定客户风味的不同应用程序输出。

您也可以选择使用库方式。在应用程序中定义了相同名称的资源会覆盖从库中导入的资源。


从Play商店可以同时安装两个白标应用吗?我已经在我的设备上安装了一个白标应用,但是当我尝试下载另一个时,它返回错误并显示“无法安装”。有什么建议吗? - Misha Bhardwaj
@MishaBhardwaj:这些应用程序需要单独的应用程序ID,您可以在Gradle中设置。这些应用程序还需要确保所有内容提供程序具有唯一的授权字符串(例如,基于应用程序ID)。在Android 5.0+上,它们不应定义新权限(<permission>元素),或者应由相同的生产密钥库签名。LogCat可能会给您一些线索,以了解为什么在您的特定情况下安装失败。 - CommonsWare
如何管理代码库?我该如何跟踪某个客户使用的哪个版本(或版本控制中的变更集)是哪个版本? - muthuraj
@muthuraj:这已经超出了此问题和答案的范围。在所有客户都使用相同版本的情况下,这里概述的方法可以正常工作,当您发布新版应用程序时,所有客户都会收到更新。如果您的不同用户可能会使用应用程序的不同版本,仅使用产品风格可能是不够的。我建议您针对该主题提出单独的Stack Overflow问题。 - CommonsWare
1
@CommonsWare 我理解你的观点,但这不是我想谈论的。如果您正在开发一个企业应用程序(Word实际上并不是),需要基于公司的Active Directory(或等效)进行登录,则需要一些绑定(您不希望每个人都必须手动配置此类内容)。一些皮肤可以帮助人们知道他们是否使用了正确的应用程序。有很多应用程序在做这件事情。我想知道它们是如何工作的。我可能需要撰写一个新问题。不确定最好的发布位置。感谢您的回复。 - Charlie Reitzel
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接