具有相同代码库的不同名称的多个应用程序

时间:2013-09-25 13:49:53

标签: android google-play app-config apk application-settings

阅读这篇文章,想到了同样的问题 - One code base, two applications on Android

我创建的应用testApp包含topicssplash screenslogoschartsrules,{{1}等内容}和/或statuses

现在,我想要来自相同代码库的不同应用程序(eventstestApp_USAtestApp_Canada)并将它们放在Google Play商店中,以便在用户下载应用程序时,例如, testApp_USA ,那么只有该地区的特定项目才会显示为美国,美国徽标等的初始屏幕。

所以我想根据国家/地区配置多个应用程序,然后根据用户下载的应用程序将项目设置为默认值。

目前,我有一个适用于所有地区的应用程序,我正在施加多个条件来根据地区区分或更改项目。

例如:

在许多Java文件中,我使用

testApp_Australia

同样,在许多Java文件中,我使用

if(rule.contains("USA"))
{
 //Show splash screen of USA
}

这只是整个代码中重复的一项内容。考虑到所有,它将会更多。

应该有更好的方法在Android中使用不同的名称和设置创建多个应用程序。

我知道, if(rule.contains("Australia")) { //Show splash screen of Australia } 允许我轻松更改应用程序名称和配置文件,以允许创建多个应用。但我不知道或者这对Android代码来说并不容易。

我的问题:

是否可以使用不同的项目设置在Android中使用相同的源代码创建不同的应用程序并将其发布到 Google Play商店?如果,如何设置此类配置?

更新

阅读此帖 - multiple-android-application-package-apk-files-from-single-source-code

然后我提出了同样的想法 -

1)获取一些字符串变量,该变量包含您要创建的应用程序类型的值。

iOS

2)为您需要创建.apk for。

的多个应用创建多个public static final String app_Name = "testApp_CANADA" ; 个文件

3)为每个清单创建相应的启动器活动。

但是如何在一个应用中添加多个AndroidManifest.xml文件?

更新

我的第一个AndroidManifest.xml像往常一样位于主项目文件夹(应用程序根文件夹)中。请考虑AndroidManifest.xml

我的第二个testApp_USA位于主项目下的单独包中。请考虑AndroidManifest.xml

两个testApp_CANADA都有不同的启动器活动,并带有相应的启动画面,图标已定义。包名称在两者中都有所不同,因此它们将根据要求创建不同的.apk文件。

现在,如果我的主应用已设置,如何在AndroidManifest.xml / testApp_USA之间切换代码:

testApp_CANADA

OR

更清楚

如何根据 app_Name 的值来调用特定的public static final String app_Name = "testApp_CANADA" ;

使用我当前的设置,始终只调用第一个AndroidManifest.xml

5 个答案:

答案 0 :(得分:11)

将项目投放到不同的市场 - 谷歌播放,三星,亚马逊,我遇到了类似的问题。所有代码库都是相同的,仅在计费代码中有所不同。

我找到的最佳解决方案是为每个市场创建单独的项目,并将公共代码推送到库项目中。

更详细地说,您需要在主项目中保留公共代码,使其成为库项目并为库和子项目启用清单合并。 将以下行添加到主项目的project.properties中:

android.library=true
manifestmerger.enabled=true

这是每个子项目的project.properties:

android.library.reference.1=../testApp //absolute or relative path to your main project
manifestmerger.enabled=true

此外,您需要将主项目作为ADT插件中的库(在Eclipse中 - 项目属性 - > Android)附加到所有子项目。 主项目清单不应包含任何启动器活动,它将被忽略,与appWidget xml和配置活动相同,如果你有一些。

在子项目中,您可以通过扩展或仅使用所需的类作为普通Java库来配置您想要的任何内容并使用主代码。此外,您可以像在子项目中一样使用主项目活动,服务,广播接收器等,而不会重复显示子项目。 完成所有配置之后,您可以像往常一样为所需的国家/地区构建所需的项目,您可以根据需要为不同的国家/地区设置不同的apk。

以下是清单合并http://www.platoevolved.com/blog/programming/android/merging-android-manifest-files/

的更详细说明

请注意,此功能已在ADT第20版预览版3中添加。

希望这有帮助。

答案 1 :(得分:3)

我有同样的问题。也许你已经找到了答案,但有些搜索最终导致我this website,这解释了Gradle

它似乎很好地解释了所有基础知识。要获得特定问题的答案,请查看Product Flavors下的Build Variants部分。

正如网站所解释的那样,此设计背后的部分目的是使其更具动态性,并且更容易使用基本相同的代码创建多个APK,这听起来就像您正在做的那样。

我可能没有最好地解释它,但该网站做得非常好。

答案 2 :(得分:2)

从公共代码库中获取多个应用程序的方法是将公共代码作为库项目,并让每个应用程序使用库项目(请参阅http://developer.android.com/tools/projects/index.html)。 每个项目都可以覆盖strings.xml,并且常见的可以检查包ID。

在您的情况下,这似乎违反了Google Play政策(Cookie切割应用),因此最好创建一个应用并让用户选择一个国家。

答案 3 :(得分:1)

为此,您必须使用App Localization概念。为此,您必须创建不同的资源,耐用品。假设你想在日本运行你的应用程序,你必须创建像“res / drawable-ja”这样的可绘制文件夹。这与创建不同的布局以支持平板电脑和小型设备相同。 这里是参考链接: http://developer.android.com/guide/topics/resources/localization.html http://developer.android.com/distribute/googleplay/publish/localizing.html

答案 4 :(得分:1)

我不确定你到底想要什么。但是在我的关卡中,您可以获得地理位置,在那里您可以找到应用当前用完的位置,或者更容易从区域设置获取位置,一旦找到区域设置或地理位置,可以根据它导航源。