AndroidStudio导出jar包与Unity交互开发流程及经验总结

本文主要是介绍AndroidStudio导出jar包与Unity交互开发流程及经验总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

AndroidStudio导出jar包与Unity交互开发流程及经验总结

准备工作

Eclipse和AndroidStudio的情况

  先前是用Eclipse做jar导入Unity用,然而Google不再更新ADT插件导致新版本Unity无法继与之配合,因此只好弃用选择AndroidStudio,作为一个从来没碰过该软件的我,硬生生的坑了4夜晚,还是研究到深夜,为此我想分享下我的踩坑奇遇。

![(https://img-blog.csdnimg.cn/20201015225019440.png#pic_center)

PC机BIos设置

vt-x 是虚拟机器支持,必须要进入Bios开启,否则会影响AndroidStudio的正常运行。另外和 Hyper-V 是不能共存的需要去控制面板设置如果没有说明不影响。
在这里插入图片描述
在这里插入图片描述

Android Studio的SDK下载及配置

在这里插入图片描述
在这里插入图片描述

貌似这里无论怎么变更都不能让30.0.0删除,也不知道是不是因为这里造成了后续导出0.0<26.1.1的错误。

环境

软件版本:AndroidStudio3.6 ;Unity019.4.10f1 LTF;  
Gradle版本:Gradle Plugin Version3.6.3 ; Gradle version5.6.4 【最好软件默认】
工程SDK:minSdkVersion 18 ;targetSdkVersion 30 ;buildToolsVersion "30.0.2"

AndroidStudio部分

创建工程

  1. 设置好 名称 、 路径 、 包名
    Android Studio 工程的 Application name 、Company Domain 、Package name 这三个参数可以随意填写,并不需要与正式工程相同。


在这里插入图片描述
在这里插入图片描述
选择 AndroidSDK 最小版本,这个要与unity一直,有些unity版本高的可选的范围可能也略高。

2、创建Library
创建方式有很多种
①方式1:File-> new Module ->选择Android Library
我们只需要一个空白背景,其他美化的基本都在Unity实现。
在这里插入图片描述
在这里插入图片描述
②方式2:File->Project Structure ->Modules ->点击+创建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改ComplisSDKVersion和 ToolsVersion曾经让我误入歧途过,绕了不少路,以后后续很多错误都是受版本影响。

3 Library的参数务必注意!
在这里插入图片描述
①Package name 与正式工程一致。
②Application/Library name 就是就填你要导出的 jar 插件的名称。
③Module name 自动填写就不用管了【选择和Pacage name后缀一样】。
④Minimum SDK 最好和Unity的项目选择一样【注意查看Unity支持的最低版本】;
点击Finish

4、添加Unity classes.jar到AS项目中在这里插入图片描述
①classes.jar文件Paste到 libs 文件夹 ;
UnityLC\版本\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
②右键Add As Library添加到本地依赖;

在这里插入图片描述
在这里插入图片描述

AS工程文件及脚本操作

注意!后面的步骤比较重要,很多别人的方法也会因版本不一样有很大区别!

5、2018及更早版本关于UnityPlayerActivity类的调用大致过程
注意:要想看到Library下面的com.xxx.xxx文件夹,必须在左上角选择Project,否则显示的文件是不太一样的。
在这里插入图片描述
①是在com.XXX.XXX文件下面创建个Activity,并且在里面引入com.unity3d.player.UnityPlayer.UnityPlayerActivity,
② 写代码方能被Unity调用。
在这里插入图片描述
在这里插入图片描述
注意:GenerateLayoutFile不选
UnityPlayerActivity.java软件目录下:
UnityLC\版本\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player

6、2019版本很多人做法【本人弃用因为没成功,原因我在6内说明】:
将UnityPlayerActivity.java引入工程;
创建一个EmptyActivity继承它;
写入方法。
在这里插入图片描述
在这里插入图片描述

7、2019版本我采用的方法:创建脚本的时候是直接将UnityPlayerActivity赋值到com.XX.XXXX【和Unity工程一直的Library工程内】我们先前创建的。并且重新命名为UnityPlayerMainActivity!因为防止jar包里面的类和unity导出的类UnityPlayerActivity重名。
在这里插入图片描述
8、添加代码从,后续会用Unity来访问该整数1000;
在这里插入图片描述
9、MXL修改,可以从App内的AndroidManifest进行修改,删除红色字体的错误代码,修改包名、activity android:name 、 添加放置闪退代码。
在这里插入图片描述
10、检查Build.gradle 如果第一行不是apply plugin: ‘com.android.library’
就需要进行修改了。
在这里插入图片描述
11、修改Build.gradle,添加打包代码,添加不生成BuildConfig的代码【CSDN网站很多人都采用了导出后手工用解压缩软件打开来删除】
在这里插入图片描述
下面展示一些 内联代码片

//不生成BuildConfig(为了防止unity导出的同包名BuildConfig类的冲突)
afterEvaluate {generateReleaseBuildConfig.enabled = false
}task makeJar(type: Copy) {delete 'build/libs/mylibs.jar'      //下删除老的Jar包//设置拷贝的源文件,记得去找下路径,版本不同路径可能不同from('build/intermediates/aar_main_jar/release/')    //从该地址复制into('build/libs/')         //复制到该地址include('classes.jar')       //包含文件rename ('classes.jar', 'mylibs.jar')  //重命名
}makeJar.dependsOn(build)
// gradlew makeJar 用这个命令行来生成jar包

12、注意from地址要根据版本情况而定,我是通过查找并对比判断地址

 //从该地址复制
from('build/intermediates/aar_main_jar/release/')   

该路径真的是一个最大的坑点,因为AndroidStudio版本不一样,各部相同,我是先尝试导出一次,如果没产生.jar包,就点Build文件夹右键Show InExplorer进入文件夹进行搜索classes.jar

4个文件夹地址及大小,我以小白的眼光分析
Classes.jar文件位置
在这里插入图片描述
所以我的Classes.jar地址是这样得来的!

13、右边Gradle点开,选中我们的Library工程右键Reimport Gradle project
在这里插入图片描述

过程中也出现下面记录也出现过红色字说UnityAnctivty如何如何还带了些特殊符号,最后结果证明对本次导出影响不大;如果一直刷新不出来可能就是网络问题,他需要下载。

在这里插入图片描述
出现这个异常似乎最后也没影响。

Unity部分

14、最后将Mylibs.jar和AndroidManifest.Xml拷贝到Unity工程
在这里插入图片描述
在这里插入图片描述
Mylibs.jar放到Plugins/android/libs下;
AndroidManifest.xml放Plugins/android下。

15、写代码

public class Test : MonoBehaviour
{private int number;private void OnGUI(){if(GUI.Button(new Rect(50,50,550,110),"Test")){AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");number = jo.Call<int>("GetInt");}GUI.Label(new Rect(200, 200, 300, 100), number.ToString());}
}

16、Unity设置
在这里插入图片描述
SDK我用的是之前AndroidStudio下载准备的,并没用有Unity给我们准备的。

17、导出
在这里插入图片描述
18、遇到SDK Tols vERSION0.0<26.1.1,在这里我卡了很久一直未能解决。跳过!!!跳过!!去他NND!!!UseHighest Installed因为我见到有人这么干了!
在这里插入图片描述

19测试!【成功!】
在这里插入图片描述
在这里插入图片描述

遇到的问题

错误1:报错SDK Tools ersion0.0<26.1.1

有人说要降低AndroidStudio的gradle pluginversion版本;可是换成unity 2019.3.15f1缺不报这个错误,而是另外一个错误,虽然gradle 的错误也是应该存在的,但是这是SDK Tools自身版本和Unity的不匹配。
后来我直接无视,有的人说要用官方SDK。
https://blog.csdn.net/qq_39860954/article/details/107425900

又尝试删除了gluba的版本6.1
似乎解决了?:我用2019版本来打包发布同样的一个jar包,缺不报0.0.0<26.1.1的错误!是因为unity版本高对tools不兼容?

错误2:gradle版本我们要注意?

最终还是逃不开重新安装和别人的案例一样的版本来重新尝试
1、AndroidStuodi3.6 +unity2019.3.15f1; Gradle 打算下载3.4

问题3:

The attribute application@icon=@mipmap/app_icon in: unityLibrary collides with another value (she the console for details) ,感觉这个问题依旧是
这个应该就是xml的问题!!

问题4:

Resource ‘style/Apptheme’ not found in androidManifest.Xml:31(See the console for details)

问题5:XmlException: Name cannot begin with the ‘<’ character, hexadecimal value 0x3C. Line 11, position 5. ;

解决:XML缺少尖括号>;

XML说明:android:label="@string/app_name" 这个应该是程序的名称;会顶替Unity设置

问题6:出现闪退缺少!

XML添加

问题7:new Module为灰色,且下方一直处于Gradle sync started;

解决方案1:【似乎没软用】

把android studio先关掉。
打开.gradle/wrapper/dists目录,找到distributionUrl所指定的那个版本号文件夹。
1)从网上下载https://services.gradle.org/distributions/相应的 gradle-4.4-all.zip,放到文件夹里,并解压
2)把.part删除掉
3)创建 gradle-4.4-all.zip.ok (很关键!!!)
4)启动android studio,正常sync

三级目录解决方案2:办法:修改仓库;修改文件: build.gradle【阿里仓库】

// 注释jcenter()仓库 并添加下面maven 使用阿里云仓库:)
// jcenter() 【本段代码本来没注释】
maven{ url ‘http://maven.aliyun.com/nexus/content/groups/public’}
在这里插入图片描述

错误7:ERROR: Failed to open zip file.好像是下载不下来

在这里插入图片描述
据说吧https改为http就可以然而并没什么卵用。

这篇关于AndroidStudio导出jar包与Unity交互开发流程及经验总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/244977

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Spring AI ectorStore的使用流程

《SpringAIectorStore的使用流程》SpringAI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中发挥着至关重要的作用,本文给大家介... 目录一、VectorStore的基本概念二、VectorStore的核心接口三、VectorStore的