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

相关文章

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

SpringBoot集成EasyPoi实现Excel模板导出成PDF文件

《SpringBoot集成EasyPoi实现Excel模板导出成PDF文件》在日常工作中,我们经常需要将数据导出成Excel表格或PDF文件,本文将介绍如何在SpringBoot项目中集成EasyPo... 目录前言摘要简介源代码解析应用场景案例优缺点分析类代码方法介绍测试用例小结前言在日常工作中,我们经

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF