unity学习笔记-

  • 调用AndroidStudio生成的jar包里的方法-2018版
  • 需要解决的问题
  • 思路

调用AndroidStudio生成的jar包里的方法-2018版

需要解决的问题

由于需要开发的是一个安卓apk,并且需要对接到第三方的接口
存在一个需要使用第三方接口里的aes加密方法才能请求其接口
然而第三方的文档只提供了java等其他版本的demo,并没有为c#提供demo
因此需要将java的demo转成jar让unity能够进行调用
幸运的是unity2018.2.0以后的版本已经支持识别java代码了
但这个方法我在使用网上大佬们的方法的时候一直没有成功,迫于项目需求,所以还是只能去尝试自己在as里打包jar进行jar的调用

思路

这里我花了将近一天的时候进行as的打包流程

不管时间多少,做出来就是成功的(强行鼓励自己一波),但是只完成到了打包自己写的方法的地步,还没有实现打包第三方接口的打包

但是感觉是一通百通的,这里先记录一下,晚点试试打包第三方接口的demo

首先是需要安装as(Androidstudio)这个就不多说了,看其他大佬的教程即可

然后是

unity 请求Java接口 unity调用jar包方法_jar


新建一个项目,包名最好和unity安卓里的包名一致

unity 请求Java接口 unity调用jar包方法_unity 请求Java接口_02


unity 请求Java接口 unity调用jar包方法_jar包_03


这里可以查看和修改包名,一致的原因是怕后面出现问题,这是看了前面很多大佬的帖子总结下来的规律哈哈

建好了之后点一下project

unity 请求Java接口 unity调用jar包方法_jar包_04


找到我们创建的项目的目录

unity 请求Java接口 unity调用jar包方法_unity 请求Java接口_05


新建一个module

unity 请求Java接口 unity调用jar包方法_unity 请求Java接口_06


这里要选android library

unity 请求Java接口 unity调用jar包方法_unity_07


这里的包名也尽量和unity的包名,保持一致

api的话最好注意一下unity里的apilevel,如果太高或者低了的话不用我说大家也应该懂会发生什么事

建好之后

unity 请求Java接口 unity调用jar包方法_jar_08


红框里面的就是我们这次的重点,

这里还有一步,需要在unity编辑器的文件夹里找到一个叫classjar的包

unity 请求Java接口 unity调用jar包方法_android_09


路径如上

把他复制到libs这个文件夹里,然后点击这个jar包右键,找到下面的add as library选项

然后建一个叫做release的文件夹,这个文件夹的作用是负责存放打包好的jar包,名字我感觉不是一定的,因为后面的代码里有注明,不过我没有试过修改过就是了

一开始是个空的文件夹所以不要在意图里的三角符号

然后打开这个module里的src,一直点,点到

unity 请求Java接口 unity调用jar包方法_jar_10


这个目录,然后开始写你的代码就可以了

写完之后保存一下,同步一下,同步就是sync now,你可以在程序的右上方左右的位置看到

unity 请求Java接口 unity调用jar包方法_jar_11

在这里我遇到了一个问题,这个才是让我苦恼一天的东东

unity 请求Java接口 unity调用jar包方法_android_12


就是这个阴间的玩意儿

在网上搜bug,要么就是近似的,要么就是差很多的,比如有的大佬是因为maven的地址才导致的类似的错误

有的就是其他的问题

我就一直找一直找

后面找着找着,突然意识到,可能是我的sdk版本出现了问题,因为报错的时候,点open file会弹到

unity 请求Java接口 unity调用jar包方法_unity_13


这个文件里,顺便一提,这个文件就是

unity 请求Java接口 unity调用jar包方法_unity 请求Java接口_14

这个

觉得是版本的问题,于是看了下自己的项目的sdk版本

unity 请求Java接口 unity调用jar包方法_unity_15


发现是26

于是我试着修改了一下

unity 请求Java接口 unity调用jar包方法_android_16


然后try again了一波

unity 请求Java接口 unity调用jar包方法_jar_17


诶,发现不报错了

unity 请求Java接口 unity调用jar包方法_unity 请求Java接口_18


然后我满怀期待的接着做(这里讲的是我的历程)

进入前面build.gradle文件,在文件的后面添加如下代码

//需要自己添加的
//task to delete the old jar
task deleteOldJar(type: Delete) {
    delete 'release/AndroidPlugin.jar'
}

//task to export contents as jar
task exportJar(type: Copy) {
    from('build/intermediates/packaged-classes/release/') //从这个目录下取出默认jar包
    into('release/')
    include('classes.jar')
    ///Rename the jar
    rename('classes.jar', 'AndroidPlugin.jar')
}

exportJar.dependsOn(deleteOldJar, build)

这里的

unity 请求Java接口 unity调用jar包方法_android_19

就是我们手写的,所以我觉得是可以修改的,但是问题不大,个人习惯而已

这里要注意一下,这段代码不能添加到

unity 请求Java接口 unity调用jar包方法_jar_20


这个地方的文件里面这个代码是为了在

unity 请求Java接口 unity调用jar包方法_unity 请求Java接口_21


这里,给gradle添加exportjar的工具方法,如果你的代码没有放在你的module的build.gradle,就会找不到这个工具方法

unity 请求Java接口 unity调用jar包方法_unity 请求Java接口_22


没有这个方法的话是不能给module进行jar打包的

然后双击这个jar就可以了

到这里,就会发现

unity 请求Java接口 unity调用jar包方法_jar_23


打包的时候出错了

这里的 问题就是前面只是简单的修改了

unity 请求Java接口 unity调用jar包方法_jar_24


这里sdk版本的所导致的,然后我又搜了很多的帖子

跟着那个大佬的帖子自己做了对build.gradle文件的修改

unity 请求Java接口 unity调用jar包方法_unity 请求Java接口_25


到这里

unity 请求Java接口 unity调用jar包方法_jar_26


打包jar就顺利完成了

这个包名可以修改的,在前面给build.gradle文件里修改就可以了

总结,开发太痛苦了

但是完成之后的成就感也是太大了

好的,又疯了一个

对了,这里再提一下,这个jar包在unity 里调用的时候只能在真机里测试喔,在编辑器里是测试不了的。用模拟器也可以,不过模拟器的话就不好断点测试啥的了,看个人喜好吧

今晚看看能不能打包出第三方的jar包

同天晚上更新

成功了,第三方的demo里没有什么特别的东西需要注意,直接把他们的java类全部复制粘贴过来然后按照上面的进行打包就好了,过程中遇到的一些数据类型转换和比如获得设备唯一标识码的过程就不多说了

获得唯一标识码的方法

SystemInfo.deviceUniqueIdentifier

返回的是一个string,直接用就行了

总之就是一步一个脚印,慢慢往前冲吧!

补充一下,unity编辑器升级到2019版还是能访问到的