Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 每个产品有多个google-services.json_Android_Firebase_Config_Variants - Fatal编程技术网

Android 每个产品有多个google-services.json

Android 每个产品有多个google-services.json,android,firebase,config,variants,Android,Firebase,Config,Variants,我认为这是关于这个主题的其他问题的一个变体 我有两种产品口味。我在不同的环境中部署我的应用程序,每个环境都与不同的Firebase项目通信。因此,对于每种口味,我需要能够针对特定的环境(开发、测试、生产等) 有没有一种方法,我可以在不引入新产品风格的情况下,创建一个选择合适的googleservices.json文件的风格变体?也许我处理这个问题的方式不对…首先,将每个构建类型的相应google_services.json放在以下位置: app/src/debug/google_services

我认为这是关于这个主题的其他问题的一个变体

我有两种产品口味。我在不同的环境中部署我的应用程序,每个环境都与不同的Firebase项目通信。因此,对于每种口味,我需要能够针对特定的环境(开发、测试、生产等)


有没有一种方法,我可以在不引入新产品风格的情况下,创建一个选择合适的
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
的过程。是的。最后效果很好。谢谢您的帮助。