我不能让产品口味有效。我有这个gradle
apply plugin: 'com.android.application'
android {
defaultConfig {
minSdkVersion 14
targetSdkVersion 24
compileSdkVersion 27
}
signingConfigs {
release {
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
signingConfig signingConfigs.release
}
}
repositories {
maven { url "https://jitpack.io" }
}
flavorDimensions "dim1", "dim2", "dim3"
productFlavors {
flavor1 {
dimension "dim1"
applicationId "com.example.dim1.app"
}
flavor3 {
dimension "dim2"
applicationId "com.example.dim2.app"
}
flavor3 {
dimension "dim3"
applicationId "com.example.dim3.app"
}
}
sourceSets {
flavor1 {
java.srcDirs = ["W:/android-studio-projects/sharedid/app/src/main/java/"]
manifest.srcFile "W:/android-studio-projects/sharedid/app/src/example1/AndroidManifest.xml"
assets.srcDirs = ["W:/android-studio-projects/sharedid/app/src/example1/assets/"]
resources.srcDirs = ["W:/android-studio-projects/sharedid/app/src/main/res/", "W:/android-studio-projects/sharedid/app/src/example1/res/"]
}
flavor2 {
java.srcDirs = ["W:/android-studio-projects/sharedid/app/src/main/java/"]
manifest.srcFile "W:/android-studio-projects/sharedid/app/src/example2/AndroidManifest.xml"
assets.srcDirs = ["W:/android-studio-projects/sharedid/app/src/example2/assets/"]
resources.srcDirs = ["W:/android-studio-projects/sharedid/app/src/main/res/", "W:/android-studio-projects/sharedid/app/src/example2/res/"]
}
flavor3 {
java.srcDirs = ["W:/android-studio-projects/sharedid/app/src/main/java/"]
manifest.srcFile "W:/android-studio-projects/sharedid/app/src/example3/AndroidManifest.xml"
assets.srcDirs = ["W:/android-studio-projects/sharedid/app/src/example3/assets/"]
resources.srcDirs = ["W:/android-studio-projects/sharedid/app/src/main/res/", "W:/android-studio-projects/sharedid/app/src/example3/res/"]
}
}
}
dependencies {
api 'com.google.android.gms:play-services-maps:15.0.0'
api 'com.google.android.gms:play-services-location:15.0.0'
api 'com.android.support:appcompat-v7:27.1.1'
api 'com.github.PhilJay:MPAndroidChart:v2.0.8'
}
...
当我到" Build |选择变体" 我只能选择
模块:应用的 构建变体: flavor1Flavor2Flavor3Debug , flavor1Flavor2Flavor3Release
我本来希望得到
我试过"文件|使用gradle文件同步项目"
...
我收到此错误
引起:java.lang.RuntimeException:无法从中读取packageName 宽:\机器人工作室项目\ sharedid \应用\ SRC \主\的AndroidManifest.xml
我试过两个
答案 0 :(得分:2)
试试如下,
flavorDimensions "dim1"
productFlavors {
flavor1 {
dimension "dim1"
applicationId "com.example.dim1.app"
}
flavor3 {
dimension "dim1"
applicationId "com.example.dim2.app"
}
flavor3 {
dimension "dim1"
applicationId "com.example.dim3.app"
}
}
有关构建变体see this link
的更多详细信息答案 1 :(得分:2)
我认为有两个无关的问题:
目前您有2种构建类型(自动创建的debug
和release
)和3个维度(dim1
,dim2
和dim3
) ,每个都有1个变体(flavor1
为dim1
,flavor2
为dim2
,...)
这最多给出了:
2 * 1 * 1 * 1 = 2种组合
你应该切换到2个构建类型和1个维度(比如dim1
),它们有3个变体(flavor1
,flaver2
和flavor3
),以便:
2 * 3 = 6 apks
你应该有一个主清单。与其他资源不同,清单不是简单地覆盖,而是从多个来源合并(有关详细信息,请参阅Merge Multiple Manifest Files)。
它至少应包含一个包名(可能与最终的applicationId不同),如Configure Product Flavors中的本说明所述:
注意:您仍需要使用包属性指定包名称 在主/ 清单文件中。您还必须使用该包名称 您的源代码引用R类,或解析任何相对 活动或服务注册。这允许您使用 applicationId 为每种产品风味提供独特的包装ID 分发,无需更改源代码。
答案 2 :(得分:1)
基于此https://developer.android.com/studio/build/build-variants文档,您需要应用程序的此类层次结构。从所有构建版本中删除assets.srcDirs,您可以尝试使用这种结构。
赞: Flavor Image,AndroidManiFest file
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
- release/
- assets/
- logo.png // Specific assets for all the releaseAlt Variants.
- flavor1Release/
- assets/
- logo.png // very specific assets for the flavor1ReleaseAlt Variant
- SDK/
答案 3 :(得分:0)
我本来希望得到
以下构建变体: flavor1Debug,flavor2Debug,flavor3Debug,flavor1Release,flavor2Release,flavor3Release
为此,您需要为所有口味定义相同维度。
我收到此错误
引起:java.lang.RuntimeException:无法从中读取packageName 宽:\机器人工作室项目\ sharedid \应用\ SRC \主\的AndroidManifest.xml
您收到此错误,因为路径无法访问。
试想一下,应用如何在运行时找到 W: ?
所以,你需要在这里使用相对路径。
同样来自官方文件(https://developer.android.com/studio/build/build-variants#configure-sourcesets):
如果您的源没有组织到默认源集中 Gradle期望的文件结构,如上一节中所述 关于创建源集,您可以使用sourceSets块进行更改 Gradle看起来为源集的每个组件收集文件。 您不需要重新定位文件; 你只需要提供Gradle 与路径相对于模块级build.gradle文件, Gradle应该为每个源集合组件找到文件