Unity通过Jar包调用Android

我们会需要面对下面几个问题,我们一个一个来解决:

  1. 怎样在Android Studio中打Jar包
  2. 怎样打一个Unity使用的Jar包
  3. 怎样在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包,具体代码如下:

  1. //定义一个函数,target是生成jar包的文件名,classDir是class文件所在的文件夹
  2. def makeJar(String target,String classDir){
  3. exec{
  4. executable "jar"//调用jar
  5. args "cvf",target
  6. args "-C", classDir
  7. args "","."
  8. }
  9. }
  10. //新建一个task,名为buildLib,依赖build(build是一个自带的task)
  11. task buildLib(dependsOn:['build'])<<{
  12. makeJar("class.jar","build/intermediates/classes/release")
  13. }
  14. task buildJar(){
  15. makeJar("ASTest.jar","build/intermediates/classes/release")
  16. }

打开底部任务栏的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

  1. package com.xys.unitytestactivity;
  2. import android.content.Context;
  3. import android.net.wifi.WifiInfo;
  4. import android.net.wifi.WifiManager;
  5. import android.os.Bundle;
  6. import com.unity3d.player.UnityPlayerActivity;
  7. publicclassUnityTestActivityextendsUnityPlayerActivity{
  8. /** Called when the activity is first created. */
  9. Context mContext =null;
  10. @Override
  11. publicvoid onCreate(Bundle savedInstanceState){
  12. super.onCreate(savedInstanceState);
  13. mContext =this;
  14. }
  15. publicstaticint num =0;
  16. publicstaticintGetNum()
  17. {
  18. num++;
  19. return num;
  20. }
  21. publicint obtainWifiStrength(){
  22. WifiManager wifi_servicve =(WifiManager) getSystemService(WIFI_SERVICE);
  23. WifiInfo connectionInfo = wifi_servicve.getConnectionInfo();
  24. int level = connectionInfo.getRssi();
  25. return level;
  26. }
  27. }

UnityTestActivity是主Activity,Unity程序一启动就会调用这个Activity,他是在AndroridManifest.xml中配置的.他需要继承UnityPlayerActivity,就是我们刚刚引入的class.jar包中的接口类.接着我们配置本程序的AndroidManifest.xml,这个很重要,一定要配置.
AndroidManifest.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.xys.unitytestactivity">
  4. <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
  5. <application
  6. android:allowBackup="true"
  7. android:icon="@drawable/icon"
  8. android:label="@string/app_name"
  9. android:supportsRtl="true"
  10. android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
  11. <activityandroid:name=".UnityTestActivity">
  12. <intent-filter>
  13. <actionandroid:name="android.intent.action.MAIN"/>
  14. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  15. </intent-filter>
  16. </activity>
  17. </application>
  18. </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

  1. usingUnityEngine;
  2. usingUnityEngine.UI;
  3. usingSystem;
  4. publicclassTest:MonoBehaviour
  5. {
  6. privatestaticfloat xValue;
  7. privatestaticfloat yValue;
  8. privatestaticfloat zValue;
  9. publicText myText;
  10. privateString wifiStrength;
  11. privateAndroidJavaClass jc;
  12. privateAndroidJavaObject jo;
  13. voidStart()
  14. {
  15. jc =newAndroidJavaClass("com.unity3d.player.UnityPlayer");
  16. jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
  17. }
  18. // Update is called once per frame
  19. voidUpdate()
  20. {
  21. if(Input.GetKey(KeyCode.Escape))
  22. {
  23. Application.Quit();
  24. }
  25. xValue = jo.CallStatic<int>("GetNum");
  26. yValue = jo.Call<int>("obtainWifiStrength");
  27. ChangeWifiStrength();
  28. }
  29. privatevoidChangeWifiStrength()
  30. {
  31. if(wifiStrength != yValue.ToString())
  32. wifiStrength = yValue.ToString();
  33. myText.text =string.Format("wifi strength :{0}", wifiStrength);
  34. }
  35. }

打包注意:Unity中PlayerSetting的Bundle Identifier要与Android工程保持一致,否则无法调用
打包到真机上,现在能够显示WIFI强度了

