注意: 这是一个旧问题,相应的旧答案可能已经不再相关 - 请参考有关构建变量(也称为应用程序风格)的新答案。
我有一个关于发布到市场的问题。
公司X为A公司和B公司提供类似的服务,A公司和B公司都想在市场上推出一个应用程序。公司X希望只编写一个应用程序,并在编译时使用适当的标志、配置设置和语言字符串来区分它们。然而,在发布时,这些应用程序具有相同的应用程序包名称(使用共享的代码库)。该应用程序将得到维护和改进。
因此,鉴于我想保持单个代码库,这里的最佳实践是什么?
注意: 这是一个旧问题,相应的旧答案可能已经不再相关 - 请参考有关构建变量(也称为应用程序风格)的新答案。
我有一个关于发布到市场的问题。
公司X为A公司和B公司提供类似的服务,A公司和B公司都想在市场上推出一个应用程序。公司X希望只编写一个应用程序,并在编译时使用适当的标志、配置设置和语言字符串来区分它们。然而,在发布时,这些应用程序具有相同的应用程序包名称(使用共享的代码库)。该应用程序将得到维护和改进。
因此,鉴于我想保持单个代码库,这里的最佳实践是什么?
applicationId
。在packageName
和applicationId
之间存在差异。ApplicationId唯一地标识设备上和Google Play商店中的应用程序,而后者是代码命名空间。您可以在此处详细了解: https://developer.android.com/studio/build/application-id.html
对于每个风味,您可以使用特定文件夹中的不同drawable、字符串和其他xml文件。您只需要将这些资产放入与main
文件夹中的资产不同的新文件中。然后,您可以在build.gradle
中为每个风味定义buildConfigField
,并从Java文件中访问它们作为每个白标的配置。resValue
。AndroidManifest.xml
可配置化,以用于密钥等。johan的回答是正确的。在我们公司,我们建立了一个小脚本,可以从一个“基础”应用程序创建多个“品牌”应用程序,不仅应用新资源,而且还创建自定义的包名并修补相应的XML文件。
defaultConfig {
applicationId "com.example.example"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0.0"
}
productFlavors {
variantone {
applicationId 'com.company1.example'
}
varianttwo {
applicationId 'com.company2.example'
}
}
src/variantone/res
在Android Studio中切换构建变体不会导致文件更改(只需选择“输出”)。您可以同时为所有想要的变量构建APK。使用Build / Generate signed APK中的向导。buildTypes {
release {
}
debug {
applicationIdSuffix '.debug'
versionNameSuffix '.debug'
}
}
manifestmerger.enabled=true
2)在清单文件中更改您的包名。这种方法的一个注意点是,模拟的应用程序版本将包含.apk中的所有文件,而ant脚本将剥离重复文件。此外,虽然这个“完整”的.apk可以安装在设备上,但除非您可以将设备的区域设置与品牌区域相匹配,否则它只会显示默认行为。(我的任何物理设备上都没有安装自定义区域设置。)如果您有意使用现有的命名区域(如en_AU、en_CA、en_GB),那么这种方法很有效,但对于自定义名称(如en_B1、en_XX),可能会出现问题。