关于用gradle 自动拷贝 google-services.json的坑

一、Unity 2018 集成google play sdk时, 希望unity里直接用gradle方式打包成apk  (不希望导出成android studio gradle项目,再修改什么的),

unity 2017之后 可以在项目里 自定义 build.gradle文件

二、集成google sdk 需要把 后台网站上下载的 google-services.json 放到导出的gradle项目里,才能打包成功。

遇到问题就是如何把 google-services.json 在编译时 放到 临时导出的 gradle项目根目录下   (在 unity项目的 Temp/gradleOut)

想用gradle的拷贝方式自动拷贝,结果遇到了不少坑。


1.  一个问题是执行顺序问题
参照网上gradle拷贝文件  方式

task copyJsonFile(type:Copy) {
    delete("src/nullnull/google-services.json")
    from('C:/work/testzqSDK/Assets/Plugins/Android/')
    into('src/nullnull')
    include("google-services.json")
}

这样写了之后,发现 delete 先执行了,后面copy没有执行。

原来task的{}里有些代码 比如 println() 等函数 (delete应该也是)在解析gradle文件时就先执行了,task任务后面才可能执行

 

2. 在preBuild 任务之前执行我们的task:

写法如下,
preBuild.dependsOn copyJsonFile

 

 

3.虽然执行了, 还是遇到拷贝失败问题
启动gradle build 时 加一个参数 --stacktrace
可以看到报错:
Execution failed for task ':copyJsonFile'.
> Failed to create MD5 hash for file content.

查了一些资料,有人说,往根目录时 锁定的,拷贝会失败,所以报这个错,拷贝到其他目录就行

 


4. 把google-services.json 拷贝到了 它会自动查找的  src/nullnull 目录下
task copyJsonFile(type:Copy) {
    delete("src/nullnull/google-services.json")
    from('C:/work/testzqSDK/Assets/Plugins/Android/')
    into('src/nullnull')
    include("google-services.json")
}
但仍有问题, 虽然最后拷贝过去了, 但google处理那步骤还是报错说没有文件,感觉copy没有及时

 

 

5. 最后方案 ,不用(type:Copy)   直接里面 copy{……} 方式,居然就正常了, 而且就算往根目录拷贝也没问题:

task copyJsonFile {
    copy {
        delete("google-services.json")
        from('C:/work/testzqSDK/Assets/Plugins/Android/')
        into('./')
        include("google-services.json")
    }
}

注 preBuild.dependsOn copyJsonFile 最好写在gradle文件最后面

你可能感兴趣的:(Unity,Android)