一、版本选择
本篇教程选用的是Unity 2017.4.10f1(64-bit) 2018年8月发布的LTS版本
二、JDK、SDK、NDK的配置
1 JDK 1.8.X安装不再赘述,具体直接看点击链接。使用javac -version验证,不是java -version
2 SDK安装(使用Android Studio安装SDK)
安装Android Studio 安装好后,打开Tools–>SDK Manager检查安装好的SDK版本,建议6.0以上全部安装,或者安装自己需要的。
3 NDK的安装
版本选择很重要,没有unity版本都有对应的NDK版本,可能多个版本对应同一个NDK版本,所以安装前要确定NDK的版本,查看方法:
unty Edit–>Preferences–>External Tools界面,NDK那一栏下面会提示要安装的版本,Unity 2017.4.10f1对应的NDK版本是r16b(64-bit),直接点击DownLoad下载压缩包,完成后解压,最后继续回到unity Preferences面板中进行选择NDK。
三、安卓平台的设置(Settings for Android)
1、Resolution And Presentation 分辨率和描述
- Preserve framebuffer alpha 保持 framebuffer 的透明通道;当勾选时,framebuffer 的 alpha 通道将不会被强制到 1(完全不透明)
- Resolution Scaling 分辨率适配缩放策略
Resolution Scaling Mode 分辨率缩放模式; 将缩放设置为等于或低于本机屏幕分辨率:
Disabled:不使用缩放策略,游戏画面会被渲染到本地的屏幕分辨率
Fixed DPI:FixedDPI 允许你在它的原生分辨率下缩放设备的屏幕分辨率;优化性能和电池寿命或固定一个特定的 DPI 设置;
Target DPI:Fixed DPI 特有的选项;设置游戏屏幕的目标 DPI,有效范围是[30~1000]。如果设备的原生屏幕 DPI 高于这个值,游戏屏幕就会缩小,以匹配这个设置。DPI:表示 每英寸点数(dots per inch) - Blit Type 在渲染到屏幕时,Unity 使用的技术位块传输技术;Blit 表示将一块图像复制到另外一块区域的技术
Always:Unity 将使用 兼容性最好的方式来进行处理
Never :让 Unity 使用最快的方式传输
Auto :Unity 自动选择
Support Aspect Ratio 支持宽屏设备
Aspect Ratio Mode 宽屏模式
Legacy Wide Screen(1.86) :历史遗留的宽高比 1.86
Super Wide Screen(2.1) :优秀的宽高比 2.1
Custom: 自定义,最小为 1.86 [1.86 ~ 无穷大] - Orientation 游戏的方向判断
Default Orientation*设置应用的默认方向
Portrait 竖屏游戏,Home 键在下面
Portrait Upside Down 竖屏,Home 键在上面
Landscape Left 横屏模式,Home 键在右边
Landscape right 横屏模式,Home 键在左边
Auto Rotation 自动旋转,不控制 - Allowed Orientations for Auto Rotation 只有设置为了 Auto Rotation 自动旋转后才有这个选项:支持多选
Portrait: 竖屏
Portrait Upside Down: 竖屏,Home 键在上面
Landscape Right :横屏模式,Home 键在右边
Landscape Left: 横屏模式,Home 键在右边
注意通常的组合为 设置为 自动旋转 + 横屏模式,Home 键在右边 + 横屏模式,Home 键在左边
这样就可以支持 2 种模式的横屏了 - Use 32-bit Display Buffer 使用 32 位显示缓冲器;指定是否创建"显示缓冲区"来保存 32 位颜色值(默认情况下是 16 位)。在游戏有条带化或者在后期处理效果中需要 alpha,就可以使用它,因为它们以与"显示缓冲区"相同的格式创建呈现纹理。如果有些老旧安卓机型出现了重影的现象,则要考虑是否关闭这个选项。
- Disable Depth and Stencil 是否禁用深度缓存和模板缓存,这个选项默认是不禁用,如果 shader 中没用到深度和模板缓存,禁用这个选项可以减少 GPU/CPU 的一些工作量,节省一点点内存,或 2D 游戏,并且不包含MASK 遮罩,也可以禁用这个选项。 注意: 勾选之后将影响 UGUI 中的 mask 的效果
- Show Loading Indicator 显示加载条
Don’t Show: 不显示
Large :大的进度条
Inversed Large: 大的反向进度条
Small: 小的进度条
Inversed Small.: 小的反向进度条
Shared setting between multiple platforms 打了星号的表示可以在多个平台共享
2、ICON图标、Splash Image同PC
3、Other Settings其他设置
- Rendering 渲染
- Color Space 色彩空间 用于渲染的色彩空间
Gamma 伽马空间渲染 伽马空间高光的更亮,衰减范围更大。这些都将导致缺乏真实性的渲染结果
Linear 线性渲染 线性空间的使用是获得画面沉浸感和真实性上的重要一环 - Auto Graphics API 优先选择 OPenGL3,如果失败将尝试 2.0,Vulkan,如果不自动可以手动添加特定版本的 api,改变查找的顺
序----------注意:如果 GLES2 没有勾选,则我们需要在 AndroidManifest.xml 中手动的增加 GLES3/GLES3.1/AEP并最小 API 要设置到 API18 或更高,只有这样我们的游戏 App 才 不会在 Google 的 PlayStore 商城中显示为不支持的情况 - Multithreaded Rendering 是否启动多线程渲染,改善性能
Static Batching 静态批处理,编译时设置使用静态批处理(在 Web 中默认无效)
Dynamic Batching 动态批处理,编译时设置使用动态批处理(默认激活)
GPU Skinning 是否打开 OpenES3 GPU Skinning; 如同一种角色在同屏里面出现一大堆时,可以大幅度的降低
DrawCall,提高游戏性能 - Graphics Jobs (Experimental)* 图形作业 极大的渲染性能提升,充分利用多核 CPU 进行渲染,但这个一个“试验性能的”功能
所以它可能不会为您的项目带来性能改进,并且可能会带来新的崩溃。仅仅支持 Vulkan 和 OpenGL ES 没有特效的情况-----所以局限性还是比较大的,所以不推荐使用
Protect Graphics Memory 保护图形内存,默认不勾选;只会在玩家的机型支持的时候才工作----所以暂时也不建议打开这个选项 - Identification 标识符
Package Name 类型 com.Company.ProductName 风格的包名称,唯一的标识 app 游戏应用,这个选项是 iOS 和Android 公用的(注意:这里必须修改,不可以使用默认的,否则会导致编译失败)
Version 显示在商城中的版本号,玩家看到的版本号 4.3.2.1 可以用点号多段区分
Bundle Version Code 内部管理的版本号,必须是正整数 如 55
Minimum API Level 最小运行的 API 版本,如设置为 18,则只有用户的手机系统版本大于或等于 18 才可以安装,否则不能安装我们的程序(如一些老旧手机的版本号为 10,则不能安装我们发布的游戏)但是不是设置的越小越好,因为有些低版本的老旧手机对应游戏的新特性是不支持的,所以可以跟进当前安卓版本号的分布情况选择具体可以查看 https://developer.android.com/about/dashboards/ (需要翻墙)网站看系统版本的分布百分百情况,最小只有设置为 19 (Android4.4) 或更高版本 - Target API Level 对应 AndroidManifest.xml 中的 Target 版本,一般设置为自动即可 Automatic
- Configuration 打包配置
- Scripting Runtime Version* 切换 C#语言的运行时版本解析库(切换会导致自动重启 Unity)
Stable(.Net 3.5 Equivalent) 稳定版本的.net 3.5
Experimental(.Net 4.6 Equivalent) 试验性的 .net 4.6 版本 - Scripting Backend----- Mono(默认)或 IL2CPP Mono 是一个开源,跨平台的 C#语言运行库IL2CPP 是把 IL 中间语言转换成 CPP 文件,提高程序的运行效率有了1.5-2.0 倍的提升。
- API Compatiblity Level* API 兼容性级别
.Net 2.0 .Net 2.0 库。 最大.net 兼容性, 文件大小最大(相比于 Subnet)。
.Net 2.0 Subset 完整的子集 .net 兼容性,较小的文件大小。
.Net 4.6 Unity2017 才支持的.net 4.6,支持 C# 6.0 版本的语法特性 (切换会导致自动重启 Unity) - Mute Other AudioSources* 是否停止其他 App 的声音
- Disable HW Statistics* 是否向 Unity 官方发送玩家的用户统计(用于帮助 Unity 完善 Unity 开发工具用的,可以选择性的关闭)
- Device Filter 特定 CPU 架构的选择; FAT ARMv7 + x86 同时支持 ARM 架构和 X86 架构;或只支持其中一个建议只支持 ARMV7 即可,因为安卓设备主流的 CPU 是 arm 架构的,X86 是因特尔公司的,不主流,X86 在台式机和笔记本上居多,手机和平板上不多
- Install Location 指定安装位置;Automatic 自动; Prefer External : 尝试安装到额外的空间,如手机的 SD 卡上,如果操作系统不支持,将被自动的安装到了内部存储空间
Force Internal :强制安装到内部存储空间,用户将不能移动到外部存储空间了
建议大家优先安装到内部存储空间中,外部可能给用户拔掉 SD 卡,TF 卡 - Internet Access 网络访问权限,最终会写到 Android manifest 文件中
- Write Access 写外部存储器的权限,最终会写到 Android manifest 文件中
- Filter Touches When Obscured 当被其他 App 遮挡的时候,如来了个短信,有些手机会覆盖在 App 的最上面,这里是否劫持触摸消息,勾选之后可以控制在事件流过程中,突然弹出窗口后,后续事件流是否还能继续处理
- Low Accuracy Location GPS,WIFI 低精度定位相关的权限控制,如果脚本中使用了定位 API,则ACCESS_FINE_LOCATION 高精度权限会自动添加到 AndroidManifest.xml 中勾选这个选项之后,ACCESS_COARSE_LOCATION 权限会代替上面的权限,但是请确保 LocationService.Start()配合 低精度的值设置
- Android TV Compatibility 兼容 AndroidTV 模式,不常用,除非针对现在的安卓电视定制的游戏
- Android Game 安卓电视中作为游戏,不是普通的 App
- Android Gamepad Support Level 安卓电视中的游戏手柄的设置D-Pad(方向键,十字那个), 支持游戏手柄 和 需要游戏手柄
- Scripting Define Symboles* 预先定义一些预编译 的宏(PC端已讲)
- Stripping Level* 剥离代码的级别 可选剥离脚本功能,来减少构建游戏大小(此设置与 iOS 和 Andriod 平台共享),只支持 Mono 脚本后端(看上面刚刚讲过的)
- Disabled 关闭剥离功能
Strip Assemblies 级别 1 剥离功能
Strip ByteCode (iOS only) 级别 2(包括了级别 1)仅仅支持 IOS
Use micro mscorlib 级别 3(包括了级别 2 和级别 1 的精简剥离功能) - Strip Engine Code 剥离引擎代码的选项,可以有效的精简未用到的功能,如未使用音频,则自动剥离了音频方面的相关API,有效的降低了包体的大小,只支持 IL2CPP 脚本后端(看上面刚刚讲过的)
- Enable Internal profiler 打开内部的性能测试功能,我们可以使用 adb logcat 命令查看输出,仅支持 Debug 开发版本此功能已经被废弃,对应的 API 是 UnityEngine.Profiler::Profiler
4、Publishing Settings 发布设置
证书创建方法1:可以使用AS(Android Studio)创建证书
Build–>Generate Signed APK–>New key Store
点击OK–》弹出下面界面后点击Cancel取消,就可以在保存的目录下找到该证书
证书创建方法 2:用 Unity 创建
- Keystore 签名证书,打包安卓的程序 APK,最后一步是需要进行签名的,有 2 种,调试 Debug 版本和正式 Release 版本证书可以这里创建或通过 JAVA 的命令创建,或者通过 AndroidStudio 创建
- Use Existing Keystore / Create New Keystore :使用一个已经存在的证书或这里创建一个都可以,建议使用 AS 创建证书,不要在这里创建证书
Keystore password 签名证书的密码
Confirm password 如果是用 Unity 创建密码,则这里需要确认密码,再次输入一次
Key 密码的别名和密码
Alias 证书的别名
Password 别名的密码 - Build 构建系统,Gradle 模板和混淆文件
Build System: 使用 Gradle 构建系统或 Internal Unity 内置的打包系统,建议使用 Gradle
Custom Gradle Template 自定义 Gradle 模板,创建 Assets\Plugins\Android\mainTemplate.gradle User Proguard File 自定义的混淆文件 Assets\Plugins\Android\proguard-user.txt, 由于 Java 代码的安全性比较差,可以反编译得到源码,所以这里通过混淆,如将变量替换为 a,b,c 等不容易理解的变量名称 - Minify 混淆设置,Release 和 Debug 分别设置;不需要混淆打包就设置 minifyenable None Release None 无; Proguard 混淆器;Gradle(试验性)
Debug None 无; Proguard 混淆器;Gradle(试验性) - Split Application Binary 拆分 APK 为 apk + obb 文件,只有提交到 Google Play 的程序且 APK 超过了 100MB 才需要打开这个选项,否则不需要打开这个选项因为国内的如 360,小米 App 市场,华为市场等没有 apk 的大小限制,国内市场不用理会
5、XR Settings VR和AR的设置
略
四、Android Studio使用简述以及报错总结
打包apk可以使用android Studio工具,方法
- 基本的Company Name、Product Name这些要进行修改
- Player Settings–》Publishing Settings–》Minify–》Release改为Gradle方式
- Build Settings界面选择Build System–》Gradle,Export Project勾选上
- Export,复制好导出路径,然后在AS中,打开路径下的项目
- 第一次打包该版本Unity,可能会让你下载资源,点击同意
- 下载完,打开工程,先打一个Debug包看看会不会报错(Bulid–》Build APK)
- 有报错结局报错,没有的话,打包成功,也可以选择打包带有签名的包
- Build–》Generate Signed APK,选择签名,填写密码,下一步
- 选择Build Type(release or debug),选择Signature Versions 点击finish完成。
- 报错总结
- Unsupported Modules Detected: Compilation is not supported for following modules 如果编译过程中出现错误提示提示
Unsupported Modules Detected: Compilation is not supported for following modules 代码重构编译都不行,studio 重启
也不行
解决方法: File -> Invalidate Caches / Restart -> Invalidate Caches & Restart - Could not find com.android.tools.lint:lint-gradle:26.1.4. 如果在导出 Release 版本的工程时,Debug 可以正常编译,Release 则编译不通过,可以自行修改 build.gradle 文件;找到
allprojects 添加 2 行代码,重新编译签名 APK
jcenter() //要加这行
google() //要加这行