【问题标题】:Android Google Maps API keys for different product flavors适用于不同产品风格的 Android Google Maps API 密钥
【发布时间】:2019-04-30 05:09:38
【问题描述】:

我正在尝试设置我的 Android 项目,以便我可以让它的 3 个不同版本并行工作,指向不同的后端 API 等等:

  • 仅用于自己开发的调试/开发版本
  • 我在内部向客户发布的 beta/qa 版本,这样他们就可以在不影响生产环境的情况下测试应用程序
  • 发布到 Play 商店供所有人使用的生产版本

正如我所说,这 3 个版本应该可以并行安装在同一设备上(所以我猜它们应该有不同的应用程序 ID),具有不同的图标,指向不同的后端 API 等等。

为此,我认为最好的选择是使用这样的产品风味:

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.myapp"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    flavorDimensions "env"
    productFlavors {
        dev {
            dimension "env"
            applicationId "com.myapp.dev"
            resValue 'string', 'backend_url', 'https://dev.example.com'
        }
        beta {
            dimension "env"
            applicationId "com.myapp.beta"
            resValue 'string', 'backend_url', 'https://beta.example.com'
        }
        prod {
            dimension "env"
            applicationId "com.myapp"
            resValue 'string', 'backend_url', 'https://www.example.com'
        }
    }
}

我在src 下创建了相应的devbetaprod 目录,以便在其中拥有单独的资源,例如每种风味的启动器图标。

现在我想将 Google 地图集成到我的应用中。因此,我创建了一个 Google Maps Activity,Android 工作室提出了 2 个 google_maps_api.xml,他将其放入 srcdebugrelease 子目录中。如果我没记错的话,这些配置文件应该是特定于风格的而不是特定于构建类型的,所以我将一个从调试移到了开发,我将一个从release移到了beta,然后我从@复制了一个987654334@ 转为prod。所以现在我有以下文件结构:

所以现在我需要为每种风格生成 Google Maps API 密钥并将它们限制为我的应用的每种风格。但为了做到这一点,我需要在每个 Google Cloud 项目的 API 密钥中指定 SHA-1 指纹。而且我不确定在那里使用哪一个。我可以对所有这些都使用相同的 SHA-1 指纹吗?我应该为每种构建类型(调试/发布)或每种风格(开发/质量保证/产品)有不同的 SHA-1 指纹吗?如果是这样,我如何找到用于每个键的正确指纹?

请注意,我尝试了 Gradle 签名报告,但没有太大帮助:

13:05:37: Executing task 'signingReport'...

Executing tasks: [signingReport]


