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

简介:   需求:  Unity3D 一般用于做游戏 而且是跨平台的。原本设计是Android 应用端A(原生开发)进行一些业务处理,最后由A 打开Android 应用端B(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包替换原来的即可

 

相关文章
|
7天前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
2月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
91 1
|
6天前
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
第一个安卓项目 | 中国象棋demo学习
|
2月前
|
编译器 vr&ar 图形学
从零开始的unity3d入门教程(五)---- 基于Vuforia的AR项目
这是一篇Unity3D结合Vuforia实现增强现实(AR)项目的入门教程,涵盖了环境配置、Vuforia账户注册、Target数据集创建、Unity项目设置、AR程序配置、Android环境配置以及最终在手机上测试运行的全过程。
从零开始的unity3d入门教程(五)---- 基于Vuforia的AR项目
|
24天前
|
JavaScript 前端开发 Android开发
让Vite+Vue3项目在Android端离线打开(不需要起服务)
让Vite+Vue3项目在Android端离线打开(不需要起服务)
|
24天前
|
IDE 开发工具 Android开发
安卓与iOS开发对比:平台选择对项目成功的影响
【9月更文挑战第10天】在移动应用开发的世界中,选择正确的平台是至关重要的。本文将深入探讨安卓和iOS这两大主要移动操作系统的开发环境,通过比较它们的市场份额、开发工具、编程语言和用户群体等方面,为开发者提供一个清晰的指南。我们将分析这两个平台的优势和劣势,并讨论如何根据项目需求和目标受众来做出最佳选择。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更好地理解每个平台的特性,并指导你做出明智的决策。
|
27天前
|
Java 开发工具 Android开发
安卓与iOS开发:平台选择对项目成功的影响
在移动应用开发的浩瀚宇宙中,安卓和iOS两大星系璀璨夺目,各自拥有独特的光芒。本文将穿梭于这两个平台之间,探讨它们在开发环境、用户群体、成本效益等方面的差异,以及这些差异如何影响一个项目的航向和终点。我们将从初学者的视角出发,逐步深入,揭示选择合适平台的重要性,以及如何根据项目需求做出明智的选择。无论你是即将启航的新手开发者,还是已经在这片星海中航行的老手,这篇文章都将为你提供有价值的导航信息。
42 2
|
1月前
|
Java 开发工具 Android开发
探索安卓与iOS开发的差异:平台选择对项目的影响
在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据着重要的位置。本文旨在深入探讨这两个平台在开发过程中的主要差异,包括编程语言、开发工具、用户界面设计、性能优化以及市场分布等方面。通过对比分析,我们将揭示平台选择如何影响项目规划、执行效率和最终成果,为开发者在选择适合自己项目需求的平台时提供参考依据。
|
2月前
|
IDE 开发工具 Android开发
探索安卓与iOS开发的差异:平台选择对项目成功的影响
在移动应用开发的广阔天地中,安卓和iOS两大平台各领风骚,引领着技术进步的潮流。本文旨在深入剖析这两个平台在开发过程中的关键差异点,包括编程语言、开发工具、用户界面设计以及市场分布等方面。通过对比分析,我们不仅能更好地理解每个平台的独特优势,还能洞察这些差异如何影响项目决策和最终成果。无论你是开发者还是企业决策者,了解这些内容都将助你一臂之力,在选择适合自己项目的开发平台时做出更明智的决策。
|
2月前
|
IDE 开发工具 Android开发
探索iOS与安卓开发的差异:平台选择对项目成功的影响
【8月更文挑战第22天】在数字化时代,移动应用成为企业和个人展示创意、提供服务的重要工具。iOS和安卓作为两大主流平台,各自拥有独特的优势和限制。本文将深入探讨这两个平台在开发过程中的主要差异,以及这些差异如何影响项目规划、用户体验和市场策略。通过比较分析,旨在为开发者和企业决策者提供有价值的见解,帮助他们根据项目需求做出明智的平台选择。
下一篇
无影云桌面