Android: 使用相同的包名安装不同的flavor

4
我开发了一个安卓应用程序,有3个不同的版本(生产、测试、培训)。几乎99%的源代码都是相同的。只有assert文件夹中的一个单独文件,其中包含每个版本的服务器地址不同。这些版本都运行完美。但我希望应用程序能在设备上安装所有三个版本而不互相覆盖。由于项目的包名对于所有版本都是相同的,当我安装不同版本时,它会覆盖应用程序。
你有什么想法或建议吗?先感谢你。

每个口味更改包名不应该是一种解决方案吗? - joao2fast4u
2
你应该创建一个库项目,其中包含核心逻辑,并将其包含在三个不同包名的项目中。Android 应用程序由包名标识,因此每个应用程序的包名都需要是唯一的。 - Willie Nel
实际上,所有的源文件都是相同的,只有 assert 中的配置文件不同。所以我在想,为每个 flavor 创建不同的包名是否太麻烦了。如果包名在 flavors 中不同,能否访问活动? - Thilek
你是指assets文件夹中的文件吗? - joao2fast4u
@joao2fast4u 是的,在assert文件夹中有一个文件。我更改了包名,现在可以在设备上安装所有三种版本。只是想知道,在build.gradle中是否有为不同风格提供不同应用名称的选项,或者我需要将string.xml复制到各自的风格文件夹中? - Thilek
1个回答

1
无论如何,只需在build.gradle中更改包名称即可使其正常工作。
productFlavors {
    production {
        applicationId = "<your-package-surfix>.production"
    }

    testing {
        applicationId = "<your-package-surfix>.testing"
    }

    training {
        applicationId = "<your-package-surfix>.training"
    }
}

在AndroidManifest.xml中定义活动/服务/接收器时,请使用完整的包名。

使用新的Gradle 1.*更新后,无法将“testing”用作口味名称,该名称已保留为测试。 - Thilek
无法正常工作,出现错误,packageName 在构建变体中不会更改。错误:(29,0)无法为 ProductFlavor_Decorated 设置未知属性“packageName”。 - Naveed Ahmad
@NaveedAhmad 这是一篇旧文章了.. 你不再需要packageName。Gradle不再支持packageName属性。只需使用applicationId即可。 - Thilek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接