推荐阅读:
obb
OBB(Opaque Binary Blob)文件格式,是安卓游戏通用数据包。在一些大型游戏上较为常见,同时还附以Data文件,亦或是md5.dat文件出现。通常在游戏开始前,程序会自动将obb解包至/sdcard/Android/data或者是/android/obb目录下,但也有游戏不会解包,直接读取。
前言
游戏要上架谷歌商店 除了要接好谷歌SDK外,谷歌还要求提交商店的apk必须在100M以下,对于游戏来说几乎都会大于100M,所以提交商店apk拆分成基础apk(小于100M)+obb文件,两个文件一起上传GooglPlay,用户下载的时候会连同apk+obb一起下载到用户手机上,当然对于用户来说,完全感受不到区别的。
unity导出OBB
File --- Build Settings ---Android --- Player Settings --- Publishing Settings --- Split Application Binary
通过以上图片,我相信大多数人已经知道怎么创建了,apk签名比较简单,如果之前没有签名文件,那么选择图中的Create New Keystore然后在下面两个密码框中输入密码点击Browse Keystore创建一个.keystore文件,签名文件就创建完成了,只要build的时候,自然就会将你的apk签名了,那签名有什么用呢?作为一个开发过android的人,我算是了解一些的,以前到一些开发者平台上传安卓的apk发布的时候,经常会有提示安全性问题,比如360开发者平台,那么如果你想解决这个问题,你就得加固,就像360平台有提供一个加固网站,只要你签过名的apk上传到他的加固网站,然后下载下来,在使用同一个签名文件重新签名,那么你的apk在重新发布之后,在他的平台上面也就不会有安全问题警告了。
接下来选择Build System : Gradle 来构建AS工程和OBB文件
OBB出生啦
点击导出后,会生成如下类似的的文件目录。导出来的obb名字还是个孩子,我们需要为它取个合法的名字
【abb命名规则】: main.版本号.包名.obb
eg:main.1.demo.obb
一般来说,第一次提审版本号是1,第二次是2
Unity构建OBB工程和AS资源
这里面包含了google 相关的依赖资源和Unity交互代码,把Unity生成AS工程放入对应文件即可(箭头所示)。运行后生成apk即,正常情况下生成的基础apk是可以单独运行,因缺少obb资源包 游戏会卡在某个阶段,但并不会引起程序崩溃。
此时,不需要其他操作时,我们就可以打包了。但如果as工程中,我们又添加了sdk相关代码,那我们不可能每次重新重新添加sdk代码。因为往往 我们的项目会改动,会修改代码,修改资源,那这时我们改怎么办呢。其实,我们只需要重新使用unity导出obb,新导出的obb包含了我们修改的东西,我们需要做三件事:
1.替换obb,修改对应的版本号,如下图:
2.修改AndroidManifest.xml中的unity.build-id,改为为obb中对应的编码。
对于一个新手,不知道obb是啥,也不知如何找到它里面的编码,如下:我们复制obb,修改后缀为.zip
解压改复制obb,剋看到目录下有如下类似的命名文件,复制名字(id)
将复制的id粘贴到如下地方,替换原来的id
AS导出apk
接下来我们就可以导出apk了
没有密钥的(身份证)所以我们要去生成一个密钥,选择 Create new…
(注意:这里有两个“密钥的密码” 因为一个是密钥的密码,一个是key的密码,但是通常我们在设置的时候会选择设置同一个,这样方便我们记忆,所以这里都认为是密钥的密码。),但是我们现在上面的unity中,已经创建了密钥,可以直接使用它。
最后,我们打包出来一个apk的文件。
运行apk
先把apk安装到Android设备,注意obb文件改名为:
main.
并拷贝到Android设备的“/android/obb/<包名>/ ”路径下。
如在Unity3D编辑其中,你可以在工程设置的如图位置处,看到“Bundle Version Code”和包名(即“Bundle Identifier”).
以上面的ABC为例(假设其“Bundle Version Code”值为2,包名为“com.Demo.ABC”):
-
首先,在Android设备上安装ABC.apk;- 接着,将ABC.obb改名为“main.2.com.Demo.ABC.obb”;
-
然后,将文件“main.2.com.Demo.ABC.obb”拷贝到Android设备的“/android/obb/com. Demo.ABC/”路径下;
-
启动App,你会发现新安装的APP已经可以正常使用了。
设置转屏方式
这时,如果你设置的屏幕旋转方式和AndroidManifest.xml中screenOrientation不一样,如下:
我们可以在添加如下代码修改:
@Override
public void setRequestedOrientation(int requestedOrientation){
return;
}
每个人的工程不一样,脚本名也可能不一样,例如我这里是添加在Helper.java脚本中,如下