Unity通过Jar包调用Android
Unity通过Jar包调用Android
我们会需要面对下面几个问题,我们一个一个来解决:
- 怎样在Android Studio中打Jar包
- 怎样打一个Unity使用的Jar包
- 怎样在Unity工程中使用这个Jar包
怎样在Android Studio中打Jar包
在Android Studio中打Jar包首先需要保证你的工程可以顺利编译通过,之后有两种方式:
- 使用命令行运行gradlew clean build -> jar cvf yourJarName.jar -C build/intermediates/classes/release,之后在app文件夹下就会生成一 个yourJarName.jar
- 重新设置build.gradle文件,自动生成jar包
这里我们主要来看一看第二种方法.
gradle是一个基于Apachae Ant和Apache Maven概念的项目自动化建构工具.task和project是gradle最主要的东西,所以我们可以建立一个task,调用jar命令帮我们生成jar包,具体代码如下:
//定义一个函数,target是生成jar包的文件名,classDir是class文件所在的文件夹def makeJar(String target,String classDir){exec{executable "jar"//调用jarargs "cvf",targetargs "-C", classDirargs "","."}}//新建一个task,名为buildLib,依赖build(build是一个自带的task)task buildLib(dependsOn:['build'])<<{makeJar("class.jar","build/intermediates/classes/release")}task buildJar(){makeJar("ASTest.jar","build/intermediates/classes/release")}
打开底部任务栏的Terminal,输入gradlew buildLib,执行完之后在你的app文件下就会出现想要的jar包
怎样打一个Unity使用的Jar包
使用Android Studio新建一个空工程,首先我们需要将接口class.jar引入到工程libs文件夹下.接口包所在地C:\Program Files\Unity5.2.3\Editor\Data\PlaybackEngines\androidplayer\Variations\mono\Release\Classes\class.jar,工程目录结构如下图:
(按照上一节的方法设置build.gradle文件)

