开发者社区> 杰克.陈> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Android项目实战(三十九):Android集成Unity3D项目(图文详解)

简介: 原文:Android项目实战(三十九):Android集成Unity3D项目(图文详解)   需求:   Unity3D 一般用于做游戏 而且是跨平台的。原本设计是Android 应用端A(原生开发)进行一些业务处理,最后由A 打开Android 应用端B(Unity3D 游戏开发)进行游戏操作。
+关注继续查看
原文:Android项目实战(三十九):Android集成Unity3D项目(图文详解)

  需求:

  Unity3D 一般用于做游戏 而且是跨平台的。原本设计是Android 应用端A(原生开发)进行一些业务处理,最后由A 打开Android 应用端B(Unity3D 游戏开发)进行游戏操作。

 

  这样导致的问题: 

  1、A应用打开B应用 , 数据之间的传递不方便

  2、正常关闭,异常关闭的交互及技术上处理麻烦

  3、版本迭代,需要分开考虑

  4、体验差

  5. ......................

  最终要合并成一个Android应用 , 提高用户体验。 实现思路即 Android工程继承(引入)Unity3D项目(依赖的Android项目 生成一个类库)。

  

  下面开始详细步骤:

  一、Unity3D 工程师 将 项目生成一个类库

    这个不多说,让Unity3D 工程师去做 ,我们只需要这个类库就行

  

     二、Android工程导入类库

    

     

    注:三个都要选中

        

 

       导入成功之后 ,会有一些错误,要进行修改

    

 三、修改

  (1)、找到类库目录下的build.gradle文件

       将第一行: apply plugin: 'com.android.application'  改为: apply plugin: 'com.android.library' 

       将 compileSdkVersion 和 buildToolsVersion 改为和 app目录的下build.gradle 一致

      将defaultConfig{}下的 applicationId 一行删除

                   Sync Now...

      最终如下:

      

 

    

 (2)、找到类库目录下的AndroidManifest.xml 文件

     删除application 下的几条属性

    android:debuggable="false"

    android:label=""

    android:theme=""

    android:icon="@mipmap/ic_launcher"

    

    找到主入口Activity 即有 <intent-filter></intent-filter> 的  ,添加一条属性:android:process="e.unity3d",这是让Unity3D的主Activity退出的时候 可以回到Android部分,否则会有异常问题

     然后删除<intent-filter>内部的所有部分 , 这一部分是标注该Activity作为主入口 并且 在手机桌面上显示的,去掉了,不在桌面显示,因为Android部分调用这个进入Unity3D部分,所以默认具有主入口的功能。

    效果如下:

  <application android:allowBackup="true"
      android:name="com.xxxxx.SensorS.XApplication"
      android:supportsRtl="true"
      android:isGame="true">
    <activity
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:name="com.xxxxx.SensorS.MainActivity"
        android:process="e.unity3d"
        android:screenOrientation="landscape">
    </activity>
  
  //... 注意
  // 打开MainActivity界面是在一个新的进程中的, 见参数android:process="e.unity3d"
  // 如果其他的服务 或 activity 界面 需要在同一个进程 也需要添加 android:process="e.unity3d"
  </application>

 

    

   (3)、依赖该类库

      

       选择类库依赖

      

   

  (4)、Android部分调打开Unity3D主Activity , 即打开类库中的某个Activity

Intent intent = new Intent();
// unity3d部分的主activity                              
intent.setClass(TaskListActivity.this,MainActivity.class);
startActivity(intent);

 

  

  另:可能出现的错误

  1、你的硬件不支持! 

  

  这个出现的几率比较大,首先看一下unity3d类库的文件目录 , 只有armeabi-v7a 和 x86 两个文件夹

  

   所以我们要解决的就是 查看一下app目录下的 和 所有类库下的 libs文件夹或者jniLibs文件夹下 也只能有这两个文件夹 , 多的需要删除

    还要注意:

   如果你的app目录或者module目录下的build.gradle文件夹中有如下代码: 

   ndk {
            //选择要添加的对应cpu类型的.so库。
            abiFilters  'armeabi-v7a' ,'x86'
        }

   记得也必须只能有这两个,多的也要删除。

   只要保持一致,这个问题就解决了。

  

  2、jar包冲突的问题,这个属于常见问题,类库和app中保留一个就行,不多说了。

    

  3、BuildConfig.class 文件冲突

