zoukankan      html  css  js  c++  java
  • Unity2019使用Gradle命令行(编译)出安卓包

    在我所经历的项目组中有这几种方法来生成APK

    1. 直接在Unity生成APK,可以接入SDK

    2. 使用Unity导出Android Studio工程手动生成APK

    3. 使用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 的优势

    1. 自动处理包相依关系 - 取自 Maven Repos 的概念
    2. 自动处理布署问题 - 取自 Ant 的概念
    3. 条件判断写法直觉 - 使用 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.1in

    Unity导出AS工程文档:https://docs.unity3d.com/Manual/android-gradle-overview.html

    我打包使用的软件环境:

    准备知识:

    命令行生成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
    
    1. gradle clean 下载Gradle的一些依赖
    2. gradle assembleDebug 在buildOutput中生成debug签名的apk
    3. gradle assembleRelease 在buildOutput中生成Release签名的apk
    4. 当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
    esTestTtzg001_20210621v000
    esTestTtzg001> 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连接与存储库通信

    两种办法解决:

    1. 在build.gradle 中添加这行配置即可
    repositories {
    	...
        maven {
    	    url = uri("http://example.com")
            allowInsecureProtocol = true
            ...
        }
    }
    
    1. 把上述出问题的阿里云链接可以把http改成https也一样可以访问。

    AS无法访问host

    Unknown host 'mirrors.opencas.cn'. You may need to adjust the proxy settings in Gradle

    1. 在AS中将Settings 下的Http Proxy 设置为 No Proxy 记得Apply

    2. 打开用户目录下的:C:Usersqing.gradlegradle.properties,删除里面配置的mirrors.opencas.cn

    gradlew 和 gradle命令的区别

    gradlew:gradle wrapper的简写,在Android studio的指定是在gradle/wrapper/gradle-wrapper.properties 中

    gradle:对于系统gradle其存放在 ~/.gradle 下面

  • 相关阅读:
    transaction sql
    谈谈tempdb在系统中的重要作用
    Windows快捷键
    sp_addlinkedserver使用方法
    大型网站用户登录信息保存实现的探讨
    Proj EULibHarn Paper Reading: Graspan: A SingleMachine DiskBased Graph System for Interprocedural Static Analyses of LargeScale Systems Code
    Proj EULibHarn Paper Reading: Towards Efficient LargeScale Interprocedural Program Static Analysis on Distributed DataParallel Computation
    Proj EULibHarn Paper Reading: APICraft: Fuzz Driver Generation for Closedsource SDK Libraries
    Proj EULibHarn Paper Reading: Systemizing Interprocedural Static Analysis of LargeScale Systems Code with Graspan
    Proj EULibHarn Paper Reading: Chianina: An Evolving Graph System for Flow and ContextSensitive Analyses of Million Lines of C Code
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/14968513.html
Copyright © 2011-2022 走看看