Unity3D与安卓交互产生问题情况与解决方案汇总

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wolf96/article/details/75003970

1.打包安装后开始运行闪退

Androidmanifest.xml文件有问题,有些时候不用SDK可能不会用到这个xml,删了就行


其中看了以下几个文章,也摘取过来

http://blog.csdn.net/crazyapp/article/details/54692325

unity接入第三方SDK时,不同的平台可能遇到的问题不同,在使用untiy发布apk时你可能会遇到,你发布的apk能正常安装,但是一点击运行就立即闪退。我的解决方法就是:

查看Android配置文件和unity->Player Settings中的一些设置。

      1.查看配置文件AndroidManifest.xml中是否设置了屏幕方向:例如:  android:screenOrientation="portrait"  设置竖屏。如果设置了那么你要再看看unity中设置旋转屏幕方向是否和配置文件中设置的保持一致。这个设置必须要和unity里面的设置保持一致的,我就是这个问题没设置好导致导出apk一启动就闪退。

      2.还有一点可能需要注意的是:别忘了在配置文件中加上这样一句话:android:configChanges="orientation|screenSize|keyboardHidden"。


http://blog.csdn.net/neuwyt/article/details/52327262

接入SDK的方式是新建Android项目,写自己的Activity继承自UnityPlayerActivity类,在其中添加用于沟通SDK的接口,然后配置AndroidManifest.xml文件,打包后倒入Unity。(详细过程请自己搜索Unity3D android SDK)。

这样做法的原理是,通过配置AndroidManifest,我们用我们自己创建的UnityPlayerActivity子类,代替了直接在Unity生成Android应用时生成的UnityPlayerActivity。因为我们的类继承了UnityPlayerActivity,所以类中除了具有我们附加的沟通SDK的方法之外,用于支持Unity启动和运行的功能依然存在。

在教程中,有一步是将Android项目中的AndroidManifest.xml拷贝到Unity中。

这一步是有问题的!

我们在AndroidManifest.xml中,只是添加了负责启动和开始运行游戏的UnityPlayerActivity子类。

这会导致我们直接打包出的游戏,在进入游戏,弹出unity3d图标(如果使用的是免费版Unity)后,自动退出。

在Log中只能看见 onDestroy这样的内容,没有任何出错警告信息。

解决方法:

在添加SDK之前,将Unity项目导出Google Android Project。然后查看导出的AndroidManifest.xml。

你发现除了用于启动的<activity></activity>,还有一个叫做 UnityVideoPlayer的Activity。

只需要把这个activity的配置复制粘贴到我们的项目中,便可以解决闪退的问题。

(最好将我们自己写的AndroidManifest.xml加上导出AndroidManifest.xml中关于权限、应用theme的配置语句)


还有知乎中胡有成的回答

https://www.zhihu.com/question/36016675/answer/65972738

我们到Eclipse生成的classes目录(bin\classes)中看一下,发现除了我们自己的 MainActivity 的class,Eclipse还附赠了 BuildConfig和 R 相关的class文件,回忆我们之前是用下面的命令将所有classes打包的,那么错误的原因的很好解释了:Unity打包时会帮我们生成R相关的classes,而这个过程会和Eclipse生成的classes文件相冲突。
“万恶”的打包jar命令: jar -cvf test.jar *
问题到了这里就很好解决了,如果要使用jar命令打包,需要删除 BuildConfig 和 R相关的classes再进行打包。其实通过下面的两种方式可以绕过这个问题:
  1. 用Eclipse导出jar文件。具体操作是:右键 -> Export -> Java/JAR file -> 勾选src下面的包全部导出jar。这种方法不会导出多余的文件,编译不会就不会报错了,这是推荐方式。
  2. 在Eclipse里面改包名为不和包名相同的任意值,例如com.never.mind。这种方法的话Eclipse会将多余的文件生成到com/never/mind目录下面,因为不和最终的包名相同,所以用jar命令打包不会导致冲突。
正确导出的应该的是右边的这个jar:


 2.Unity3d 打包时报错 CommandInvokationFailure: Unable to convert classes into dex format. See the Console for details.


报错CommandInvokationFailure: Unable to convert classes into dex format. See the Console for details. 因为出现了重复的class ,于是把在libs里面的class.jar干掉后发布正常。






猜你喜欢

转载自blog.csdn.net/wolf96/article/details/75003970