> Task :app:signingReport
Variant: prodDebug
Config: debug
Store: /Users/sarbogast/.android/debug.keystore
Alias: AndroidDebugKey
MD5: 93:AA:D5:1B:0D:EA:7B:49:0B:BE:9F:13:FA:46:74:3F
SHA1: 09:FE:D6:BF:19:44:FC:BB:AB:7E:24:19:F7:A9:7D:31:2B:A5:55:17
SHA-256: 62:99:B8:38:07:B1:41:63:62:39:1B:2F:8A:80:F4:F6:E6:A5:97:2C:D0:7B:28:1E:34:2F:90:D1:10:C3:04:C4
Valid until: Monday, November 9, 2043
----------
Variant: devRelease
Config: none
----------
Variant: prodRelease
Config: none
----------
Variant: betaRelease
Config: none
----------
Variant: prodReleaseUnitTest
Config: none
----------
Variant: betaDebugAndroidTest
Config: debug
Store: /Users/sarbogast/.android/debug.keystore
Alias: AndroidDebugKey
MD5: 93:AA:D5:1B:0D:EA:7B:49:0B:BE:9F:13:FA:46:74:3F
SHA1: 09:FE:D6:BF:19:44:FC:BB:AB:7E:24:19:F7:A9:7D:31:2B:A5:55:17
SHA-256: 62:99:B8:38:07:B1:41:63:62:39:1B:2F:8A:80:F4:F6:E6:A5:97:2C:D0:7B:28:1E:34:2F:90:D1:10:C3:04:C4
Valid until: Monday, November 9, 2043
----------
Variant: devReleaseUnitTest
Config: none
----------
Variant: prodDebugUnitTest
Config: debug
Store: /Users/sarbogast/.android/debug.keystore
Alias: AndroidDebugKey
MD5: 93:AA:D5:1B:0D:EA:7B:49:0B:BE:9F:13:FA:46:74:3F
SHA1: 09:FE:D6:BF:19:44:FC:BB:AB:7E:24:19:F7:A9:7D:31:2B:A5:55:17
SHA-256: 62:99:B8:38:07:B1:41:63:62:39:1B:2F:8A:80:F4:F6:E6:A5:97:2C:D0:7B:28:1E:34:2F:90:D1:10:C3:04:C4
Valid until: Monday, November 9, 2043
----------
Variant: devDebugUnitTest
Config: debug
Store: /Users/sarbogast/.android/debug.keystore
Alias: AndroidDebugKey
MD5: 93:AA:D5:1B:0D:EA:7B:49:0B:BE:9F:13:FA:46:74:3F
SHA1: 09:FE:D6:BF:19:44:FC:BB:AB:7E:24:19:F7:A9:7D:31:2B:A5:55:17
SHA-256: 62:99:B8:38:07:B1:41:63:62:39:1B:2F:8A:80:F4:F6:E6:A5:97:2C:D0:7B:28:1E:34:2F:90:D1:10:C3:04:C4
Valid until: Monday, November 9, 2043
----------
Variant: devDebugAndroidTest
Config: debug
Store: /Users/sarbogast/.android/debug.keystore
Alias: AndroidDebugKey
MD5: 93:AA:D5:1B:0D:EA:7B:49:0B:BE:9F:13:FA:46:74:3F
SHA1: 09:FE:D6:BF:19:44:FC:BB:AB:7E:24:19:F7:A9:7D:31:2B:A5:55:17
SHA-256: 62:99:B8:38:07:B1:41:63:62:39:1B:2F:8A:80:F4:F6:E6:A5:97:2C:D0:7B:28:1E:34:2F:90:D1:10:C3:04:C4
Valid until: Monday, November 9, 2043
----------
Variant: betaDebugUnitTest
Config: debug
Store: /Users/sarbogast/.android/debug.keystore
Alias: AndroidDebugKey
MD5: 93:AA:D5:1B:0D:EA:7B:49:0B:BE:9F:13:FA:46:74:3F
SHA1: 09:FE:D6:BF:19:44:FC:BB:AB:7E:24:19:F7:A9:7D:31:2B:A5:55:17
SHA-256: 62:99:B8:38:07:B1:41:63:62:39:1B:2F:8A:80:F4:F6:E6:A5:97:2C:D0:7B:28:1E:34:2F:90:D1:10:C3:04:C4
Valid until: Monday, November 9, 2043
----------
Variant: devDebug
Config: debug
Store: /Users/sarbogast/.android/debug.keystore
Alias: AndroidDebugKey
MD5: 93:AA:D5:1B:0D:EA:7B:49:0B:BE:9F:13:FA:46:74:3F
SHA1: 09:FE:D6:BF:19:44:FC:BB:AB:7E:24:19:F7:A9:7D:31:2B:A5:55:17
SHA-256: 62:99:B8:38:07:B1:41:63:62:39:1B:2F:8A:80:F4:F6:E6:A5:97:2C:D0:7B:28:1E:34:2F:90:D1:10:C3:04:C4
Valid until: Monday, November 9, 2043
----------
Variant: betaReleaseUnitTest
Config: none
----------
Variant: prodDebugAndroidTest
Config: debug
Store: /Users/sarbogast/.android/debug.keystore
Alias: AndroidDebugKey
MD5: 93:AA:D5:1B:0D:EA:7B:49:0B:BE:9F:13:FA:46:74:3F
SHA1: 09:FE:D6:BF:19:44:FC:BB:AB:7E:24:19:F7:A9:7D:31:2B:A5:55:17
SHA-256: 62:99:B8:38:07:B1:41:63:62:39:1B:2F:8A:80:F4:F6:E6:A5:97:2C:D0:7B:28:1E:34:2F:90:D1:10:C3:04:C4
Valid until: Monday, November 9, 2043
----------
Variant: betaDebug
Config: debug
Store: /Users/sarbogast/.android/debug.keystore
Alias: AndroidDebugKey
MD5: 93:AA:D5:1B:0D:EA:7B:49:0B:BE:9F:13:FA:46:74:3F
SHA1: 09:FE:D6:BF:19:44:FC:BB:AB:7E:24:19:F7:A9:7D:31:2B:A5:55:17
SHA-256: 62:99:B8:38:07:B1:41:63:62:39:1B:2F:8A:80:F4:F6:E6:A5:97:2C:D0:7B:28:1E:34:2F:90:D1:10:C3:04:C4
Valid until: Monday, November 9, 2043
----------

BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed
13:05:38: Task execution finished 'signingReport'.

我对整个 Android 生态系统还是比较陌生,我找不到很多关于这种设置的文档,所以我也不确定我做的是否正确。

【问题讨论】:

  • 您是否使用“applicationId”运行时进行任何操作?
  • 参考这个问题寻求帮助:stackoverflow.com/questions/27609442/…
  • 您尚未将signingConfig 设置为buildTypes,这就是为什么它为所有variants 采用默认debug.keystore
  • 使用@GaneshPokale 回答它会帮助你。

标签: android google-maps-android-api-2


【解决方案1】:

您的签名配置可能有问题

试试这个,

signingConfigs {
    productname{
        storeFile file("release.keystore") //or jKs file path
        storePassword "myPassword"
        keyAlias "myAlias"
        keyPassword "Something...."
    }
}

buildTypes {

    debug {
        signingConfig signingConfigs.productname
    }
    release {
        signingConfig signingConfigs.productname
    }
}

【讨论】:

  • 这应该与我用来生成签名包以上传到 Google Play 商店的密钥库相同吗?
  • 是的,同一个文件。
  • 好的,然后 gradle signingReport 为我提供所有变体的相同 SHA-1 指纹。这正常吗?
  • @Sebastien 这是否解决了您的问题?一般来说,不同的 Flavors 使用相同的 SHA1 是否好?
【解决方案2】:

由于您有 3 个不同的 Google Cloud 项目,我相信您将需要 3 个不同的 SHA-1 指纹每种类型一个,因为您有 3 个不同的 google_maps_api.xml 文件。

如果我没记错的话,在每个 google_maps_api.xml 上应该有一个不同的 SHA-1 密钥。

【讨论】:

    猜你喜欢
    • 2012-08-31
    • 2015-12-09
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    相关资源
    最近更新 更多