Error:Execution failed for task ':ipark2:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/xxxxx/xxxxx/xxxx/BuildConfig.class

 

   这个就说你的  com/xxxxx/xxxxx/xxxx/ 目录下的BuildConfig.class 文件冲突了 。 一般是在类库中,jar包下有这么一个文件,而原来项目中是没有的,是生成类库的时候系统给生成的。

     解决方法就是 把该文件从 jar包中删除。

     举例:

   1、现在有一个jar包 

 

   2、打开该文件所在的目录 , 按Shift + 鼠标右键 选择 ‘从此处打开命令窗口’

      输入命令: jar xf SensorS.jar    注:SensorS 即你的jar包的名字

     

      执行命令之后 会发现目录下多了一个jar包解压后的文件,在该文件夹下按目录找到BuildConfig.class 文件, 删除

    3、重新把处理后的文件夹压缩成jar包  

    jar cvf SensorSSS.jar com    注:SensorSSS 即重新生成的jar包的名字  , com即 要被压缩成jar包的文件夹(即原先jar包解压缩出来的文件并删除BuildConfig.class文件)

     

 

 

     最后将处理后的jar包替换原来的即可

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android/Unity大乱斗-完整双方集成交互指南-下篇
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
747 0
《Unity 4 3D开发实战详解》一导读
近几年,Android平台游戏、iPhone平台游戏以及Web的网页游戏发展迅猛,已然成为带动游戏发展的新生力量。遗憾的是,目前除了少数的成功作品外,大部分的游戏都属宣传攻势大于内容品质的平庸之作。面对这种局面,3D游戏成为独辟蹊径的一种选择,而为3D游戏研发提供强大技术支持的Unity 3D引擎,以其创造高质量的3D游戏和真实视觉效果的核心技术,为开发3D游戏提供了强大的源动力。
1562 0
《Unity 4 3D开发实战详解》一6.3 粒子系统
在第一人称射击游戏中,我们会看到很多爆炸、浪花、血液喷溅等绚丽的特效。这些特效如果通过编程实现,将是一件很烦琐复杂的工作。为了简化这一过程,Unity为开发者集成了粒子系统这一仿真工具,使粒子特效的开发变得更简单。
2167 0
《Unity 4 3D开发实战详解》一6.4 关节
在现实生活中,大部分的运动物体并不是单独的一个简单基本体。对象要和其他对象进行交互,必须有其所谓的内在联系,例如枪械对象的设计。因为枪械对象的刚体组件不是简单的一个基本刚体组件组成的,需要多个子对象刚体组件的拼接来组成。这就需要关节中的固定关节来解决。
2345 0
unity3d 2D游戏,角色移动与跳跃
using UnityEngine; using System.Collections; public class HeroColtrol : MonoBehaviour { private Rigidbody2D HeroRd; p...
2454 0
UNITY和图片像素的换算
https://zhidao.baidu.com/question/143233873.html   1米X1米换算成像素是2835X2835的
773 0
unity之LOD
http://www.cnblogs.com/MrZivChu/p/lod.html
682 0
Android项目实战(二十五):Android studio 混淆+打包+验证是否成功
前言: 单挑Android项目,最近即时通讯用到环信,集成sdk的时候 官方有一句 在 ProGuard 文件中加入以下 keep。-keep class com.hyphenate.** {*;} -dontwarn com.hyphenate.**   即:混淆规则。
997 0
+关注
杰克.陈
一个安静的程序猿~
10424
文章
2
问答
文章排行榜
最热
最新