unity3d安卓打包失败_unity3d 安卓打包 - CSDN
  • Gradle 模式打包 打包失败 


    Gradle 模式打包 打包失败 

    展开全文
  • 【转载请注明出处】 作者:DrkCore (http://blog.csdn.net/DrkCore)... 近日因为工作的原因笔者开始接触Unity3D游戏引擎,该引擎的一大特色就是支持多种平台,其中自然不能少了我们Android。在Unity3DAndroid Stu...

    【转载请注明出处】
    作者:DrkCore (http://blog.csdn.net/DrkCore)
    原文链接:(http://blog.csdn.net/drkcore/article/details/52079371)

    近日因为工作的原因笔者开始接触 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 在如下位置可以找到:

    v7包

    看到这里你以为就能顺利完成往 Unity3D 导入 Android 的工作吗?

    Naive,这里还有两个坑你没跳呢!

    如果你的 SDK 中存在版本为 24 的 Build Tool 的话会爆出错误:

    Build-tools为24时的报错截图

    具体原因可能是 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 可以正常运行。

    使用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')
    }
    
    //导出aar
    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 并且签名(明明打的不是 APK 却不签名无法导出,身为 Android 开发者我表示不解啊),导出后我们就会看到 Eclipse 项目结构的工程,如下:

    导出工程结构

    assets 存放的是编译后的 Unity 脚本等东西,这部分是导出部分的核心,日后如果要更新 Unity 的 lib 的话,只覆盖 assets 下的东西就够了。其他的部分相信大家都十分熟悉了,不再赘述。

    我们将导出的东西作为 library 导入到 Android Studio,build 之后我们就能在 module 的输出目录下找到对应的 AAR 文件了:

    AAR位置

    之后我们就可以直接使用 AAR 文件进行开发了,是不是很方便。

    更新 Unity 的 AAR

    随着项目的不断研发 Unity 的部分总是需要更新的,如果导出一个 AAR 要重复上述的步骤的话那依然是很麻烦的。好在我们可以绕过 Android Studio 直接更新 AAR 文件。

    如前文所说 Unity 导出工程的核心都在 Assets 目录下,而我们用压缩软件打开对应的 AAR 文件就会发现 Assets 下的内容只是被原封不动地打包进去了而已,所以我们完全可以用新导出的 Unity 工程中的 Assets 来替换 AAR 包下的东西。

    AAR打开

    可能出现的其他问题

    如果你出现了各种打包的异常,可以依次按照如下的点来检查:

    • 是否选择了签名文件,并输入了正确的密码
    • 如果你是使用 Eclipse 打包的话,检查存在多个 unity 提供的 classes.jar
    • 检查插件目录中及aar包中是否重复申明了组件。Android 打包 apk 时会将多个 lib 的 AndroidManifest.xml 文件合并到一起,如果重复声明了组件并且声明的属性存在冲突就可能导致打包失败。
    • 检查 bin 目录及 aar 包中是否存在重复的 jar 文件。常见于项目开发中改变了项目名,并且每次打包都是直接解压到插件目录的情况,因为名称不同所以不会覆盖旧的 jar 包。
    • 检查资源是否存在重复的索引。比如同时存在 bg_main.pngbg_main.9.png 两个图片但二者的索引都是 R.drawable.bg_main
    展开全文
  • 之前我使用的是unity 3D 2017.3.0 ,jdk是10.0.1,SDK下载了一个安卓9,一个安卓7,但是在打包过程中,会遇见一个问题 提示不能Gradle打包 ,但是换成interal 后就成了不能打包,后来我把JDK 版本降低,用了jdk8,这...

    unity 3D 打包过程中  我遇见了好多问题 简直能把人气死。之前我使用的是unity 3D 2017.3.0  ,jdk是10.0.1,SDK下载了一个安卓9,一个安卓7,但是在打包过程中,会遇见一个问题 提示不能Gradle打包 ,但是换成interal 后就成了不能打包,后来我把JDK 版本降低,用了jdk8,这个问题就解决了。

    另外 在下载SDK的时候,SDK manager会出现闪退的情况,这个时候,可以把android.bat脚本寻找Java.exe 改为它的绝对路径,注意,此时的绝对路径不能含或空格

    展开全文
  • Android Studio无法找到tool.jar解决方法! Failed to build apk.See the Console for details. CommandInvokationFailure:Failed to build apk.这里写图片描述 困扰两天的问题终于解决了,以为是SDK的问题,...

    Android Studio无法找到tool.jar解决方法!
    Failed to build apk.See the Console for details.
    CommandInvokationFailure:Failed to build apk.

    这里写图片描述
    这里写图片描述

    这里写图片描述

    这里写图片描述

    困扰两天的问题终于解决了,以为是SDK的问题,换了无数个SDK,结果都不行。
    然后以为是SDK tool的问题,又换了好多tool都不行
    最后就认真看错误,一行行分析,才发现原来是sdktool.jar这个东西出现错误了。
    然后就在网上找sdktool.jar这个文件
    最后就发现了这么一篇帖子

    Android Studio无法找到tool.jar解决方法!
    http://blog.csdn.net/sunylat/article/details/48263897

    发现我的情况也类似,也是装完Android Studio之后出现问题,然后就去修改安装路径。
    把环境变量里面的JAVA_HOME的变量值最后加上
    Path的变量值改为路径\bin

    然后就完美打包了!!!

    记录下来这个错误吧。。以后不要再犯了,也让跟我出现一样错误的小伙伴有个参考解决方案吧。

    展开全文
  • 近日因为工作的原因笔者开始接触Unity3D游戏引擎,该引擎的一大特色就是支持多种平台,其中自然不能少了我们Android。在unity3dandroid Studio交互中其实有不少坑,不过踩坑向来是学习的一部分,在这里笔者和大家...

    近日因为工作的原因笔者开始接触Unity3D游戏引擎,该引擎的一大特色就是支持多种平台,其中自然不能少了我们Android。在unity3dandroid Studio交互中其实有不少坑,不过踩坑向来是学习的一部分,在这里笔者和大家分享一下今天的踩坑经验。

    一、 将项目作为lib导入Unity打包

    Eclipse的时代说到打包那必然指的是JAR包,其缺点是res资源文件不好处理,而随着Android Studio一同到来的AAR包解决了这个问题。

    将源码和资源文件一同打包等到实际编译的时候再解压,这些事情Build Tool都帮我们做了,这也是为什么Android Studio中我们只需一句话就能搞定依赖管理。在Unity3D工程中我们同样能够通过AAR来导入Android部分的逻辑。

    基本的导出姿势以及与Unity3D之间的交互可以参照这位博主的博客: 
    Android Studio 2.1 和 Unity3D 5.3.4 交互 
    Android Studio 2.1 和 Unity3D 5.3.4 交互(二)

    博文介绍了如何导出AAR,但是在你真正将自己的项目移植的时候你仍然会遇到不少问题。如果你将自己的AAR包用压缩软件打开时就会发现Build Tool似乎将你整个Module都打包进去,唯独没有打包的就是你的依赖!

    比如你在Android中使用了ToolBar,RecyclerView等由support-v7提供的控件,或者类似xUtils3的第三方框架等,这些东西都是不会被打包进你的AAR中。我们必须手动将这些依赖的AAR一同添加到Unity3D工程。

    大部分的第三方库都会提供AAR包文件,实在没有也可以从GitHub上clone下来自己打包。Google官方提供的support库等都可以在SDK目录下的extras子目录中找到,比如support-v7的AAR在如下位置可以找到:

    v7包

    看到这里你以为就能顺利完成往Unity3D导入Android的工作吗?

    Naive,这里还有两个坑你没跳呢!

    如果你的SDK中存在版本为24的Build Tool的话会爆出错误:

    Build-tools为24时的报错截图

    具体原因可能是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')
    }
    
    //导出aar
    task exportAar(type: Copy) {
        from('build/outputs/aar/')
        into('你的Unity3D工程/Assets/Plugins/Android/')
        include('lib-release.aar')
    }
    
    //添加任务依赖
    exportAar.dependsOn(deleteOldAar, build, exportManifest)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    二、 将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位置

    之后我们就可以直接使用AAR文件进行开发了,是不是很方便。

    1、 更新Unity的AAR

    随着项目的不断研发Unity的部分总是需要更新的,如果导出一个AAR要重复上述的步骤的话那依然是很麻烦的。好在我们可以绕过Android Studio直接更新AAR文件。

    如前文所说Unity导出工程的核心都在Assets目录下,而我们用压缩软件打开对应的AAR文件就会发现Assets下的内容只是被原封不动地打包进去了而已,所以我们完全可以用新导出的Unity工程中的Assets来替换AAR包下的东西。

    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

    【转载请注明出处】 
    作者:DrkCore (http://blog.csdn.net/DrkCore
    原文链接:(http://blog.csdn.net/drkcore/article/details/52079371)

    展开全文
  • Jenkins是一个丰富图形化构建平台。脚本命令工具(bat、shell、perl、python、ant等),代码管理工具(svn cvs等)及账号权限管理等上千个辅助...下面将介绍,如何在windows下使用Jenkins打包Android我的配置环境 wind
  • unity gradle android打包出aaptOptions.noCompress数组太大导致打包失败问题. 将unity安装目录下的mainTemplate.gradle文件中的**STREAMING_ASSETS**去掉即可。 将 aaptOptions { noCompress '.unity3d', '....
  • jenkins是一个广泛用于持续构建的可视化web工具,持续构建说得更直白点,就是各种项目的"自动化"编译、打包、分发部署。jenkins可以很好的支持各种语言(比如:java, c#, php等)的项目构建,也完全兼容ant、maven...
  • 在影创的官方开发文档中,官方测试过的Unity版本 最高就是Unity2017.3.0,我经过测试Unity2018.4.1版本也是可用,2019版本就不可以了。 主要原因:在老版本中,如下图,发布安卓端,影创的发布要求是 build system :...
  • 环境 Unity2019.2.8f1 Windows Jenkins 部署于Windows7 注意事项 Jenkins 需要配置 JDK。...由于Unity2019只能通过Gradle构建apk,所以打包出现的问题的地方 多出现在 Gradle 上。 首先,我们找到Unity...
  • 最近项目Unity版本从5.6.4升级到了Unity2017.4.7版本,然后使用Gradle打包,发现失败,提示这个错误CommandInvokationFailure: Gradle build failed。如下图:  刚开始还是以为版本问题导致,换成不用Gradle打包...
  • 无意中发现了一个巨牛巨牛的人工智能教程,忍...由于我们要将模型资源放在远程的服务器端,但如果直接放fbx模型是不可以加载的,所以我们可以将fbx做成预设或者是直接将其打包成assetbundle格式的,然后通过www来...
  • Caused by: java.lang.NoClassDefFoundError: android.support.v4.util.SimpleArrayMap 需要引入appcompat_v7的项目。引入项目自动引入库。使用谷歌广告需要引入 google-play-services-libs项目。
  • 关于WIN10 unity 安卓打包问题总结 1.打包前游戏的设置 2.软件的安装和PC环境变量的配置 首先配置好游戏宽高比 点击unity的 file + Build Settings 在build Settings 中选中Android 并点击左下角的Switch ...
  • 在Mac上一键打android
  • Unity3dAndroid通信

    2018-06-02 23:54:03
    先交代几点 1.u3d可以直接打包成APK或android项目(项目可以在androidIDE中直接运行)供android二次开发 2.android目前最新也是官方支持的方式是使用...一.Unity3d调用Android方法 先介绍一下u3d中调用android...
  • Unity打包遇到的小错误: 在打包时,首先得先设置好Play Settings ( 如 公司名,包名-即游戏名称;此处略过如何设置); 设置好相关属性后,就可以开始Build 了,但是有时候会出现build失败(笔者亲自体验);错误的...
  • 1.CommandInvokationFailure: Unable to convert classes ... C:/Program Files (x86)/Java/jdk1.8.0_73\bin\java.exe -Xmx10 -Dcom.android.sdkmanager.toolsdir="D:/android-sdk-windows244\tools" -...
  • 关于Unity 版本说明:Unity 2018.1.6f1 persional 版本(截止2018.6.29为最新版本),下面为版本界面:安装Unity的时候记得勾选下面这个按钮,其他就没有什么特别的了,正常安装就可以了:搭建Unity 工程:查了不少...
  • Unity3D适配安卓时,会遇到好多奇怪的问题,这是我的遇到的两个问题,顺带附上解决办法~
1 2 3 4 5 ... 20
收藏数 943
精华内容 377
关键字:

unity3d安卓打包失败