我的世界手机版扔东西里下的东西,我看了同时有.unity3d文件和.unity3d.manifest文件,前面的

我有个unity3d后缀的文件,怎么在iPad上打开? - 知乎3被浏览1160分享邀请回答01 条评论分享收藏感谢收起8831人阅读
Android(15)
【转载请注明出处】
作者:DrkCore ()
原文链接:()
近日因为工作的原因笔者开始接触Unity3D游戏引擎,该引擎的一大特色就是支持多种平台,其中自然不能少了我们Android。在Unity3D和Android Studio交互中其实有不少坑,不过踩坑向来是学习的一部分,在这里笔者和大家分享一下今天的踩坑经验。
一、 将项目作为lib导入Unity打包
Eclipse的时代说到打包那必然指的是JAR包,其缺点是res资源文件不好处理,而随着Android Studio一同到来的AAR包解决了这个问题。
将源码和资源文件一同打包等到实际编译的时候再解压,这些事情Build Tool都帮我们做了,这也是为什么Android Studio中我们只需一句话就能搞定依赖管理。在Unity3D工程中我们同样能够通过AAR来导入Android部分的逻辑。
基本的导出姿势以及与Unity3D之间的交互可以参照这位博主的博客:
博文介绍了如何导出AAR,但是在你真正将自己的项目移植的时候你仍然会遇到不少问题。如果你将自己的AAR包用压缩软件打开时就会发现Build Tool似乎将你整个Module都打包进去,唯独没有打包的就是你的依赖!
比如你在Android中使用了ToolBar,RecyclerView等由support-v7提供的控件,或者类似xUtils3的第三方框架等,这些东西都是不会被打包进你的AAR中。我们必须手动将这些依赖的AAR一同添加到Unity3D工程。
大部分的第三方库都会提供AAR包文件,实在没有也可以从GitHub上clone下来自己打包。Google官方提供的support库等都可以在SDK目录下的extras子目录中找到,比如support-v7的AAR在如下位置可以找到:
看到这里你以为就能顺利完成往Unity3D导入Android的工作吗?
Naive,这里还有两个坑你没跳呢!
如果你的SDK中存在版本为24的Build Tool的话会爆出错误:
具体原因可能是Build Tool的Bug。要解决的话很简单,就是把24的Build Tool藏起来:
到这里你应该能够顺利地将Unity3D工程顺利打包成APK。
这个时候如果你还觉得包的版本越高越好就会遇到第二个坑,这个坑在24号版本的support-v7包中。
报错截图如下:
compile ‘com.android.support:appcompat-v7:24.x.x’只是一句依赖但是其导入的包并不只有一个,如果你打开module的build\intermediates\exploded-aar目录去看的话就会发现其实他有4个包。报错中提到的VectorDrawableCompat就在其中:
然而这个时候就算你导入了这两个包问题依旧存在。
笔者猜测24的VectorDrawable包必须使用24的Build Tool来打包,而上面我们说过了24的Build Tool和Unity3D不太兼容。
解决方案很简单,就是使用23的support包。
笔者测试过使用23的support无需导入VerctorDrawable可以正常运行。
1、 使用Gradle脚本简化导包操作
踩过以上的这些坑之后想必大家都已经掌握了新姿势,但如果你像笔者一样是个懒惰的程序员的话就会觉得,每次编译都手动复制来复制去好麻烦啊,而通过Gradle的脚本我们可以分分钟解决这个问题。
以下是笔者写的脚本,当成伪代码来看的话相信有点经验的开发者都能看懂:
// 删除旧的aar
task deleteOldAar(type: Delete) {
//删除Unity工程下的Android资源
delete '你的Unity3D工程/Assets/Plugins/Android/lib-release.aar'
//由于AndroidManifest文件可以能有更新,一并删除
delete '你的Unity3D工程/Assets/Plugins/Android/AndroidManifest.xml'
//删除Android工程下的编译资源
delete 'build/intermediates/bundles/release/'
delete 'build/outputs/aar/lib-release.aar'
// 导出AndroidManifest.xml
task exportManifest(type: Copy) {
from('src/main/')
into('你的Unity3D工程/Assets/Plugins/Android/')
include('AndroidManifest.xml')
task exportAar(type: Copy) {
from('build/outputs/aar/')
into('你的Unity3D工程/Assets/Plugins/Android/')
include('lib-release.aar')
//添加任务依赖
exportAar.dependsOn(deleteOldAar, build, exportManifest)
二、 将Unity作为lib导入Android Studio
如果你实际将工程作为libs导出的Unity3D导出的话你会发现这种方法带有太多的限制了:
项目所在的Module必须为设为library
如果你的项目使用了比如xUtils中的基于注解和反射实现的视图注入框架的话,你就会发现将module设置为library后框架的视图注入功能就无法使用了,甚至连switch(view.getId())这样的代码都用不了。究其原因无论是注解还是switch语句其需要参数都必须是常量,而library的R.id.xxx要在打包成apk的时候才能确定,于是开发者就不得不写繁琐的findViewById了。
不方便管理依赖库
如果项目依赖了某些库那么在打包的时候要一并将这些库的jar/aar一并导入到Unity目录之中,升级依赖或者添加依赖全部都要手动进行。人为操作难免会出问题而Unity打包的速度也是慢的可以,每一次打包都像是在拷问着程序员一般。
如果反过来想,不是将工程导出而是将Unity作为lib导入到Android Studio的话这一切都将迎刃而解。
打开Unity的IDE,通过File-&Build Settings打开打包设置
选中Google Android Project并且签名(不签名无法导出工程,身为Android开发者我表示不解啊),导出后我们就会看到Eclipse项目结构的工程,如下:
assets存放的是编译后的Unity脚本等东西,这部分是导出部分的核心,日后如果要更新Unity的lib的话,只覆盖assets下的东西就够了。其他的部分相信大家都十分熟悉了,不再赘述。
我们将导出的东西作为library导入到Android Studio,build之后我们就能在module的输出目录下找到对应的AAR文件了:
之后我们就可以直接使用AAR文件进行开发了,是不是很方便。
1、 更新Unity的AAR
随着项目的不断研发Unity的部分总是需要更新的,如果导出一个AAR要重复上述的步骤的话那依然是很麻烦的。好在我们可以绕过Android Studio直接更新AAR文件。
如前文所说Unity导出工程的核心都在Assets目录下,而我们用压缩软件打开对应的AAR文件就会发现Assets下的内容只是被原封不动地打包进去了而已,所以我们完全可以用新导出的Unity工程中的Assets来替换AAR包下的东西。
三、 可能出现的其他问题
如果你出现了各种打包的异常,可以依次按照如下的点来检查:
是否选择了签名文件,并输入了正确的密码
如果你是使用Eclipse打包的话,检查存在多个unity提供的classes.jar
检查插件目录中及aar包中是否重复申明了组件
Android打包apk时会将多个lib的 AndroidManifest.xml 文件合并到一起,如果重复声明了组件并且声明的属性存在冲突就可能导致打包失败。
检查bin目录及aar包中是否存在重复的jar文件
常见于项目开发中改变了项目名,并且每次打包都是直接解压到插件目录的情况,因为名称不同所以不会覆盖旧的jar包。
检查资源是否存在重复的索引
比如同时存在 bg_main.png 和 bg_main.9.png 两个图片但二者的索引都是 R.drawable.bg_main。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:33571次
排名:千里之外
原创:18篇
评论:17条
(2)(1)(4)(2)(1)(3)(1)(1)(1)(2)有没大神帮我解惑一下,关于AssetBundle和Manifest?万分感谢【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:75,808贴子:
有没大神帮我解惑一下,关于AssetBundle和Manifest?万分感谢收藏
很早就关注了咱们吧,因为自身水平有限,所以虽然看帖多但是很少发帖以及回帖,有问题了也都是尽量百度不麻烦大家,但是这次真的是实在搞不懂了,还请吧里的大神帮我解惑。manifestPath是manifest文件的路径。WWW wwwManifest = (manifestPath, 0);//加载manifest文件
yield return wwwM//等待加载完成
AssetBundle manifestBundle = wwwManifest.assetB
AssetBundleManifest manifest = (AssetBundleManifest)manifestBundle.LoadAsset(&AssetBundleManifest&);第三行中的 wwwManifest.assetBundle,我看不懂是什么意思,wwwManifest不是一个AssetBundleManifes文件吗?它不是只包含一些资源包依赖信息和版本信息吗?为什么它会有.assetBundle属性?又为什么可以赋给AssetBundle的实例?另,第四行同样看不懂其含义。。。。。。将manifestBundle包里的AssetBundleManifest资源加载以后,为什么又可以转换成AssetBundleManifest类型并赋给manifest?还请大家帮忙。谢谢!
达内unity3d培训全程&实战教学&,unity3d金牌讲师授课.免费unity3d课程试听中!到达内unity3d学院学习unity3d,只需4个月速成unity3d游戏工程师.
OH FUCK,上面的代码好乱
首先第一行是通过WWW类型下载资源,这个时候只是一个网络资源,可以是Bundle或者图片、字节等任何类型,然后第三行用assetBundle属性把WWW资源的assetBundle提取出来,在这里这个资源就是assetBundle,并不是AssetBundleManifest。然后第四行用LoadAsset的方式把bundle内的AssetBundleManifest资源提取出来,这个时候才是真正的AssetBundleManifest。以上~
登录百度帐号推荐应用Unity3D与安卓交互产生问题情况与解决方案汇总 - wolf96的专栏 - CSDN博客
Unity3D与安卓交互产生问题情况与解决方案汇总
1.打包安装后开始运行闪退
Androidmanifest.xml文件有问题,有些时候不用SDK可能不会用到这个xml,删了就行
其中看了以下几个文章,也摘取过来
http://blog.csdn.net/crazyapp/article/details/
unity接入第三方SDK时,不同的平台可能遇到的问题不同,在使用untiy发布apk时你可能会遇到,你发布的apk能正常安装,但是一点击运行就立即闪退。我的解决方法就是:
查看配置文件和unity-&Player Settings中的一些设置。
& & & 1.查看配置文件AndroidManifest.xml中是否设置了屏幕方向:例如:& :screenOrientation=&portrait& &设置竖屏。如果设置了那么你要再看看unity中设置旋转屏幕方向是否和配置文件中设置的保持一致。这个设置必须要和unity里面的设置保持一致的,我就是这个问题没设置好导致导出apk一启动就闪退。
& & & 2.还有一点可能需要注意的是:别忘了在配置文件中加上这样一句话:android:configChanges=&orientation|screenSize|keyboardHidden&。
http://blog.csdn.net/neuwyt/article/details/
接入SDK的方式是新建Android项目,写自己的Activity继承自UnityPlayerActivity类,在其中添加用于沟通SDK的接口,然后配置AndroidManifest.xml文件,打包后倒入Unity。(详细过程请自己搜索
android SDK)。
这样做法的原理是,通过配置AndroidManifest,我们用我们自己创建的UnityPlayerActivity子类,代替了直接在Unity生成Android应用时生成的UnityPlayerActivity。因为我们的类继承了UnityPlayerActivity,所以类中除了具有我们附加的沟通SDK的方法之外,用于支持Unity启动和运行的功能依然存在。
在教程中,有一步是将Android项目中的AndroidManifest.xml拷贝到Unity中。
这一步是有问题的!
我们在AndroidManifest.xml中,只是添加了负责启动和开始运行游戏的UnityPlayerActivity子类。
这会导致我们直接打包出的游戏,在进入游戏,弹出图标(如果使用的是免费版Unity)后,自动退出。
在Log中只能看见 onDestroy这样的内容,没有任何出错警告信息。
解决方法:
在添加SDK之前,将Unity项目导出Google Android Project。然后查看导出的AndroidManifest.xml。
你发现除了用于启动的&activity&&/activity&,还有一个叫做 UnityVideoPlayer的Activity。
只需要把这个activity的配置复制粘贴到我们的项目中,便可以解决闪退的问题。
(最好将我们自己写的AndroidManifest.xml加上导出AndroidManifest.xml中关于权限、应用theme的配置语句)
还有知乎中胡有成的回答
/question//answer/
我们到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再进行打包。其实通过下面的两种方式可以绕过这个问题:
用Eclipse导出jar文件。具体操作是:右键 -& Export -& Java/JAR file -& 勾选src下面的包全部导出jar。这种方法不会导出多余的文件,编译不会就不会报错了,这是推荐方式。
在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干掉后发布正常。
我的热门文章

我要回帖

更多关于 我的世界手机咋刷东西 的文章

 

随机推荐