阅读这篇文章,想到了同样的问题 - One code base, two applications on Android
我创建的应用testApp
包含topics
,splash screens
,logos
,charts
,rules
,{{1}等内容}和/或statuses
。
现在,我想要来自相同代码库的不同应用程序(events
,testApp_USA
,testApp_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
。
答案 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)
我不确定你到底想要什么。但是在我的关卡中,您可以获得地理位置,在那里您可以找到应用当前用完的位置,或者更容易从区域设置获取位置,一旦找到区域设置或地理位置,可以根据它导航源。