一、版本选择

本篇教程选用的是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。

android sdk 支持 版本 android sdk版本选择_unity3d

三、安卓平台的设置(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

android sdk 支持 版本 android sdk版本选择_unity3d_02


点击OK–》弹出下面界面后点击Cancel取消,就可以在保存的目录下找到该证书

android sdk 支持 版本 android sdk版本选择_android sdk 支持 版本_03


证书创建方法 2:用 Unity 创建

android sdk 支持 版本 android sdk版本选择_Android_04

  • 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工具,方法

  1. 基本的Company Name、Product Name这些要进行修改
  2. Player Settings–》Publishing Settings–》Minify–》Release改为Gradle方式
  3. Build Settings界面选择Build System–》Gradle,Export Project勾选上
  4. Export,复制好导出路径,然后在AS中,打开路径下的项目
  5. 第一次打包该版本Unity,可能会让你下载资源,点击同意
  6. 下载完,打开工程,先打一个Debug包看看会不会报错(Bulid–》Build APK)
  7. 有报错结局报错,没有的话,打包成功,也可以选择打包带有签名的包
  8. Build–》Generate Signed APK,选择签名,填写密码,下一步
  9. 选择Build Type(release or debug),选择Signature Versions 点击finish完成。
  • 报错总结
  1. 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
  2. Could not find com.android.tools.lint:lint-gradle:26.1.4. 如果在导出 Release 版本的工程时,Debug 可以正常编译,Release 则编译不通过,可以自行修改 build.gradle 文件;找到
    allprojects 添加 2 行代码,重新编译签名 APK
    jcenter() //要加这行
    google() //要加这行