谷歌分包:
问题:一般带unity3D的应用都是大于100M的,所以不得已谷歌上架需要分包,即拆分为apk+obb的方式上传
当前集成方式:3D只是作为APP的一个功能点,unity3D资源文件是内嵌在APP中的asserts文件里的
解决问题过程:
先测试unit3D软件自动分包测试(第一种):测试unity3D直接打包成apk+obb,复制apk和obb到手机,安装后把obb放到合适的文件夹(如果没有包名文件夹需要自己创建),经测试可以完成场景的调用,OK!
后测试unity3D打成AS过程项目的方式测试(第二种):直接打成AS项目过程,包含完整的assets中的bin文件夹中的Data文件夹(我的根目录文件是550个文件及文件夹),起初的想法是直接把bin文件或者assets文件直接压缩成obb文件(这种一般比unity3D 打出来的包要打一半,可能是压缩软件的问题),经测试均无效!但是直接把bin文件嵌到APP中的assets下,直接运动过程是可以用的,不分包(当然还有其他的一些配置,这里不是重点就不详细描述了)
补充:由以上2中方式做出的测试结果,我继续尝试将第一张的apk和obb文件解压,一睹成功的奥妙是什么?
我们先分析一下第一种下的文件:
1、发现apk包含:如下图
2、androidmanifest.xml中有一个unity.build-id,这个value有大用途(下面会阐述),先在这里记录一下
<meta-data
android:name="unity.build-id"
android:value="775ba065-784d-428e-a8c2-95b90ed12249" />
3、发现assets——bin——Data文件夹内容如下:文件及文件夹合计数量9个
4、发现obb包含:bin文件夹+一个0K文件,这个ok文件就关键了,发现和androidmanifest中的unity.build.id是同样的值
bin——Data下的文件总量是541个
5、 再分析一下第二种直接过程运行可以运行,但是分包不可以的文件录目录:
重点:assets——bin——Data下的文件总量是550,也就是说完成工程的中的Data文件经过apk和obb分包的方式被分成了2部分,apk中的9个文件+obb中的541个文件
初步诊断结果:分包成功的重要因素有2个:1个是Data文件要分散到apk和obb中,另外一个是androidmanifest重的unity.build.id和obb这的0kb文件名要一样
unity3D打包成AS过程和obb文件(最终解决方案):
选择用gradle来构建工程和obb,在unity3D打包的时几个点要注意:
a、Build System选择gradle
b、使用签名文件:要用keyStore,不可讲jks直接重命名(jks转为p12再转为keystore),此处的keystore要和APP打包用的签名是一样的
c、设置vercode和version为AS项目中的参数一样值
d、勾选arm64(打包后生成arm64-v8a文件夹)、armeabi(打包后生成为armeabi-v7a),后面为了减少谷歌上传必须64位的问题
最后查看一下生成的文件目录:包含AS工厂目录+一个obb文件
至此unity3D打包部分已经结束,下面开始和原始android项目融合集成:
1、复制unity3D打包出来的assets中的bin文件夹复制到android项目中的assets中
2、复制so文件到JNILibs中
3、复制unity3D中androidmanifest中的unity.build.id中的值到android项目中的unity.build.id的值
4、修改build.gradle,增加v8a和v7a:
ndk { abiFilters 'arm64-v8a',"armeabi-v7a" }
和
splits { abi { enable true reset() include 'arm64-v8a',"armeabi-v7a" universalApk true } }
到此融合结束,下面开始测试:
复制apk和重命名后的obb文件到手机内部进行测试(放到合适的文件夹不是重点,不知者自行百度),结果肯定是柳暗花明啦。
obb拷贝到Android设备的“/android/obb/com. XX.XX.XX”路径下.
饿了,准备用膳!