最近接了一个直播的SDK,准备集成现有的项目里面,由于之前的项目在Android打包时用的是Gradle,而直播SDK要求使用Internal,因此遇到了不少的坑,下面就让我分别罗列出来:
坑1:IOException: Win32 IO returned ERROR_BROKEN_PIPE
关于这个网上有不少的解决办法,我的操作是这样,升级JDK到64位就行了。网上有人说把项目移到C盘,我试了发现没用。也有人说删除Assets\Plugins\Android 下的带support字样的谷歌服务,这个方法我试过了,删掉后重新编译时有生成出来了,后面干脆不理会它。
坑2:Trying to merge incompatible
这个简单来说就是AndroidManifest.xml之间不兼容。unity这边在打包时会把所有AndroidManifest融合一起,而在融合时出现异常而报错。常见的异常有两种:
1.一些元素定义了两次(例如:在2个不同的AndroidManifest.xml文件中)
2.并且它以某种方式以不同方式定义,因此合并不知道如何将其合并到单个条目中。
解决办法:先找出所有的XML,在Plugins\Android里面。有的藏在aar文件里,有的子文件夹下,还有的jar下。用压缩包方式就可以打开aar和jar了。
我这边项目就是因为com.google.firebase.firebase-iid-17.0.4.aar和com.google.firebase.firebase-measurement-connector-impl-17.0.2.aar的XML共同定义了com.google.firebase.components.ComponentDiscoveryService这么一个服务。我不清楚这个用来干嘛的,删掉了一个就是了。
坑3:Make sure you use the same case for your package names
这个超逗,同样是因为AndroidManifest.xml的问题。前同事编写XML时,竟然分不清包名的大小写,导致Untiy报错。在翻遍文件夹后发现其中一个XML散发出一股诡异的光芒,于是就把它揪出来了,真不知道之前使用gradle方式是怎么编译通过的,神奇的Unity。。。。