解决因第三方sdk,unity打包出来的apk在android 5.0以下矢量图兼容问题的崩溃
android一直以来,对往下低版本的兼容做的就不好,而且工具流没事还总变,搞起来真的是让人秃头
android 5.0 以后开始能使用矢量图功能了,也就是Android Vector,但是5.0以下没这个功能呀,所以你在编译的时候,需要增加一个编译参数和静态声明来兼容这个问题。
一般这个步骤是在 android studio 下面完成的,对于开发纯粹的 android 项目来说,没什么难度,都有比较完善的解决方案。
举例:
https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88
https://blog.****.net/u010335298/article/details/51840805
随便找找就有,但是在unity里这个问题可能就比较复杂了。
首先我们就要更改unity的BuildSystem,因为只有这样,我们才能像android studio 一样,使用gradle进行编译。
这一步还是比较简单的
在playsetting里可以直接进行切换,还有一定要选上 Gradle Template,有了这个模板,我们才能加上我们的编译指令。
打开模板,根据上面的文章+入我们的指令,有一点需要注意。
这个标签如果让unity自动生成的话,它会将StreamingAssets下我们所有的资源都给+上来,这对于本地资源多的工程可能是个灾难,因为这个地方看gradle源码,是有长度限制的,参数不能超过255个,但是好在这里是可以用后缀名进行过滤的,所以我们可以不依赖unity,而对这里进行手工编辑。
以上方法就可以应对大部分的第三方sdk导入了,但是偏偏就有一些一般手段应对不了的sdk存在,就比如说我需要接入的 helpshift。
了解这个东西的同学肯定知道,它提供的sdk一般是这种样子的
这种东西,在unity的Internal模式下没问题,是可以直接编译的,但是换到 gradle下就不行了,如果是正常的android studio下没有问题,但是unity下,helpshift的这个android子工程,是引用不到主工程底下的支持库的包的,而且现在android支持库的包都打包成了aar,这个东西不像以前的jar可以用路径引用(所以有时候纯自动的东西也有它不好的地方)。
所以如果我们想让gradle编译通过,首先第一步就是,将helpshift的这个文件夹,打包成aar的存在,幸好官方提供了一个python写的插件工具
地址:
https://developers.helpshift.com/unity/troubleshooting-android/
最后我们将需要的支持库,放进工程里就ok了,26版本之后的支持库,将不会下载到本机的android sdk目录下了,只能是通过联网获得。这里提供个网站,你可以在上面下载到自己需要的aar库。
注意:helpshift 打包成 aar 之后,就只能用 gradle 模式进行打包了,Internal模式就彻底废了,因为它的aar中没有class.jar文件,所以Internal是无法通过的(没打成aar时它也没有那个jar包)