欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-14 21:37:04
...

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

准备工作

Eclipse和AndroidStudio的情况

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

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

PC机BIos设置

vt-x 是虚拟机器支持,必须要进入Bios开启,否则会影响AndroidStudio的正常运行。另外和 Hyper-V 是不能共存的需要去控制面板设置如果没有说明不影响。
AndroidStudio导出jar包与Unity交互开发流程及经验总结
AndroidStudio导出jar包与Unity交互开发流程及经验总结

Android Studio的SDK下载及配置

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

貌似这里无论怎么变更都不能让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 这三个参数可以随意填写,并不需要与正式工程相同。

AndroidStudio导出jar包与Unity交互开发流程及经验总结
AndroidStudio导出jar包与Unity交互开发流程及经验总结
AndroidStudio导出jar包与Unity交互开发流程及经验总结
选择 AndroidSDK 最小版本,这个要与unity一直,有些unity版本高的可选的范围可能也略高。

2、创建Library
创建方式有很多种
①方式1:File-> new Module ->选择Android Library
我们只需要一个空白背景,其他美化的基本都在Unity实现。
AndroidStudio导出jar包与Unity交互开发流程及经验总结
AndroidStudio导出jar包与Unity交互开发流程及经验总结
②方式2:File->Project Structure ->Modules ->点击+创建

AndroidStudio导出jar包与Unity交互开发流程及经验总结
AndroidStudio导出jar包与Unity交互开发流程及经验总结
AndroidStudio导出jar包与Unity交互开发流程及经验总结
修改ComplisSDKVersion和 ToolsVersion曾经让我误入歧途过,绕了不少路,以后后续很多错误都是受版本影响。

3 Library的参数务必注意!
AndroidStudio导出jar包与Unity交互开发流程及经验总结
①Package name 与正式工程一致。
②Application/Library name 就是就填你要导出的 jar 插件的名称。
③Module name 自动填写就不用管了【选择和Pacage name后缀一样】。
④Minimum SDK 最好和Unity的项目选择一样【注意查看Unity支持的最低版本】;
点击Finish

4、添加Unity classes.jar到AS项目中AndroidStudio导出jar包与Unity交互开发流程及经验总结
①classes.jar文件Paste到 libs 文件夹 ;
UnityLC\版本\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
②右键Add As Library添加到本地依赖;

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

AS工程文件及脚本操作

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

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

6、2019版本很多人做法【本人弃用因为没成功,原因我在6内说明】:
将UnityPlayerActivity.java引入工程;
创建一个EmptyActivity继承它;
写入方法。
AndroidStudio导出jar包与Unity交互开发流程及经验总结
AndroidStudio导出jar包与Unity交互开发流程及经验总结

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

//不生成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文件位置
AndroidStudio导出jar包与Unity交互开发流程及经验总结
所以我的Classes.jar地址是这样得来的!

13、右边Gradle点开,选中我们的Library工程右键Reimport Gradle project
AndroidStudio导出jar包与Unity交互开发流程及经验总结

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

AndroidStudio导出jar包与Unity交互开发流程及经验总结
出现这个异常似乎最后也没影响。

Unity部分

14、最后将Mylibs.jar和AndroidManifest.Xml拷贝到Unity工程
AndroidStudio导出jar包与Unity交互开发流程及经验总结
AndroidStudio导出jar包与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设置
AndroidStudio导出jar包与Unity交互开发流程及经验总结
SDK我用的是之前AndroidStudio下载准备的,并没用有Unity给我们准备的。

17、导出
AndroidStudio导出jar包与Unity交互开发流程及经验总结
18、遇到SDK Tols vERSION0.0<26.1.1,在这里我卡了很久一直未能解决。跳过!!!跳过!!去他NND!!!UseHighest Installed因为我见到有人这么干了!
AndroidStudio导出jar包与Unity交互开发流程及经验总结

19测试!【成功!】
AndroidStudio导出jar包与Unity交互开发流程及经验总结
AndroidStudio导出jar包与Unity交互开发流程及经验总结

遇到的问题

错误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 aaa@qq.comaaa@qq.com/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’}
AndroidStudio导出jar包与Unity交互开发流程及经验总结

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

AndroidStudio导出jar包与Unity交互开发流程及经验总结
据说吧https改为http就可以然而并没什么卵用。