Unity通过Jar包调用Android的更多相关文章

  1. Unity 安卓Jar包的小错误

    好久没写博客了,也就意味着好久没有学习了,近几天在搞Unity接入有米的SDk遇到了一点小错误,今天早上解决了,和大家分享下! 1,我们的目的是在在U3D中调用Android产生的Jar包,首先在Ec ...

  2. AndroidStudio给Unity打jar包

    环境: AndroidStudio2.0 Unity4.68 AS打jar包 新建空工程 删除无用的MainActivity等. 新建Module Module选择Android Library,起名 ...

  3. Android:导入所需的系统jar包到Android studio

    1. 修改对于的AIDL文件,根据编译信息获知所需的jar包. mmm /frameworks/base/ show commands > log.txt 2>&1 out/tar ...

  4. 【jar包】Android——eclipse共享library以及导出jar包

    android的apk在在eclipse上进行开发的时候,有时候需要import其它包中的一些class,正常的方法就是在java build path中library 中添加 jar 包! 转载注明 ...

  5. Java中Jar包调用命令行运行编译

    原文链接:https://www.toutiao.com/i6491877373942694413/ 记事本编写两个简单的类 文件结构目录 启动DOS,进入文件所在目录 进入到class所在文件的目录 ...

  6. jar包调用jar包内部和外部的配置文件

    http://blog.csdn.net/lpftobetheone/article/details/32689467 **************************************** ...

  7. 可执行Jar包调用动态链接库(DLL/SO)

    踩过了很多的坑,查了很多资料,在此记录一下,以SpringBoot项目为基础. Maven加入JNA依赖 <!-- JNA start --> <dependency> < ...

  8. 针对发送网络附件的java方法(使用Apache的jar包调用)

    1.先要在pom.xml文件中引入对应的jar包 <!--添加邮件的网络附件 start--> <dependency> <groupId>org.apache.c ...

  9. 可运行jar包调用exe可运行文件,子进程阻塞

    背景: 须要在项目的測试工具中加入一个button,点击后直接打开某exe工具. 这个工具的功能是导入txt文件,转为excel报表输出. 无奈解析了两行之后就停止不动了,也不报错.关闭測试工具后,就 ...

随机推荐

  1. ARMv8 内存管理架构.学习笔记

    http://blog.csdn.net/forever_2015/article/details/50285955 版权声明:未经博主允许不得转载,请尊重原创, 谢谢!   目 录 第1章 分级存储 ...

  2. 声明式语法重写基于容器CICD构建流水线

    调试了一下午,一句话都不想说了,看代码. ----- 参考文档 https://blog.csdn.net/weixin_42010394/article/details/90670945 实践代码 ...

  3. ASP.NET Core学习——6

    依赖注入DI ASP.NET Core的底层设计支持和使用依赖注入.ASP.NET Core应用程序可以利用内置的框架服务将它们注入到启动类的方法中,并且应用程序服务能够配置注入. 1.什么是依赖注入 ...

  4. JS-MiniUI:百科

    ylbtech-JS-MiniUI:百科 MINIUI是一款优秀的JS前端web框架,提供丰富.强大控件库,能快速开发企业级Web应用软件.该软件以美观精致的界面和快速的页面响应速度获得用户的好评.是 ...

  5. python 使用yaml模块

    python:yaml模块一.yaml文件介绍YAML是一种简洁的非标记语言.其以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁.1. yaml文件规则基本规则:    大小写敏感   ...

  6. Spring MVC请求参数绑定 自定义类型转化 和获取原声带额servlet request response信息

    首先还在我们的框架的基础上建立文件 在domian下建立Account实体类 import org.springframework.stereotype.Controller; import org. ...

  7. selenium 3 下载 + Java使用

    一.下载Selenium 3 的相关包和工具 Selenium 3 下载的官网地址为http://www.seleniumhq.org/download/.当然,需要翻墙才能登陆selenium的官网 ...

  8. python作业/练习/实战:下载QQ群所有人的头像

    步骤与提示:1.在腾讯群网页中进入任意一个群,获取相关信息,可以用postman是试一下,可以看到我们要的是mems里面的数据,需要获取到QQ号和群名片,如果没有群名片的话取昵称2.根据QQ号下载头像 ...

  9. 这 17 个 JVM 参数,高级 Java 必须掌握!

    作者:SimpleSmile https://www.cnblogs.com/Simple-Object/p/10272326.html前言 大家都知道,jvm在启动的时候,会执行默认的一些参数.一般 ...

  10. bzoj 3517翻硬币

    我们lv老师有点毒瘤啊... n为偶数... 离AC只差一张草稿纸233 挖个坑...