以下是几个规定:
1. 客户的用户将使用此应用程序。 2. 您可以成为一个或多个客户的用户,但我们不能向用户显示任何客户列表。 3. 客户不能共享单个应用程序。 4. 即使功能相同,应用程序必须能够根据不同的客户而看起来不同。
是的,我知道这样构建它很麻烦,但我们的客户不希望其他客户的客户知道他们也是我们的客户。
那么,最好的方法是什么?如何在尽可能减轻开发人员压力的情况下构建易于品牌化的应用程序?
为每个版本的应用程序保留单独的res/文件夹。给每个图标、徽标和字符串相同的名称,但为每个客户量身定制内容,并通过将该res文件夹放入构建中来构建不同的.apk文件。我认为您无法使自定义限定符适用于此并仅制作单个.apk文件 - 在任何情况下,这都将捆绑每个客户的自定义图片和字符串到每个人的应用程序中。
使用gradle构建时间解决方案可以通过productFlavors功能实现,该功能在http://blog.robustastudio.com/mobile-development/android/building-multiple-editions-of-android-app-gradle/中有描述。
口味(也称为客户品牌)可以在build.gradle文件中以以下方式定义(不同的包名称用于将每个品牌的apk部署为单独的应用程序):
productFlavors {
vanilla {
applicationId "com.example.multiflavorapp"
}
strawberry {
applicationId "com.example.multiflavorapp.strawberry"
}
}
品牌特定的Android资源可以被放置在src/vanilla/res或src/strawberry/res目录中(而不是src/main/res目录)。请注意,使用productFlavors功能时,Gradle不会合并资产,仅简单替换文件,没有关于特定res子目录的任何知识。
在构建过程中,Gradle创建构建变体作为构建类型(debug、release)和productFlavor的组合,更多信息请参见http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Type-Product-Flavor-Build-Variant。
我会先开发一个全局重命名的脚本,因为你无论如何都需要它(可以使用find、xargs和sed相对简单地完成)
你需要一些工具来定制资源,这可能是SDK和Eclipse插件
也许你可以创建某种向导扩展Eclipse插件。
或者通过大量的工作但更容易使用,你可以做一些独立的东西,驱动必要的命令行工具来构建生成的包。
你可以按照@Jems所说的做法,或者(假设应用程序与服务器通信)将“逻辑”放在服务器端。
第一次运行应用程序时,服务器将向您发送与您的客户端对应的资源,您将在本地存储这些资源。
这种方法存在的问题:第一次可能需要下载大量内容...
优点:您只需更改一个属性字符串,即可知道服务器是哪个,或者登录到服务器以了解它必须发送什么,而无需部署具有不同资源的另一个应用程序来更改布局。
这实际上取决于您是否想在服务器端支持布局更改。