Android 每个产品有多个google-services.json
我认为这是关于这个主题的其他问题的一个变体 我有两种产品口味。我在不同的环境中部署我的应用程序,每个环境都与不同的Firebase项目通信。因此,对于每种口味,我需要能够针对特定的环境(开发、测试、生产等)Android 每个产品有多个google-services.json,android,firebase,config,variants,Android,Firebase,Config,Variants,我认为这是关于这个主题的其他问题的一个变体 我有两种产品口味。我在不同的环境中部署我的应用程序,每个环境都与不同的Firebase项目通信。因此,对于每种口味,我需要能够针对特定的环境(开发、测试、生产等) 有没有一种方法,我可以在不引入新产品风格的情况下,创建一个选择合适的googleservices.json文件的风格变体?也许我处理这个问题的方式不对…首先,将每个构建类型的相应google_services.json放在以下位置: app/src/debug/google_services
有没有一种方法,我可以在不引入新产品风格的情况下,创建一个选择合适的
googleservices.json
文件的风格变体?也许我处理这个问题的方式不对…首先,将每个构建类型的相应google_services.json放在以下位置:
app/src/debug/google_services.json
app/src/main/google_services.json
现在,让我们在您的:app's build.gradle中启动一些gradle任务,以自动将适当的google_services.json移动到app/google_services.json
task switchToDebug(type: Copy) {
description = 'Switches to DEBUG google-services.json'
from "src/debug"
include "google-services.json"
into "."
}
task switchToRelease(type: Copy) {
description = 'Switches to RELEASE google-services.json'
from "src/release"
include "google-services.json"
into "."
}
伟大的 — 但在构建应用程序之前,必须手动运行这些任务是很麻烦的。我们希望在运行:assembleedbug或:assembleerelease之前的某个时间运行上面适当的复制任务。让我们看看运行:assembleRelease时会发生什么:
Zaks-MBP:my_awesome_application zak$ ./gradlew assembleRelease
Parallel execution is an incubating feature.
.... (other tasks)
:app:processReleaseGoogleServices
....
:app:assembleRelease
请注意:app:processReleaseGoogleServices任务。此任务负责处理根google_services.json文件。我们希望正确的google_services.json被处理,因此我们必须事先立即运行复制任务。
将此添加到build.gradle。请注意后评估封闭
afterEvaluate {
processDebugGoogleServices.dependsOn switchToDebug
processReleaseGoogleServices.dependsOn switchToRelease
}
现在,只要调用:app:processReleaseGoogleServices,我们新定义的:app:switchToRelease就会被预先调用。调试构建类型的逻辑相同。您可以运行:app:assembleerelease,发布版本google_services.json将自动复制到应用程序模块的根文件夹中
我能做到这一点的唯一方法是绕过使用
google services.json
,动态创建FirebaseApp
实例,例如
if (<is dev>) {
apiKey = <dev api key>;
databaseUrl = <dev database url>;
} else if (<is test> {
apiKey = <>;
databaseUrl = <>;
} else // production {
apiKey = <>;
databaseUrl = <>;
}
FirebaseOptions firebaseOptions = new FirebaseOptions.Builder()
.setApiKey(apiKey)
.setApplicationId(context.getString(R.string.google_app_id))
.setDatabaseUrl(databaseUrl)
.build();
return FirebaseApp.initializeApp(context, firebaseOptions, "MyApp");
if(){
apiKey=;
数据库URL=;
}若否({
apiKey=;
数据库URL=;
}其他//生产{
apiKey=;
数据库URL=;
}
FirebaseOptions FirebaseOptions=新建FirebaseOptions.Builder()
.setApiKey(apiKey)
.setApplicationId(context.getString(R.string.google\u app\u id))
.setDatabaseUrl(数据库URL)
.build();
返回FirebaseApp.initializeApp(上下文,firebaseOptions,“MyApp”);
请添加,感谢您的回复,但我正在尝试为每个构建风格配置多个JSON配置文件,例如开发、测试和生产(不创建新风格)。太好了。我会试试看!请注意,您需要删除apply插件:'com.google.gms.google services'
,gradle文件正在使用这种方法..这就是处理google services.json
的过程。是的。最后效果很好。谢谢您的帮助。