android - GoogleServices - 如何使用 flavorDimensions 为每个 flavor 组合设置不同的 applicationId?

标签 android gradle google-play-services

我有使用不兼容的 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 上运行。

例如:

  1. https://github.com/testwhat/PackageRenamer
  2. https://github.com/sjitech/ApkRename

关于android - GoogleServices - 如何使用 flavorDimensions 为每个 flavor 组合设置不同的 applicationId?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61247584/

相关文章:

android - 关于 .git/HEAD : error: manifest missing or unreadable -- please run init 的 repo 协议(protocol)

android - 比较两张图片是否相同

spring - 是否可以在类之间缓存 Spring 的应用程序上下文?

android - "Execution failed for task ' :app:packageDebug ' > Failed to generate v1 signature" exception while compiling Flutter

android - Google play服务认证(oauth 2.0)

android - Alpha 版测试人员从哪里下载 Google Play Android 应用程序?

java - 转换后如何修复丢失的日期时间?

kotlin - 错误: Kotlin :[内部错误] java.rmi.UnmarshalException

java - 为什么在我编译我的应用程序时缺少一个类?

java - libGDX 中的 TrueType 字体