我正在尝试设置我的Android项目,以便可以使它的3个不同版本并行工作,指向不同的后端API,等等:
正如我所说,这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
下创建了相应的beta
,prod
和src
目录,以便在那里拥有单独的资源,例如每种口味的启动器图标。 / p>
现在,我想将Google Maps集成到我的应用程序中。因此,我创建了一个Google Maps Activity,Android Studio提出了2个google_maps_api.xml,他将它们放在debug
的{{1}}和release
子目录中。如果我没记错的话,这些配置文件应该是特定于风味的,而不是特定于buildType的,所以我将其中的一个从debug移到了dev中,将其中的一个从src
移到了release
中,从beta
到beta
的一个。所以现在我有了以下文件结构:
因此,现在到了需要为每种口味生成Google Maps API密钥并将它们限制为我的应用程序的每种口味的地步。但是,为此,我需要在每个Google Cloud Project的API密钥中指定SHA-1指纹。我不确定在那里使用哪个。我可以对所有这些都使用相同的SHA-1指纹吗?对于每种构建类型(调试/发行版)或每种风味(dev / qa / prod),我是否应该具有不同的SHA-1指纹?如果是这样,我如何找到用于每个键的正确指纹?
请注意,我尝试了Gradle签名报告,但并没有太大帮助:
prod
对于整个Android生态系统我还是一个相对较新的人,我找不到很多有关这种设置的文档,所以我不确定我也做对了。
答案 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密钥。