Unity3D安卓打包参数配置与兼容性的关系分析

http://www.gopedu.com/article/706

1.前言

       在使用Unity3D工程导出安卓安装包的时候,往往会遇到兼容性的问题,针对某些机型,要么无法打开游戏,要么会出现卡机的现象。面对这种情况,我们可以调节相关的参数来提高兼容性。

       为了了解在打包时候每个参数的含义,我们查找了Unity3D的官方文档。为了清楚每个参数所起的作用以及每个参数对兼容性的影响因素,我们有针对性的做了对比实验,然后在安卓云测试平台(http://www.testin.cn)测试兼容性,将最终结果进行比较,最后提出优化方案。

2.文档说明

功能介绍

       Unity4.5安卓打包参数配置主要讲述Unity4.5在进行安卓打包时遇到的一些参数,这些参数的详细解释,以及如何通过修改参数来提高游戏的兼容性。本文主要描述如何配置打包参数,供Unity4.5输出安卓包的工作人员使用。

阅读对象

        本文档面向了解Android,Unity3D客户端的开发人员。

3.配置参数详解

一.Rendering Path(This property is sharedbetween Standalone and WebPlayer content)

      渲染路径,这个属性一般在PC上或者网页上比较有用,一般有如下三个选项

       Vertex Lit(Lowest lighting fidelity, no shader support.Best used on old machines or limited mobile platforms)

      顶点光源模型。不支持shader,在一些旧的机器上或者受限制的机器上最好使用这个选项

       Forward(Good support for lighting features; limitedsupport for shadows)

      对光的特征支持的很好,但是对阴影支持的不好

       Deferred Lighting(Best support for lighting and shadowingfeatures, but requires certain level of hardware support. Best used if you havemany realtime lights. Unity Pro only)

       对光的特征和阴影支持的很好,前提是支持硬件加速,如果做实时渲染最好使用这个选项,只有pro版本支持。

二.Graphics Level(Select either ES 1.1 (‘fixed function’) or ES 2.0 (‘shader based’) Open GL level. Whenusing the AVD (emulator) only ES 1.x is supported.)

       图像等级。在OpenGLES 2.0(支持阴影)和3.0还有1.x(功能性)之间选择,当只用到模拟器的时候,只有ES1.x才支持。

      Automatic自动选择

      Force OpenGLES 2.0强制OpenGL ES2.0

      Force OpenGLES 3.0强制OpenGL ES3.0

 三.Install Location 安装路径。

      PreferExternal优先外部

      Automatic自动选择(一般都是自动选择,而且兼容性更好)

      ForceInternal强制安装在内部闪存中

 四.Write Access写入权限

      InternalOnly只能写在内部

      External(SDCard)
      写在外部SD卡中,对应安卓的写入权限:android.permission.WRITE_EXTERNAL_STORAGE

 五.Api Compatibility Level使用.Net的版本

      .Net 2.0Subset  .Net2.0的子集,占用较小的空间

      .Net 2.0  .Net2.0完全集合,占用较大的空间

 六.Stripping Level选择抽出的脚本功能来减少了包的大小(iOS和Android都可以选择)

      Disabled不减少功能

      StripAssemblies减少程序集合

      StripByteCode减少字节码

      Use micromscorlib使用迷你库,前两者都减少

 七.Optimize Mesh Data*

      对于材料没有必要的数据,可以移除的数据进行优化

 八,Multithreaded Rendering

      多线程渲染

 九.GPU Skinning*

      是否使用GPU着色

 十.Static Batching

      是否激活静态度量,默认是激活状态,只有pro版本有效。

十一.Dynamic Batching

      是否激活动态度量,默认是激活转台。

4.实验数据

实验方法

      该实验采取对照实验的方法。如果要考察单个参数对于兼容性的影响,必须得控制另外的参数不变。然后针对不同的配置参数打包,上传到云测试平台进行兼容性测试。

5.实验操作流程

对要进行测试的参数进行设计。

主要涉及到如下几个参数

      1. Graphics Level(GL)

      2. Install Location(IL)

      3. Api Compatibility Level(ACL)

      4. Stripping Level(SL)

      5. Optimize Mesh Data*(OMD)

      6. Multithreaded Rendering*(MR)

      7. GPU Skinning*(GK)

      8. Write Access(WA)

      9. Rendering Path(RP)

      10. Static Batching(SB)

      11. Dynamic Batching(DB)

设计对照组方案

序号GLILACLSLOMDMRGKWARPSBDB
12.0external2.0subsetdisablefalsefalsefalseInternal onlyForwardtruetrue
2autoexternal2.0subsetdisablefalsefalsefalseInternal onlyForwardtruetrue
33.0external2.0subsetdisablefalsefalsefalseInternal onlyForwardtruetrue
4autoauto2.0subsetdisablefalsefalsefalseInternal onlyForwardtruetrue
5autointernal2.0subsetdisablefalsefalsefalseInternal onlyForwardtruetrue
6autointernal2.0disablefalsefalsefalseInternal onlyForwardtruetrue
7autointernal2.0subsetAssembliesfalsefalsefalseInternal onlyForwardtruetrue
8autointernal2.0subsetByteCodefalsefalsefalseInternal onlyForwardtruetrue
9autointernal2.0subsetmscorlibfalsefalsefalseInternal onlyForwardtruetrue
10autointernal2.0subsetdisabletruefalsefalseInternal onlyForwardtruetrue
11autointernal2.0subsetdisabletruetruefalseInternal onlyForwardtruetrue
12autointernal2.0subsetdisabletruetruetrueInternal onlyForwardtruetrue
13autointernal2.0subsetdisabletruetruetrueSDCardForwardtruetrue
14autointernal2.0subsetdisabletruetruetrueInternal onlyVertexLittruetrue
15autointernal2.0subsetdisabletruetruetrueInternal onlyDefferred Ligtruetrue
16autointernal2.0subsetdisabletruetruetrueInternal onlyForwardfalsetrue
17autointernal2.0subsetdisabletruetruetrueInternal onlyForwardtruefalse

 
      针对每一个设计方案打包。

      将上述的17个方案进行打包分别命名为001-017.apk

      将打好的安装包进行兼容性测试。

      将这17个安装包上传给testin网站,进行兼容性测试

      得到测试结果后,得出每个参数的最优化配置。

  

正常

启动(s)CPU(%)内存(M)包体
序号通过率安装启动卸载平均值峰值平均值峰值平均值峰值 
00174.3087.3085.11000.9111.679.7010019.5266.758205
00266.3482.8080.11000.9513.099.4710017.8266.878205
00367.4482.7081.51000.9411.149.3510017.4665.638205
00470.2183.0084.61001.0312.428.8110017.3365.818205
00569.8683.3083.81001.0210.818.8210017.6166.888205
00673.9687.2084.91001.1012.189.0010019.0966.018972
00773.8187.1084.81001.0211.129.0110018.2565.197243
00880.2090.8088.31001.1411.279.1310019.8560.297243
00982.4390.9090.71001.1311.509.1310019.7960.467243
01079.6890.2088.41001.0410.939.4010021.2968.798205
01178.9389.0088.71001.0110.849.9610023.4177.068205
01278.5589.0088.31001.0011.2411.2410023.6877.048205
01387.7997.3090.21000.9210.7611.8010025.7672.278205
01488.7698.0090.61001.0211.1110.9010025.3675.578205
01592.7099.2094.51001.2311.2010.8410026.8771.958205
01693.1798.0095.11001.1511.7211.6110026.3472.018205
01788.0097.6090.21001.1110.9011.1710025.8771.968205

 

对照组信息表

序号参数对照组优化顺序
1Graphics Level001:002:003ES2.0 > ES3.0 > Automatic
2Install Location002:004:005Automatic > Force Internal > Prefer External
3Api Compatibility Level005:006.Net2.0 > .Net2.0 Subset
4Stripping Level005:007:008:009Use micro mscorlib > Strip ByteCode > Strip Assemblies > Disable
5Optimize Mesh Data*005:010True > false
6Multithreaded Rendering*010:011False > true
7GPU Skinning*011:012False > true
8Write Access012:013SDCard > Internal Only
9Rendering Path012:014:015Deferred Lighting > VertexLit > Forward
10Static Batching012:016False > true
11Dynamic Batching012:017False > true

      上表就是实验的最终结果,可以用来指导Unity3D的安卓打包。

      在unity打包的时候还有一个系统最低版本的适配问题,比如支持最低在安卓系统2.3.3上运行。

      为了考察支持最低安卓系统版本对于兼容性的影响。我也做了系统的对比实验。

序号最低版本目标版本
11014
21114
31214
41414

以下是测试结果:

 

  

正常

启动(s)CPU(%)内存(M)包体
序号通过率安装启动卸载平均值峰值平均值峰值平均值峰值 
188.1095.891.91000.9410.2914.9510022.3766.107363
289.7491.098.61001.094.3211.0810025.8165.697363
390.2492.198.01001.2811.3012.7510023.8865.757363
490.1292.098.01001.2310.7212.4110023.8466.077363

      由于现在的主流安卓系统的版本都比较高(都大于4.0 API level = 14),所以我们将目标版本设置为14。至于最低的版本,从数据上来看2.3.3(API level = 10)和4.0.0(API level = 14)差别不是很大。所以最低系统版本的选择对于兼容性的效果提升也不是那么明显。介于历史残留问题,现在使用2.3.3版本的人数还很多,故可以将系统最低版本设置为10。

      为了考察支持目标版(targetsdk level)本对于兼容性的影响,我也做了系统的对比实验。

序号最低版本目标版本
11010
21011
31012
41013
51014

以下是测试结果:

  

正常

启动(s)CPU(%)内存(M)包体
序号通过率安装启动卸载平均值峰值平均值峰值平均值峰值 
185.6295.887.41000.9010.6214.7010021.6065.607363
280.3791.081.91000.8610.4412.4010021.6275.637363
381.9392.184.01000.791.5812.9610024.1375.437363
487.2392.089.51000.9010.7014.6710021.4475.407363
588.1095.891.91000.9410.2914.9510022.3766.107363

 

      从上表的结果可以看出,通过率最高的是序号5,也就是min tarlevel = 10,target sdk level = 14,target level 11,12,13 是不推荐的版本(连谷歌都不推荐)。

      现在用户所用的版本大都是>4.0的,所以使用target level = 14是不错的选择。

      有很多的app在使用的时候需要系统资源,比如联网,比如GPS等等,那么这些都是怎么实现的呢?

      很简单只要使用android.provider.Settings这个类就可以了。

比如需要打开GPS操作:

1
2
Intent settingsIntent =newIntent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(settingsIntent);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值