zoukankan      html  css  js  c++  java
  • 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包替换原来的即可

  • 相关阅读:
    [LeetCode] Coin Change
    [LeetCode] House Robber
    [LeetCode] Lowest Common Ancestor of a Binary Search Tree
    [LeetCode] Remove Element
    [LeetCode] Merge Two Sorted Lists
    [LeetCode] Duplicate Emails
    svn propset svn:ignore
    WebLogic11g-负载分发
    WebLogic11g-集群相关概念
    WebLogic11g-半小时让你的domain集群化
  • 原文地址:https://www.cnblogs.com/xqxacm/p/8126553.html
Copyright © 2011-2022 走看看