开始编写JAVA代码
UnityTestActivity.java
package com.xys.unitytestactivity;import android.content.Context;import android.net.wifi.WifiInfo;import android.net.wifi.WifiManager;import android.os.Bundle;import com.unity3d.player.UnityPlayerActivity;publicclassUnityTestActivityextendsUnityPlayerActivity{/** Called when the activity is first created. */Context mContext =null;@Overridepublicvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);mContext =this;}publicstaticint num =0;publicstaticintGetNum(){num++;return num;}publicint obtainWifiStrength(){WifiManager wifi_servicve =(WifiManager) getSystemService(WIFI_SERVICE);WifiInfo connectionInfo = wifi_servicve.getConnectionInfo();int level = connectionInfo.getRssi();return level;}}
UnityTestActivity是主Activity,Unity程序一启动就会调用这个Activity,他是在AndroridManifest.xml中配置的.他需要继承UnityPlayerActivity,就是我们刚刚引入的class.jar包中的接口类.接着我们配置本程序的AndroidManifest.xml,这个很重要,一定要配置.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.xys.unitytestactivity"><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><applicationandroid:allowBackup="true"android:icon="@drawable/icon"android:label="@string/app_name"android:supportsRtl="true"android:theme="@android:style/Theme.NoTitleBar.Fullscreen"><activityandroid:name=".UnityTestActivity"><intent-filter><actionandroid:name="android.intent.action.MAIN"/><categoryandroid:name="android.intent.category.LAUNCHER"/></intent-filter></activity></application></manifest>
之后按照上一节的打包流程,打出Jar包.
注意:在这有一个坑,需要将build\intermediates\classes\release\com\你的包名\你的工程名 下面的R开头的class文件全部删掉,不然在Unity中使用打包时会报错
怎样在Unity工程中使用这个Jar包
开始创建Unity工程.如图所示,Plugins->Android,将AndroidMinifest.xml放入这一层文件夹并建立res文件夹(下面放打包时需要用到的资源,如APP的图标等)和bin文件夹(放刚刚生成的.jar包)
注意:Jar包的名字可以随便修改,但是jar包里面必须是com\你的包名\你的工程名\你需要的class,否则运行程序后提示找不到类文件
在Unity中新建一个Test.cs
Test.cs
usingUnityEngine;usingUnityEngine.UI;usingSystem;publicclassTest:MonoBehaviour{privatestaticfloat xValue;privatestaticfloat yValue;privatestaticfloat zValue;publicText myText;privateString wifiStrength;privateAndroidJavaClass jc;privateAndroidJavaObject jo;voidStart(){jc =newAndroidJavaClass("com.unity3d.player.UnityPlayer");jo = jc.GetStatic<AndroidJavaObject>("currentActivity");}// Update is called once per framevoidUpdate(){if(Input.GetKey(KeyCode.Escape)){Application.Quit();}xValue = jo.CallStatic<int>("GetNum");yValue = jo.Call<int>("obtainWifiStrength");ChangeWifiStrength();}privatevoidChangeWifiStrength(){if(wifiStrength != yValue.ToString())wifiStrength = yValue.ToString();myText.text =string.Format("wifi strength :{0}", wifiStrength);}}
打包注意:Unity中PlayerSetting的Bundle Identifier要与Android工程保持一致,否则无法调用
打包到真机上,现在能够显示WIFI强度了
Unity通过Jar包调用Android的更多相关文章
- Unity 安卓Jar包的小错误
好久没写博客了,也就意味着好久没有学习了,近几天在搞Unity接入有米的SDk遇到了一点小错误,今天早上解决了,和大家分享下! 1,我们的目的是在在U3D中调用Android产生的Jar包,首先在Ec ...
- AndroidStudio给Unity打jar包
环境: AndroidStudio2.0 Unity4.68 AS打jar包 新建空工程 删除无用的MainActivity等. 新建Module Module选择Android Library,起名 ...
- Android:导入所需的系统jar包到Android studio
1. 修改对于的AIDL文件,根据编译信息获知所需的jar包. mmm /frameworks/base/ show commands > log.txt 2>&1 out/tar ...
- 【jar包】Android——eclipse共享library以及导出jar包
android的apk在在eclipse上进行开发的时候,有时候需要import其它包中的一些class,正常的方法就是在java build path中library 中添加 jar 包! 转载注明 ...
- Java中Jar包调用命令行运行编译
原文链接:https://www.toutiao.com/i6491877373942694413/ 记事本编写两个简单的类 文件结构目录 启动DOS,进入文件所在目录 进入到class所在文件的目录 ...
- jar包调用jar包内部和外部的配置文件
http://blog.csdn.net/lpftobetheone/article/details/32689467 **************************************** ...
- 可执行Jar包调用动态链接库(DLL/SO)
踩过了很多的坑,查了很多资料,在此记录一下,以SpringBoot项目为基础. Maven加入JNA依赖 <!-- JNA start --> <dependency> < ...
- 针对发送网络附件的java方法(使用Apache的jar包调用)
1.先要在pom.xml文件中引入对应的jar包 <!--添加邮件的网络附件 start--> <dependency> <groupId>org.apache.c ...
- 可运行jar包调用exe可运行文件,子进程阻塞
背景: 须要在项目的測试工具中加入一个button,点击后直接打开某exe工具. 这个工具的功能是导入txt文件,转为excel报表输出. 无奈解析了两行之后就停止不动了,也不报错.关闭測试工具后,就 ...
随机推荐
- MySQL coalesce函数用法说明(转)
在mysql中,其实有不少方法和函数是很有用的,一个叫coalesce的,作用是将返回传入的参数中第一个非null的值,比如 SELECT COALESCE(NULL, NULL, 1); -- Re ...
- 《一头扎进》系列之Python+Selenium框架实战篇7 - 年底升职加薪,年终奖全靠它!Merry Christmas
1. 简介 截止到上一篇文章为止,框架基本完全搭建完成.那么今天我们要做什么呢????聪明如你的小伙伴或者是童鞋一定已经猜到了,都测试完了,当然是要生成一份高端大气上档次的测试报告了.没错的,今天宏哥 ...
- 96、搬家到csdn
大家好: 今天开始会将所有的博客搬家到CSDN,以后请参考CSDN上的博客:http://blog.csdn.net/u012416045 谢谢 维真
- 大数据学习之BigData常用算法和数据结构
大数据学习之BigData常用算法和数据结构 1.Bloom Filter 由一个很长的二进制向量和一系列hash函数组成 优点:可以减少IO操作,省空间 缺点:不支持删除,有 ...
- Linux下tomcat启动慢,阻塞
声明:本文为转载,请尊重版权,原文地址: https://www.cnblogs.com/songjinju/p/7505564.html 这两天在linux部署完tomcat以后,发现每次启动都非常 ...
- 3. Node_export安装部署
首先我们要知道什么是Node_export?因为Prometheus本身不具备监控功能,我们要通过Prometheus收集数据,需要安装对应的export.如Node_export用于监控服务器状态, ...
- Django框架(十八)—— CBV源码分析、restful规范、restframework框架
目录 CBV源码分析.restful规范.restframework框架 一.CBV源码分析 1.url层的使用CBV 2.as_view方法 3.view方法 4.dispatch方法(可以在视图层 ...
- ansible了解
基础知识: ansible简介 ansible 是个什么东西呢?基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2模板语言,更强的远程命令 ...
- loj6626 幼儿园唱歌题
题目 不难想到把\(S\)的反串\(S^R\)接到\(S\)后面,这样就可以把\(S[l_1,r_1]\)的前缀转化为\(S^R[n-r_1+1,n-l_1+1]\)的后缀 回文树上两节点的lca就是 ...
- Java Socket NIO示例总结
Java NIO是非阻塞IO的实现,基于事件驱动,非常适用于服务器需要维持大量连接,但是数据交换量不大的情况,例如一些即时通信的服务等等,它主要有三个部分组成: Channels Buffers Se ...