2013-09-25 42 views
5

不同名称的多个应用程序阅读这篇文章,觉得有同样的问题 - One code base, two applications on Android与相同的代码库

我已经创建了一个有一个像topicssplash screenslogoschartsrulesstatuses和项目申请testApp /或events

现在,我想从相同的代码库不同的应用程序(testApp_USAtestApp_CanadatestApp_Australia),并把他们在谷歌Play商店,这样,如果用户下载的应用程序,比方说,testApp_USA,则只有特定的物品到区域应该显示像美国的闪屏,USA标识等。

所以我想根据国家配置多个应用程序,然后根据该应用程序的用户已经下载设定的项目为默认值。

目前,我有一个单一的应用程序是针对所有地区,我强加多种条件来区分或更改项目根据地区。

例如:

在许多Java文件中,我使用

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

类似地,在许多的Java文件中,我使用

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

这只是一个项目了许多在整个代码重复。考虑到所有情况,它会更多。

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

我知道,iOS让我可以很容易地改变应用程序的名称和配置文件,以允许创建多个应用程序。但我不知道或者这是不容易对Android的代码做。

我的问题:

是否有可能在Android的创建具有相同的源代码不同的应用程序与项目不同的设置,并将它们发布到谷歌Play商店?如果YES,如何设置这样的配置?

UPDATE:

阅读这篇文章 - multiple-android-application-package-apk-files-from-single-source-code

于是我想出了同样的想法 -

1)以保存有关的应用程序类型,你要值一些字符串变量创建。

public static final String app_Name = "testApp_CANADA" ; 

2)有多个AndroidManifest.xml文件需要为多个应用程序创建.apk for。

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

但如何在一个应用程序中有多个AndroidManifest.xml文件?

UPDATE:

我的第一个AndroidManifest.xml主体工程文件夹(应用程序根文件夹)像往常一样,我们有。考虑这个为testApp_USA

我的第二个AndroidManifest.xml独立的包主体工程。考虑这个testApp_CANADA

AndroidManifest.xml都有不同的启动器活动和相应的启动画面,图标定义。软件包名称在这两个文件中都有所不同,因此它们将根据需要创建不同的.apk文件。

public static final String app_Name = "testApp_CANADA" ; 

OR

更清楚

如何调用特定AndroidManifest.xml根据:现在

,之间如何testApp_USA/testApp_CANADA提供我的主要的应用程序已经设置切换代码值为app_Name

随着我现有的设置,只有第一个AndroidManifest.xml被称为总是。

+2

http://developer.android.com/guide/topics/resources/localization.html - values/rules.xml为每个地区/本地化,并简单地阅读? – damian

+0

尽管链接很有帮助,但并未解决使用不同配置创建不同应用程序的问题。这是一种区域设置查找,并根据设备的配置使用区域设置来定义资源。 –

回答

9

我在将项目投放到不同市场(Google Play,三星,亚马逊)时遇到了类似的问题。所有的代码库都是相同的,只是在账单代码上有所不同。

我发现的最佳解决方案是为每个市场创建单独的项目并将通用代码推入库项目。

更详细地说,您需要在主项目中保留通用代码,为库和子项目创建库项目并启用清单合并。 添加以下行主项目的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.

希望这有助于加入此功能。

2

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

就您的情况而言,这似乎违反了Google Play政策(Cookie切割器应用程序),因此创建一个应用程序并让用户选择一个国家可能会更好。

+0

谢谢!您可以向我展示(通过文档,链接等)上述行如何违反Google Play政策。我阅读了Google Play文档,即http://play.google.com/about/developer-content-policy.html,https://developer.android.com/distribute/googleplay/policies/index.html和http ://play.google.com/about/developer-distribution-agreement.html,但没有发现任何与我试图达成的目标相反的内容。 –

1

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

+0

根据地区创建资源很好。最大的问题是如何根据地区对不同名称的相同应用程序进行重命名(因此具有来自单一源代码的不同.apk文件),并将其放在Google Play商店中。 –

1

我不知道你想要什么。但在我的层面上,您可以获得地理位置,在那里您可以找出您的应用程序当前用完的位置,或者更容易从位置获取位置,一旦找到语言环境或地理位置,您可以据此导航源。

3

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

它似乎很好地解释了所有的基础知识。有关您的具体问题的答案,请参阅Build Variants下的部分Product Flavors

正如网站所解释的,这个设计背后的目的之一就是让它更具动态性,更容易让多个APK使用基本相同的代码来创建,这听起来与您正在做的完全一样。

我可能没有解释它是最好的,但该网站做得很好。

相关问题