我目前正在做一个android项目,我使用github action来测试这个项目。但是每当它构建时,它都会因为找不到google-services.json
文件而结束错误。
生成的错误如下所示
File google-services.json is missing. The Google Services Plugin cannot function without it.
现在,我不想在github上提交或上传google-services.json
文件,那么,有没有其他方法来解决这个问题?
3条答案
按热度按时间dffbzjpn1#
嗯...我已经找到了解决办法,但如果有人需要,我在这里解释。
我们可以将
google-sevices.json
的内容存储在环境变量中(也就是github中的秘密)。实际上github使用基于Linux的cli,所以我们必须使用github操作在cli上执行一些命令。有两个步骤...
google-services.json
文件的内容:使用名称GOOGLE_SERVICES_JSON
的Setting > Secrets > New Repository Secret
在
gradle.yml
中,这两个命令都应放在gradle构建命令之前通过执行此操作,将创建您的
google-services.json
文件,该文件也包含数据,因此应用程序将成功构建。yptwkmov2#
如果您正在创建任何公共存储库或任何示例应用,则不应将
google-services.json
文件提交到Github存储库。当你在私有存储库上工作时,这取决于合作者如何管理firebase凭证。
google-services.json
文件将拥有firebase项目的访问密钥和指纹。结论:不要在任何SVN或Git repo上共享
google-services.json
文件。用户可以将自己的google-services.json
文件添加到项目中,并在测试环境中运行它。x8diyxa73#
在GitHub repo中添加任何类型的凭据都是危险和不明智的。即使repo是私有的,并且你是目前唯一使用它的人,也许你以后会邀请其他人,除非你修改git历史记录,否则你的凭据将始终是可访问的,即使你通过新的提交删除了它们。
相反,将您的凭证(在本例中为
google-services.json
)放入GitHub Action secret中,并从CI文件中读取该secret。GitHub secret是存储此信息的绝佳位置,因为只有您运行的操作才能读取它们,而仓库中的其他成员无法读取。1.在本地计算机上将文件编码为base64,以便可以轻松地将其存储在environment variables中:
base64 google-services.json
1.复制输出并将其存储在一个名为
GOOGLE_SERVICES_JSON
的新GitHub操作机密中(可以在存储库的Settings标签中找到1.在你的GitHub Action yml中,在你编译之前,添加以下步骤,将你的编码文件添加到一个环境变量中,然后解码并添加到Action的工作目录中:
<folder>
是构建所需的任何文件夹。在我的Action中,我尝试构建一个Android APK,因此我的路径是./android/app/google-services.json
。此外,根据您的路径,您可能需要先创建目录:run: mkdir <folder> && echo $GOOGLE_SERVICES_JSON | base64 -di > ./<folder>/google-services.json
base64 -di
对编码文件进行解码,并去除“垃圾”字符,例如在将原始编码文件复制到Action secret中时可能带来的换行符。