Java 如何使用Gradle中的不同资产文件夹为每种风格创建两个应用程序?
目前,我正在开发一个具有5种风格的应用程序,这是我的build.gradle文件中最重要的部分:Java 如何使用Gradle中的不同资产文件夹为每种风格创建两个应用程序?,java,android,gradle,android-gradle-plugin,build.gradle,Java,Android,Gradle,Android Gradle Plugin,Build.gradle,目前,我正在开发一个具有5种风格的应用程序,这是我的build.gradle文件中最重要的部分: buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.14.0' } } apply plugin: 'com.android.application' repositories {
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.14.0'
}
}
apply plugin: 'com.android.application'
repositories {
mavenCentral()
}
android {
compileSdkVersion 20
buildToolsVersion '20.0.0'
signingConfigs {
release {
storeFile file("")
storePassword "password"
keyAlias "alias"
keyPassword "password"
}
}
lintOptions {
abortOnError false
}
defaultConfig {
minSdkVersion 14
targetSdkVersion 20
applicationId 'application.package'
signingConfig signingConfigs.release
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
productFlavors {
flavor1{
applicationId 'com.flavor1.package'
}
flavor2{
applicationId 'com.flavor2.package'
}
flavor3{
applicationId 'com.flavor3.package'
}
flavor4{
applicationId 'com.flavor4.package'
}
flavor5{
applicationId 'com.flavor5.package'
}
}
}
dependencies {
compile project(':SDK')
}
我不得不对文件做一些修改,但基本上就是这样
问题:我需要在assets文件夹中为每种口味提供一组不同的assets文件,这些文件将创建不同的apk文件,但具有相同的包名。这些apk文件将作为同一应用程序上载到Google play,但适用于不同的地区
因此包名必须保持不变。所以基本上我需要创建一个机制,当每两个都有相同的包名但有不同的资产文件夹时,将创建10个flavor,而不是5个flavor。如何使用gradle实现这一点
我曾尝试使用如下构建类型实现此功能:
buildTypes {
release {
signingConfig signingConfigs.release
sourceSets.main.assets.srcDirs = ['assets']
}
releaseAlt {
signingConfig signingConfigs.release
sourceSets.main.assets.srcDirs = ['assetsalt']
}
}
但是由于某些原因,releaseAlt还接受位于assets目录而不是assetsalt目录中的文件 您可以使用buildTypes来实现这一点
buildTypes {
release {
// ... the usual stuff here
}
releaseAlt {
// .. the usual stuff here too like signing config etc...
}
}
现在,文件层次结构:
你应该
project/
- app/
- src/
- main/
- assets/
- logo.png // Generic assets go here
- java/
- res/
- ...
- flavor1/
- assets/
- logo.png // Specific assets for all the flavor1 Variants
- releaseAlt/
- asset/
- logo.png // Specific assets for all the releaseAlt Variants.
- flavor1ReleaseAlt/
- assets/
- logo.png // very specific assets for the flavor1ReleaseAlt Variant
- SDK/
使用此文件层次结构,当您构建flavor1Release
变体时,您将拥有flavor1/assets/
中的logo.png文件,但当您构建flavor1ReleaseAlt
变体时,此png将被打开的flavor1ReleaseAlt/assets/
文件夹替换
说明:
Gradle在配置上使用约定(默认情况下)。尤其是在项目结构方面。在构建flavor1ReleaseAlt变体时,Gradle(实际上是Android插件;))正在寻找一个名为flavor1ReleaseAlt/的文件夹,其中包含一些资产、资源、java等。。。在…内这些是Gradle可以为这个变体找到的最具体的应用程序资源。然后,Gradle将查找一个名为flavor1/的文件夹,查找一些不太具体的应用程序资源。然后是一个名为releaseAlt/的更小的特定文件夹,最后是通用文件夹(main/)
不同的文件夹必须具有非常严格的名称,以匹配变体查找:
- flavorBuildType/。(秩序很重要)
- 风味/
- 建筑类型/
- 主要/
希望这会有所帮助。谢谢您的帮助,但我希望找到一种解决方案,在这种解决方案中,我不必为具有相同软件包的应用程序再次创建一个完整的版本,而是使用不同的资产目录提供相同的版本,以创建两个APK,它们之间唯一的区别就是此资产文件夹。您认为不创建flavor1ReleaseAlt风味就可以做到这一点吗?您不必创建新的风味。在Android Gradle中,风味的概念与变体的概念相联系。一个变体是BuildType+Flavor。例如,如果您有buildType调试和FlavorFlavor1,则完整的变体是flavor1Debug。在我的解决方案中,您使用的是自定义构建类型,以便在相同的风格上有更多的变体。你只需要定义一个新的构建类型,所有已经定义的风格都将有一个新的变体。使用Gradle,文件夹层次结构是基于变体的。如果您知道每种风格都为ReleaseAlt BuildType共享相同的资产,那么只需添加一个新文件夹
ReleaseAlt/assets/
,并将所有可选资产放在其中。编辑答案问题在于,并非所有的备选口味都将共享同一个备选资源文件夹。我需要为不同的口味提供不同的资产文件夹。这就是我在《第二次代码和平》中所写内容的原因。另一个问题是,我需要替代的flavor包含来自flavor1目录的所有文件,但要从flavor1alt目录获取资产。从你的解释中我真的不明白这是怎么做到的。您能详细说明一下吗?如果您有一个特定的替代资产用于flavor1替代构建,请将其放入flavor1ReleaseAlt/assets/
文件夹中。如果您有一个用于Flavor2Alt构建的特定替代资产,请将其放入flavor2ReleaseAlt/assets/
文件夹中。