大家好,本人刚刚开始写博客,还有很多不懂,今天写的是我将AndroidStudio项目导入Unity的步骤和遇到的一些问题,遇到的那几个问题有些是自己理解的,可能有错误,如果有人发现了,希望能指出来,谢谢大家。
这里我先写下我遇到的一些问题和解决方法,然后再写将AndroidStudio的步骤。
遇到的问题:
问题1:classes.jar目录在哪
Jar目录:unity的安装路径:\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下的classes.jar
问题2:出现如下错误
看上图,没找到AppCompat这个style,将其删除掉即可。
---------------但不确定为什么找不到这个style,我猜想可能是没有AppCompat这个jar包的原因,因为其依赖不是通过jar包的形式放进项目的,而是远程下载的,而Unity只识别jar包。但我自己还没去尝试,不知道是不是这个原因。
问题3:在Unity返回到Android的方法中为什么无法操作主线程的UI?
答:Unity返回来的那个方法是在一个线程中,所以可以使用Handler到主线程中然后进行操作。参考: http://www.cnblogs.com/wufeng0927/p/5188866.html
问题4:Android中依赖了compile files('libs/okhttputils-2_6_2.jar')这个包,但为什么在Unity中确报没有这个包的错误?错误提示:java.lang.NoClassDefFoundError和java.lang.NoClassDefFoundError
答: 参考异常汇总第一条。
虽然直接依赖了这个包,但在lib中确没有这个包,虽然在Android中是允许的,但在Unity中必须要Lib到这个包,否则会找不到。
1、在工程下新建lib文件夹,将需要的第三方包拷贝进来。
2、将引用的第三方包,添加进工作的build path。选中jar包->Build Path
3、(关键的一步)将lib设为源文件夹。如果不设置,则程序编译可以通过,但运行的时候,会报:选中lib文件夹->source code
java.lang.NoClassDefFoundError
问题5:为什么Android导入unity后,利用Intent跳转Activity确找不到这个Activity,报了ava.lang.NoClassDefFoundError和java.lang.NoClassDefFoundError这两个错误?
答:参考:http://www.cnblogs.com/bicker/p/4071230.html,我跳转的Activity继承自AppCompatActivity,因为继承的类并不是jar包,而是Android直接依赖的,而Android导入Unity后,只编译了Lib下的jar包,而不编译Android中的依赖,所以如果要使用AppCompatActivity则需去下载相应的jar包。
问题6:Android导入unity后,为什么我build出来的APK是两个APK?
答:因为Unity的包名和Android项目的包名不同。
问题7:我一开始使用了高通AR摄像头,然后将Android的项目导入到unity中,此时,我将Plugins->Android中高通的Manifest删掉了然后将Android项目的Manifest和aar导入了进来,然后在Android上运行,运行后一直报了Vuforia初始化失败的错误,如图:
报这个错的原因是你Android的配置清单没有打开Camera的权限,因此将打开ARCamera的权限导入进去即可,如果你在AndroidStudio中运行可以看到以下的日志:
权限如下:
正文
a.AS工程导入classes.jar包
Jar目录:unity的安装路径:\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下的classes.jar
b.修改MainActivity继承自UnityPlayerActivity,并注释掉setContentView()(如果不注释掉,则运行Unity时显示不了Unity的东西)
注:如果不注释setContentView(),你也可以直接使用layout.addView()的方式将Unity布局加到Android中
c.由于我们要让AS打包,供Unity使用,所以要修改Gradle,双击build.gradle
d.修改全出的地方:
application —>library
applicationId 这一行删掉
如图
e.由于打包后就不由Gradle来构建项目了,所以还要修改一下 AndroidManifest 和res文件夹 ,这里修改AndroidManifest,将application中的style属性给删掉,因为Unity中并没有这个东西,具体原因不知道为什么。
android:icon="@mipmap/ic_launcher" android:label="@string/app_name" > android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
f.点击Build->Build APK
构建好后会弹出提示,点击在文件夹中显示
找不到的可以在项目目录下找,以我为例:
E:\AndroidExample\ExportToUnity\app\build
然后进入outputs->aar文件夹,就有打包好的文件了,这个*.arr 是AS的打包文件。
g.以好压的方法打开这个xxx.aar,进入libs下删除掉其中的classes.jar。如果不删掉,当导入Unity后,会出现文件重复的错误。
删掉该jar包。
-------------------至此,AS的操作完成。
h.新建Unity,在Assets中新建Plugins->Android目录,并将xxx.arr和AS里的AndroidManifest放进去
i.新建一个小场景并保存
j.点击File –> Build Setting,选择Android,switch platform,点击Player Setting ,修改Bundle Identifier(包名建议与AndroidStudio包名一致,否则运行后会出现两个APK)和修改创建安卓项目时指定的最小API(API必须一致否则会报错)。
--------------------------运行收工