适用于不同产品口味的Android Google Maps API密钥

时间:2019-04-30 05:09:39

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

我正在尝试设置我的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'
        }
    }
}

然后我在dev下创建了相应的betaprodsrc目录,以便在那里拥有单独的资源,例如每种口味的启动器图标。 / p>

现在,我想将Google Maps集成到我的应用程序中。因此,我创建了一个Google Maps Activity,Android Studio提出了2个google_maps_api.xml,他将它们放在debug的{​​{1}}和release子目录中。如果我没记错的话,这些配置文件应该是特定于风味的,而不是特定于buildType的,所以我将其中的一个从debug移到了dev中,将其中的一个从src移到了release中,从betabeta的一个。所以现在我有了以下文件结构:

Project file structure

因此,现在到了需要为每种口味生成Google Maps API密钥并将它们限制为我的应用程序的每种口味的地步。但是,为此,我需要在每个Google Cloud Project的API密钥中指定SHA-1指纹。我不确定在那里使用哪个。我可以对所有这些都使用相同的SHA-1指纹吗?对于每种构建类型(调试/发行版)或每种风味(dev / qa / prod),我是否应该具有不同的SHA-1指纹?如果是这样,我如何找到用于每个键的正确指纹?

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

prod

对于整个Android生态系统我还是一个相对较新的人,我找不到很多有关这种设置的文档,所以我不确定我也做对了。

2 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:0)

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

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