androidstudio导出jar包到unity详解与常见问题

大家好,本人刚刚开始写博客,还有很多不懂,今天写的是我将AndroidStudio项目导入Unity的步骤和遇到的一些问题,遇到的那几个问题有些是自己理解的,可能有错误,如果有人发现了,希望能指出来,谢谢大家。

这里我先写下我遇到的一些问题和解决方法,然后再写将AndroidStudio的步骤。

遇到的问题:

问题1:classes.jar目录在哪

Jar目录:unity的安装路径:\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下的classes.jar 

问题2:出现如下错误

看上图,没找到AppCompat这个style,将其删除掉即可。

扫描二维码关注公众号,回复: 2684633 查看本文章

---------------但不确定为什么找不到这个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中运行可以看到以下的日志:

权限如下:

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.CAMERA" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

正文

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中并没有这个东西,具体原因不知道为什么。

<application

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

>

<activity android:name=".MainActivity"

android:label="@string/app_name"

android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

<meta-data android:name="unityplayer.UnityActivity" android:value="true" />

</activity>

</application>

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必须一致否则会报错)。

--------------------------运行收工

猜你喜欢

转载自blog.csdn.net/Happy_zailing/article/details/81563193