【问题标题】:Multiple applications with different names for the same code base同一代码库具有不同名称的多个应用程序
【发布时间】:2013-09-25 13:49:52
【问题描述】:

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

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

现在,我想要来自相同代码库的不同应用程序(testApp_USAtestApp_CanadatestApp_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 商店?如果YES,如何设置这样的配置?

更新:

阅读这篇文章 - 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主项目下的独立包中。考虑一下testApp_CANADA

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

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

public static final String app_Name = "testApp_CANADA" ;

更清楚

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

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

【问题讨论】:

  • developer.android.com/guide/topics/resources/localization.html - 每个区域/本地化的 values/rules.xml,然后简单地阅读?
  • 虽然该链接很有帮助,但它并没有解决创建具有不同配置的不同应用程序的问题。它是一种根据设备的配置进行区域查找和使用区域定义资源的方法。

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


【解决方案1】:

我在将项目投放到不同市场(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】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 根据位置创建资源很好。最大的问题是如何根据位置重命名同一个应用程序的不同名称(从而从单一源代码中获得不同的 .apk 文件)并放到 google play store 上。
      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2021-06-19
        • 2015-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-24
        • 1970-01-01
        • 2016-12-25
        • 2012-10-20
        相关资源
        最近更新 更多