不同产品风格的Android Google Maps API密钥

3
我正在尝试设置我的Android项目,以便我可以同时拥有3个不同的版本,指向不同的后端API等:
  • 调试/开发版本,仅供我自己开发使用
  • 测试版/qa版本,我会将其发布给客户进行内部测试,以便他们在不干扰生产环境的情况下测试应用程序
  • 生产版本,发布到Play Store供所有人使用
如我所说,这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'
        }
    }
}

我创建了相应的devbetaprod目录在src下,以便在那里拥有独立的资源,例如每个flavor的启动器图标。

现在我想将Google Maps集成到我的应用程序中。因此,我创建了一个Google Maps Activity,Android Studio生成了2个google_maps_api.xml文件,并将它们放在srcdebugrelease子目录中。如果我没有记错,这些配置文件应该是针对flavor而不是buildType特定的,所以我将debug中的一个移动到dev中,将release中的一个移动到beta中,并将beta中的一个复制到prod中。现在我的文件结构如下:

Project file structure

现在我需要为每种应用程序生成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'.

我对安卓生态系统还比较新,关于这种设置方面我找不到很多文档资料,所以我也不确定我是否做得正确。


你是否在任何操作中使用了“applicationId”运行时? - Ganesh Pokale
请参考以下问题获取帮助:https://dev59.com/CF4c5IYBdhLWcg3wuMR7 - Chagall
你还没有将 signingConfig 设置到 buildTypes 中,这就是为什么它对所有的 variants 都采用默认的 debug.keystore 的原因。 - M D
使用@GaneshPokale的答案会帮助你。 - BlackBlind
2个回答

1
可能是您的 signingConfig 出现了问题。
尝试这样做:
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
    }
}

这个keystore应该和我用来生成签名包上传到Google Play Store的那个是一样的吗? - Sebastien
是的,同一个文件。 - Ganesh Pokale
1
好的,那么gradle signingReport为所有变体提供了相同的SHA-1指纹。这正常吗? - Sebastien
@Sebastien,这个修复方案解决了你的问题吗?对于不同的Flavors使用相同的SHA1是否总体上是好的? - yalematta

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接