我有使用不兼容的 applicationId 的旧应用程序。我试图用 flavorDimensions 迁移它们以共享如此常见的 Assets 和代码。 我有这个口味设置:
defaultConfig {
applicationId "com.example"
}
flavorDimensions 'fruit', 'env'
productFlavors {
pear {
dimension 'fruit'
}
banana {
dimension 'fruit'
}
staging {
dimension 'env'
}
prod {
dimension 'env'
}
}
我想通过 flavor 组合获得这些 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,例如:
flavor 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/包名称,而不是在 android.applicationVariants.all
阶段覆盖的 appId。
所以有更好的方法来定义我的 applicationId 每个风格组合,适用于谷歌服务任务? (我需要将这些applicationId保留为“_”,不能更改)。
最佳答案
谷歌服务 gradle 插件的当前工作方式是不可能的。也许有办法就此向谷歌反馈,但与此同时,实现带有“_”的应用程序 ID 的唯一方法是在构建 apk 后重命名应用程序 ID。因此,特定 flavor 的应用程序 ID 将使用“.”构建。分隔符,然后在构建 apk 后重命名应用程序 ID。
这可以通过使用 apktool 打开 apk 的标准过程来完成,将应用程序 ID 更改为您需要的,然后使用 apktool 重新打包,zipalign,重新签名等。如果太繁琐,有尝试执行相同操作的 GitHub 项目,但它们可能无法在所有 apk 上运行。
例如:
关于android - GoogleServices - 如何使用 flavorDimensions 为每个 flavor 组合设置不同的 applicationId?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61247584/