Unity2019使用Gradle命令行(编译)出安卓包
在我所经历的项目组中有这几种方法来生成APK
直接在Unity生成APK,可以接入SDK
使用Unity导出Android Studio工程手动生成APK
使用Unity导出Android Studio工程命令行离线生成APK
这里记录一下我在项目组使用Android Studio出包的笔记。
使用Unity导出Android Studio工程前建议查看我之前的文章《Unity2019及Unity2020打包android的环境配置》,主要介绍替换或修改Unity安装目录下的baseProjectTemplate.gradle,把链接指向国内能加快速度。
说明:我把Android Studio简称为AS,AS生成APK使用gradle来构建。
Gradle简介
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。Gradle 构建脚本使用的是 Groovy 或 Kotlin 的特定领域语言来编写的,而不是传统的XML。
当前官方支持的语言为Java、Groovy、Scala、C++、Swift、JavaScript等以及Spring框架。
使用 Gradle 的优势
- 自动处理包相依关系 - 取自 Maven Repos 的概念
- 自动处理布署问题 - 取自 Ant 的概念
- 条件判断写法直觉 - 使用 Groovy 语言
过去 Java 开发者常用 Maven 和 Ant 等工具进行封装布署的自动化,或是两者兼用,不过这两个包彼此有优缺点,如果频繁改变相依包版本,使用 Ant 相当麻烦,如果琐碎工作很多,Maven 功能不足,而且两者都使用 XML 描述,相当不利于设计 if、switch 等判断式,即使写了可读性也不佳,而 Gradle 改良了过去 Maven、Ant 带给开发者的问题,至今也成为 Android Studio 内置的封装布署工具。
下载和配置
Gradle下载:https://gradle.org/releases/
配置方法:需要把gradle解压后的bin路径配置到环境变量的Path中,示例:D:\gradle-7.1\bin
Unity导出AS工程文档:https://docs.unity3d.com/Manual/android-gradle-overview.html
我打包使用的软件环境:
- Unity版本:2019.3.7f1
- Android Studio 4.1.3
- gradle:7.1
- Jdk:1.8.0_181
- ndk:https://dl.google.com/android/repository/android-ndk-r19-windows-x86_64.zip
- win10 企业版 ltsc 1809
准备知识:
- 通过Unity导出的Android Studio和Google安卓原生工程的结构图对比
- 不同版本的Unity要求的NDK版本和两者对应关系表(Unity NDK Version Match)
- Unity2019使用Android Studio 4出安卓包
命令行生成APK
在开始生成APK前需要做一些准备工作:在 AS 的 Terminal 中使用命令 gradlew --warning-mode all 可以打印出当前 gradle 存在的所有警告信息
检查签名信息
检查AndroidStuiod工程根目录下的build.gradle文件中的keystore,alias,密码配置是否正确:
signingConfigs{
release{
keyAlias 'xxxxxx'
keyPassword 'xxxxxx'
storeFile file('D:/android_sdk/android.keystore')
storePassword 'xxxxxx'
v2SigningEnabled true
}
debug{
keyAlias 'xxxxxx'
keyPassword 'xxxxxx'
storeFile file('D:/android_sdk/android.keystore')
storePassword 'xxxxxx'
v2SigningEnabled true
}
}
运行命令
在CMD中进入到AS工程的根目录,然后在命令行输入:gradle assembleRelease,就会生成APK。
可以生成release和debug两种APK,命令如下:
radle clean
gradle assembleRelease
- gradle clean 下载Gradle的一些依赖
- gradle assembleDebug 在build\Output中生成debug签名的apk
- gradle assembleRelease 在build\Output中生成Release签名的apk
- 当CMD中出现
BUILD SUCCESSFUl恭喜你!Gradle打包成功啦!
如果在CMD中build失败,可以尝试在AS的命令行窗口中,输入:gradle assembleRelease
PS. 下面这个方法过时了,在android 的官网上已经去掉此部分了
在AS2.3及更高版本且minsdkVersion>21时,AS会使用新版的dex打包,速度更快
在命令行也调用新版本的打包:./gradlew -Pandroid.injected.build.api=26 assembleDevDebug
离线生成apk
在项目的根目录下有gradlew.bat文件,执行命令如下:
cd %~dp0
gradlew.bat clean
gradlew.bat assembleRelease --offline
遇到问题
build出错
首次出包时未安装好依赖,会报依赖找不到的问题,日志如下:
解决办法:通过Android Stuio打开项目,AS会自动下载依赖,下载完依赖之后,使用命令行还是报一样的错误,现在是使用AS手动操作来出包。
PS E:\AndroidExport\resTestTtzg001_20210621v000\resTestTtzg001> gradle assembleRelease
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring root project 'resTestTtzg001'.
> Could not resolve all dependencies for configuration ':classpath'.
> Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven repository 'maven2(http://maven.aliyun.com/nexus/content/repositories/jcenter)' to redirect to a secure protocol (like HTTPS) or allow insecure protocols. See https://docs.gradle.org/7.1/dsl/org.gradle.api.artifacts.repositories.UrlArtifactRepository.html#org.gradle.api.artifacts.repositories.UrlArtifactRepository:allowInsecureProtocol for more details.
不支持在存储库中使用不安全的协议,没有显式的选择。
重定向到安全协议(如HTTPS)或允许不安全协议
allowInsecureProtocol:指定是否可以接受通过不安全的HTTP连接与存储库通信
两种办法解决:
- 在build.gradle 中添加这行配置即可
repositories {
...
maven {
url = uri("http://example.com")
allowInsecureProtocol = true
...
}
}
- 把上述出问题的阿里云链接可以把http改成https也一样可以访问。
AS无法访问host
Unknown host 'mirrors.opencas.cn'. You may need to adjust the proxy settings in Gradle
在AS中将Settings 下的Http Proxy 设置为 No Proxy 记得Apply
打开用户目录下的:C:\Users\qing.gradle\gradle.properties,删除里面配置的mirrors.opencas.cn
gradlew 和 gradle命令的区别
gradlew:gradle wrapper的简写,在Android studio的指定是在gradle/wrapper/gradle-wrapper.properties 中
gradle:对于系统gradle其存放在 ~/.gradle 下面
Unity2019使用Gradle命令行(编译)出安卓包的更多相关文章
- 用Gradle命令行编译Android工程
在Android sdk 目录下的samples/android-21/ 文件夹下,任找一个工程,如果在命令行直接编译 可能会报这种错误:gradle buile.gradle FAILURE: Bu ...
- 命令行编译带外部包依赖的java源文件 [以JDBC MySQL8为例]
环境: MySQL8 JDK11(SE) 首先下载MySQL8的JDBC驱动 https://dev.mysql.com/downloads/connector/j/选 PlatForm Indepe ...
- MAC使用命令行打包出ipa包-通过xcodeproj
参考 : https://www.jianshu.com/p/32af2f71b4e5--老了,里面的一些命令现在都没有了,但可以借鉴思路 https://www.jianshu.com/p/004c ...
- [编译] 7、在Linux下搭建安卓APP的开发烧写环境(makefile版-gradle版)—— 在Linux上用命令行+VIM开发安卓APP
April 18, 2020 6:54 AM - BEAUTIFULZZZZ 目录 0 前言 1 gradle 安装配置 1.1 卸载系统默认装的gradle 1.2 下载对应版本的二进制文件 1.3 ...
- [编译] 5、在Linux下搭建安卓APP的开发烧写环境(makefile版)—— 在Linux上用命令行+VIM开发安卓APP
星期三, 19. 九月 2018 02:19上午 - BEAUTIFULZZZZ 0)前言 本文不讨论用IDE和文本编辑器开发的优劣,是基于以下两点考虑去尝试用命令行编译安卓APP的: 了解安卓APP ...
- xcode命令行编译时:codesign命令,抛出“User interaction is not allowed.”异常 的处理
之前正常运行的hudson iOS编译服务器slave节点,忽然出现编译失败.发现原因有2个: 第一个原因是编译机上用来签名的用户帐号过期,第二个原因是操作系统和xCode升级造成的. 对于第一个,重 ...
- iOS系统提供开发环境下命令行编译工具:xcodebuild
iOS系统提供开发环境下命令行编译工具:xcodebuild[3] xcodebuild 在介绍xcodebuild之前,需要先弄清楚一些在XCode环境下的一些概念[4]: Workspace:简单 ...
- VS2010命令行编译C#和VC项目
VS2010命令行编译C#和VC项目 VS2010命令行编译C#和VC项目 根据需要动态创建数据库字段后,需要动态创建或者调整页面,那就需要编译这些页面和后台文件.因此使用命令行编译将会非常方便,对于 ...
- 从 C++ 到 Qt(命令行编译)good
从 C++ 到 Qt 转载自:http://hi.baidu.com/cyclone/blog/item/8f8f08fa52d22f8758ee9006.html Qt 是 C++ 的库,Qt在an ...
- 从C++到Qt(命令行编译,讲解原理)
Qt 是 C++ 的库,Qt 在 ansi C++ 的基础上进行了一点扩展. 但国内似乎比较浮躁,学Qt的很多连基本的C++如何编译似乎都不太清楚.本文舍弃IDE或qmake.cmake等工具的束缚, ...
随机推荐
- Intellij IDEA、 Pycharm 格式化换行,竖线修改 最大 分隔 线
Intellij IDEA. Pycharm 等开发工具,超过 竖线,Ctrl + L 格式化时,就会换行 格式化后,现在的显示器分辨率高,这样右边一大片空白,看起来很不舒服 File -> S ...
- LinkedBlockingQueue实现的生产者和消费者模型
首先 LinkedBlockingQueue 是线程安全的阻塞队列,LinkedBlockingQueue实现的生产者和消费者模型 阻塞队列与我们平常接触的普通队列(LinkedList或ArrayL ...
- ME2N增强
一.ME2N增加字段 二.结构中添加扩展字段 附加结构中添加同名这些字段时会报错,原因是MEREP_OUTTAB_DOWNPAY等结构已存在该字段,导致冲突 三.添加逻辑代码 包含文件LMEREPI0 ...
- 在 Ubuntu 20.04 上安装 Visual Studio Code
Visual Studio Code 是一个由微软开发的强大的开源代码编辑器.它包含内建的调试支持,嵌入的 Git 版本控制,语法高亮,代码自动完成,集成终端,代码重构以及代码片段功能. Visual ...
- zzuli 1902: 985的因子对难题
***这道题明显是在卡时间,类比快速打素数表的算法,*** #include<iostream> #include<cstdio> #include<cstring> ...
- spring-transaction源码分析(4)AspectJ和spring-aspects模块
AspectJ是Java语言实现的一个面向切面编程的扩展库,能够基于一定的语法编写Aspect代码,使用ajc编译器将其编译成.class文件,之后在Java程序编写或加载时将Aspect逻辑嵌入到指 ...
- 分享Go书籍-《Go Web编程》
大家好,我是沙漠尽头的狼. 最近几天在看一本Go的书籍,看了100来页,感觉不错,分享给大家. 书籍基本信息 书籍信息: 书名:Go Web编程 作 者:(新加坡)郑兆雄(Sau Sheong C ...
- 3. Oracle数据库异常关闭,导致错误3. Oracle数据库异常关闭,导致错误ERROR: ORA-01034: ORACLE ngt available; ORA-27101: shared memory realm does not exist
之前由于电脑没电,强制关机,导致Oracle数据库异常关闭,再次启动电脑登陆数据库时,发生以下错误: 当我尝试重新启动数据库时,发生错误: 经过查阅资料后得知:缺少INITXE.ORA文件,需要从下图 ...
- 【ArgParse】一个开源的入参解析库
项目地址:argtable3 本地验证: 编译构建 新增验证 // examples/skull.c #include "argtable3.h" int main(int arg ...
- 如何让pc端网站在手机上可以等比缩放的整个显示
将 头部标签的 <meta name="viewport" content="width=device-width, initial-scale=1.0&qu ...