一、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文件最后面