注意:这是一个老问题,而且相应的旧评价可能不相关 - 请参阅有关Build Variants(又名App Flavors)的更新答案。 < / p>
我有一个关于向市场发布的问题。
公司,X,为公司A&amp; A提供类似的服务。 B,A和A都是B想在市场上买一个应用程序。公司X只想编写一个应用程序,并在编译时使用适当的徽标,配置设置和语言字符串来区分它们。但是,在发布时,应用程序具有相同的应用程序包名称(使用共享代码库)。该应用程序将被维护和
所以,鉴于我想保留一个代码库,这里的最佳做法是什么?
答案 0 :(得分:8)
据我所知,你不能在Market上拥有两个具有相同包名的应用程序。为了避免共享代码,布局,drawable等的复制粘贴,我建议将这些资源放入库项目,然后从你提到的应用程序A和B中引用这个项目,在这些应用程序中只是覆盖你想要更改的值
有关the official documentation中的图书馆项目的更多信息。
答案 1 :(得分:4)
请参阅此博客文章blog.javia.org/android-package-name/。
[edit]为了避免在此链接死亡时丢失信息:它是关于应用程序包定义和java包定义之间差异的帖子。可以更改应用程序包(在清单中),而无需触及源代码的java包。[/ edit]
答案 2 :(得分:2)
答案 3 :(得分:2)
这是一个非常古老的问题。但是现在我认为最好的方法是使用新的gradle构建系统为Android使用Product Flavours。
applicationId
。 packageName
和applicationId
之间存在差异。 ApplicationId可在设备和Google Play商店中唯一标识您的应用。后者用于代码名称空间。您可以在此处阅读更多内容:https://developer.android.com/studio/build/application-id.html main
文件夹中的资产不同。然后有buildConfigField
可以为build.gradle
中的每个风格定义,可以从Java文件中访问这些风格作为每个白标签的配置。 resValue
。 AndroidManifest.xml
配置密钥等。答案 4 :(得分:1)
我同意Reflog的说法,我的公司使用ant脚本来更改每个品牌的包名,并根据需要更换资源。我在编写基本应用时考虑了默认行为,并为每个附加品牌创建了文件夹,其中只包含那些与基础不同的文件,就像具有不同dpi大小的多个可绘制文件夹一样(“drawable”,“drawable-hdpi”)。 ..)。其他更改包括修改每个品牌的字符串文件以获得适当的颜色和法律文本。
通过在本地化样式中命名它们(例如“drawable-en-rAA-hdpi”,“layout-en-rBB”......),我可以通过打开“自定义”在多个模拟器中快速测试“每个模拟器中的区域设置”应用,并根据需要将区域设置设置为“en_AA”,“en_BB”。通过保存基本AVD的多个副本,我能够保存这些设置,因此我无需在模拟器中切换以测试所有最终品牌。
这种方法的一个警告是,该应用程序的模拟版本将包含.apk中的所有文件,而ant脚本会删除重复项。此外,虽然此“完整”.apk将安装在设备上,但它只会显示默认行为,除非您可以在设备上设置区域设置以匹配品牌区域设置。 (我的任何物理设备上都没有安装自定义区域设置。)如果您有意使用现有的命名区域设置(en_AU,en_CA,en_GB),这很有效,但对自定义名称(en_B1,en_XX)可能有问题。
答案 5 :(得分:1)
我知道我在聚会上有点晚了,但你可以通过以下方式来做到这一点:
1)通过添加行manifestmerger.enabled=true
2)更改您的包名称 清单。
3)更新/更改您的资源,绘图,字符串等等。
4)将您的主项目标记为库,并在白标项目中设置它的依赖关系。瞧,白色标签!
答案 6 :(得分:1)
你需要的是Build Variants(a.k.a. App Flavors)。
您可以在此处阅读https://developer.android.com/studio/build/build-variants.html
简而言之,这允许您使用不同的应用程序变体来共享部分代码和资源,但也可以拥有自己的替代品。您可以为每个变体指定不同的包名称/ ID,以及其他内容(如徽标,颜色,启动画面甚至java代码)。
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中切换构建变体不会导致文件更改(您只需选择&#34;输出&#34;)。您可以同时为所需的所有变体构建APK。使用Build / Generate signed APK中的向导。
P.S。以下是如何为Debug版本提供不同的包名称:
buildTypes {
release {
}
debug {
applicationIdSuffix '.debug'
versionNameSuffix '.debug'
}
}