项目接入了一个sdk,由于sdk需要添加新的权限,所以需要在AndroidManifest里添加相应的语句,由于是第一个需要修改AndroidManifest的sdk,项目里并没有对应的AndroidManifest文件,鉴于项目当前的配置,所以我先导出了一份eclipse工程,然后复制这份AndroidManifest到Plugin/Android目录下,添加好对应的权限后,重新打包运行,游戏直接闪退。
使用adb截取日志,发现是ClassNotFoundException错误,对比了路径,感觉每错,把修改后的AndroidManifest放到刚导出的eclipse工程下,打包apk,运行正常,奇怪了。
删除掉unity下的AndroidManifest文件,打包是ok的。将AndroidManifest文件放在eclipse下打包也是对的。可以确定的是AndroidManifest放置的路径没问题。
简单搜索了一下,并没有发现有好的解决方案。
官方sdk demo示例也有同样的问题。。。
虽然官方demo有问题,但是感觉这个问题还是可以解决的,关键是AndroidManifest这个文件,根据报错进行了一些修改,可以肯定的是问题就出在一个字符串上 android:name=”com.demo.sample.UnityPlayerActivity”,demo和sample对应的是companyName和ProductName,在导出的eclipse工程里面这个包名和文件名是正确的,然后我试着改成android:name=”UnityPlayerActivity”,重新打包后发现报错是一样的,意味着会自动进行字符串的填充,将包名加上去。
搜了下Unity AndroidManifest,看到了官方文档,认真读了下, https://docs.unity3d.com/Manual/android-manifest.html,看下没有AndroidManifest时会是什么一个字符串呢?删掉AndroidManifest文件,重新打包,找到AndroidManifest打包后的AndroidManifest文件,发现字符串为android:name=”com.unity3d.player.UnityPlayerActivity”,试着进行修改,打包运行,成功解决问题。
如果有遇到这个问题的朋友,可以试着按这个方法操作一下,当然如果你自己做了将android代码修改并做成unity插件的话,这个值应该是前面提到的字符串,因为这时候有对应的jar包了,关于如何将android插件做成unity插件,可以参考我以前的文章。