7

看了这篇文章,想到了同样的问题——一个代码库,两个Android上的应用

我创建了一个应用程序testApp,其中包含topicssplash screenslogoschartsrulesstatuses/或等项目events

现在,我想要来自相同代码库的不同应用程序(testApp_USA, testApp_Canada, testApp_Australia)并将它们放在 Google Play 商店中,这样如果用户下载应用程序,例如testApp_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 中使用相同的源代码创建不同的应用程序并将它们发布到Google Play 商店?如果,如何设置这样的配置?

更新:

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

然后我想出了同样的想法——

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

public static final String app_Name = "testApp_CANADA" ;

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

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

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

更新:

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

我的第二个AndroidManifest.xml是在main project下的单独包中。考虑这个。testApp_CANADA

两者AndroidManifest.xml都有不同的启动器活动,并带有相应的初始屏幕和定义的图标。两者的包名称不同,因此它们将根据需要创建不同的 .apk 文件。

现在,如果我的主应用程序具有设置,如何在testApp_USA/之间切换代码:testApp_CANADA

public static final String app_Name = "testApp_CANADA" ;

或者

更清楚的是,

AndroidManifest.xml如何根据app_Name的值调用特定的?

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

4

5 回答 5

11

我在将项目投放到不同市场时遇到了类似的问题——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 中添加的。

希望这可以帮助。

于 2013-10-04T11:38:50.187 回答
3

我也有同样的问题。也许你已经找到了答案,但是一些搜索最终把我带到了这个网站,它解释了Gradle

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

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

我可能没有解释得最好,但是那个网站做得很好。

于 2014-04-21T15:59:28.023 回答
2

从一个公共代码库中拥有多个应用程序的方法是将公共代码作为一个库项目,并让每个应用程序使用该库项目(参见http://developer.android.com/tools/projects/index.html) . 每个项目都可以覆盖strings.xml,common来可以查看包id。

在您的情况下,这似乎违反了 Google Play 政策(千篇一律的应用程序),因此最好创建一个应用程序并让用户选择一个国家/地区。

于 2013-09-27T15:02:30.083 回答
1

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

于 2013-10-02T14:12:53.787 回答
1

我不确定你到底想要什么。但是在我的水平上,您可以获得地理位置,在那里您可以找到您的应用程序当前运行的位置,或者更容易从语言环境中获取位置,一旦您找到语言环境或地理位置,您可以据此导航源。

于 2013-10-04T07:21:22.623 回答