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项目实战(三十九):Android集成Unity3D项目(图文详解)的更多相关文章
- Java并发编程原理与实战三十九:JDK8新增锁StampedLock详解
1.StampedLock是做什么的? ----->它是ReentrantReadWriteLock 的增强版,是为了解决ReentrantReadWriteLock的一些不足. 2.Ree ...
- Spring Boot教程(三十九)使用MyBatis注解配置详解(2)
增删改查 MyBatis针对不同的数据库操作分别提供了不同的注解来进行配置,在之前的示例中演示了@Insert,下面针对User表做一组最基本的增删改查作为示例: public interface U ...
- “全栈2019”Java第五十九章:抽象类与抽象方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- ElasticSearch实战系列八: Filebeat快速入门和使用---图文详解
前言 本文主要介绍的是ELK日志系统中的Filebeat快速入门教程. ELK介绍 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是 ...
- Android项目实战(十九):Android Studio 优秀插件: Parcelable Code Generator
Android Studio 优秀插件系列: Android Studio 优秀插件(一):GsonFormat Android Studio 优秀插件(二): Parcelable Code Gen ...
- Android笔记(三十九) Android中的数据存储——SQLite(一) create
SQLite是内置于Android的一款轻量级关系型数据库,她运算速度快,占用资源少,通常只需要几百K的内存就足够了,因而特别适合在移动设备上使用. SQLite不仅支持标准的SQL语法,还遵循数据库 ...
- Android笔记(三十) Android中线程之间的通信(二)Handler消息传递机制
什么是Handler 之前说过了,Android不允许主线程(MainThread)外的线程(WorkerThread)去修改UI组件,但是又不能把所有的更新UI的操作都放在主线程中去(会造成ANR) ...
- 【慕课网实战】Spark Streaming实时流处理项目实战笔记十九之铭文升级版
铭文一级:(没有内容) 铭文二级: 创建Spring boot项目: 看官网,Quick Start下面有两个依赖,必须得使用 但是如果用IDEA构建Spring boot,则会自动添加 New Pr ...
- 潭州课堂25班:Ph201805201 django 项目 第三十九课 后台 文章发布,图片上传到 FastDFS后端实现 七牛云讲解(课堂笔记)
文章发布: # 1,从前台获取参数# 2,校验参数# 3,把数据保存到数据库# 4,返回执行结果到前台,(创建成功或失败) 自定义 froms.py 校验参数 上传图片到七牛云 注册 https:// ...
- vue2.0项目实战(4)生命周期和钩子函数详解
最近的项目都使用vue2.0来开发,不得不说,vue真的非常好用,大大减少了项目的开发周期.在踩坑的过程中,因为对vue的生命周期不是特别了解,所以有时候会在几个钩子函数里做一些事情,什么时候做,在哪 ...
随机推荐
- flask 之定时任务开发
最近开发我的接口测试平台 ,但是遇到了一个需求,需要开发定时任务,于是百度搜索,找到了这么一个叫 pFlask-APScheduler然后开始了我的第一次的学习,于是乎, 需求是这么的: 1.添加定时 ...
- 如何编写单元测试-基于Spring
单元测试 首先单元测试真的算是一种"脏活累活",但是我个人感觉还是有必要,至少本人最近开始写单元测试后还是能发现一些"bug"的. 如何写单元测试 单元测试的要 ...
- 一个在java后台实现的对图片进行加网纹或水印的工具类
import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...
- hibernate第一天
首先介绍一下javaEE开发的三层架构 Web层 也被称为表现层 它是表现层的一个设计模型:也就是大家常用的MVC开发模式 Service层 它是和需求相关的 DAO层 它只和数据 ...
- apache mysql无法启动解决办法
最近在调试几个代码,需要不停的启动关闭服务器和mysql.在连续的几次开关后,无法启动了,每次启动后就直接关闭. 刚开始是怀疑是不是端口被占用了,查看端口后,并没有端口被占用的情况.查看mysql错误 ...
- 腾讯 AI Lab 计算机视觉中心人脸 & OCR团队近期成果介绍(3)
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:周景超 在上一期中介绍了我们团队部分已公开的国际领先的研究成果,近期我们有些新的成果和大家进一步分享. 1 人脸进展 人脸是最重要的视觉 ...
- HDU2159--二维费用背包,三重背包
FATE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 批量抓取cisco设备配置脚本编写(expect/sed/awk/shell)
应同事需求自行编写了第一个脚本,中间遇到一些坑. 需求,要求抓取设备"show ip interface brief"信息和"show interface des&quo ...
- [行业关键词] review code review
意思是 代码评审 或是 代码回顾 代码评审是指在软件开发过程中,通过对源代码进行系统性检查的过程.通常的目的是查找系统缺陷,保证软件总体质量和提高开发者自身水平. Code Review是轻量级 ...
- mysql最佳优化经验
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据 ...