【发布时间】:2020-07-29 12:51:26
【问题描述】:
我的旧应用程序使用了不合规的 applicationId。我尝试使用 flavorDimensions 迁移它们以共享如此常见的资产和代码。 我有这个口味设置:
defaultConfig {
applicationId "com.example"
}
flavorDimensions 'fruit', 'env'
productFlavors {
pear {
dimension 'fruit'
}
banana {
dimension 'fruit'
}
staging {
dimension 'env'
}
prod {
dimension 'env'
}
}
我想通过风味组合来获得这些 applicationId:
-
pearStaging:
com.example.pear_staging(注意“_”) -
pearProd :
com.example.pear -
bananaStaging:
com.example.banana_staging(注意“_”) -
bananaProd :
com.example.banana
我尝试过使用applicationIdSuffix:
productFlavors {
pear {
dimension 'fruit'
applicationIdSuffix 'pear'
}
banana {
dimension 'fruit'
applicationIdSuffix 'banana'
}
staging {
dimension 'env'
applicationIdSuffix '_staging'
}
prod {
dimension 'env'
}
}
但后缀默认用点分隔。所以它生成了错误的applicationId,例如:
风味pearStaging:com.example.pear._staging(注意“_”前的“.”)
我在这个帖子上看到了答案:
How to set different applicationId for each flavor combination using flavorDimensions?
他们讨论了使用mergedFlavor.setApplicationId(...) 在最后覆盖 applicationId 的解决方法。但如果我与 google services gradle plugin 结合使用,这将不起作用。
因为在插件过程阶段,我收到了这个错误:
* What went wrong:
Execution failed for task ':app:processPearStagingDebugGoogleServices'.
> No matching client found for package name 'com.example'
如您所见,它使用默认的 applicationId/package 名称,而不是在 android.applicationVariants.all 阶段覆盖的 appId。
所以有更好的方法来定义我的 applicationId 每个风味组合与谷歌服务任务一起使用? (我需要用“_”保留这些applicationId,不能更改)。
【问题讨论】:
-
不幸的是,无法自动执行此操作。正如您在docs 中看到的那样,唯一的选择是带点的后缀
-
我找到了一个解决方案,但没有 flavorDimension 组合...(并且没有后缀)
标签: android gradle google-play-services