zoukankan      html  css  js  c++  java
  • Unity调用Android的两种方式:其一、调用jar包

    unity在Android端开发的时候,免不了要调用Java;Unity可以通过两种方式来调用Android:一是调用jar、二是调用aar。

     这篇文章主要讲解怎么从无到有的生成一个jar包,然后unity怎么调用jar。

    一、通过Android studio生成jar包。

    首先,在Android studio上面新建一个工程。

    选择你要发布的Android 版本,注意:要和unity保持一致

    选择empty activity

    默认的activity name不用动,直接点finish

     

    找到unity的安装路径D:****EditorDataPlaybackEnginesAndroidPlayerVariationsmonoReleaseClasses

    复制class.jar到Android studioProjectapplibs

    在Android studio的file 找到Project Structure... 点击

    接下来找到app,找到dependdencies,点击右边的+号,选择第二个 2 file dependency

    找到 libs下刚导进去的class.jar, 点击OK

    接下来就是在MainActivity里编写接口了

    将MainActivity继承UnityPlayerActivity,然后删掉setContentView(R.layout.activity_main); 如果不继承UnityPlayerActivity也是可以的,

    类似这样

    或者这样

     选择其中的一种编写来接口

    package com.hello.world;
    
    import android.os.Bundle;
    import android.util.Log;
    
    import com.unity3d.player.UnityPlayerActivity;
    
    public class MainActivity extends UnityPlayerActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
      //接口
        public String test()
        {
            Log.v("测试","成功");
            return "测试成功";
        }
    
    }
    

     在AndroidManifest.XML中添加 <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> 

    OK,目前为止准备工作已经完成了,接下来该打jar包了

    打开app的build.gradle

     将apply plugin: 'com.android.application' 改为apply plugin: 'com.android.library' 删掉 defaultConfig 下的 applicationId "com.hello.world"

    在下面添加如下代码

    task makeJar(type: Copy) {
        delete 'build/libs/unitylib.jar'
        from('build/intermediates/bundles/release/')
        into('build/libs/')
        include('classes.jar')
        rename('classes.jar', 'unitylib.jar')
    }
    
    makeJar.dependsOn(build)
    

     

    打开Terminal 输入gradlew makeJar 然后敲回车

    我之前更新Android SDK的时候更改过路径,就会报错: Could not find tools.jar. Please check that D:AndroidStudioMyJDKMyJava cont

    解决的方法是在gradle.properties中配置一下路径就OK了:org.gradle.java.home=D:\AndroidStudio\MyJDK\JDk

    显示这样就说明jar打包成功了

    打好的jar包就在app/build/libs下

    二、unity调用jar包

    新建一个工程,将unity切换到Android平台,点击player Setting

    将unity的包名和Android的版本设置的和jar包的一样

    扩展:unity和调Android有两种方法:

    一种是通过AndroidJavaClass类,建立在AndroidJNIHelper的基础上

    一种是通过AndroidJavaObject类,建立在AndroidJNI的基础上是AndroidJavaClass的父类

    在这里我们通过AndroidJavaObject来调用,简单。还有一个原因,通过AndroidJavaClass调用时,打包的时候光报错,搞了两天也没解决bug, 心中万匹草泥马奔腾而过,所以果断放弃了这个方法,有兴趣的同学可以研究一下,回头教教我。

    我们继续

    在assets先创建Plugins/Android,主要名字别写错了,在Android studio中找到jar包,把它放在Android文件夹下,

    添加脚本test,保存场景为test

     在test脚本里添加如下代码

     1 using System.Collections;
     2 using System.Collections.Generic;
     3 using UnityEngine;
     4 
     5 public class Test : MonoBehaviour {
     6 
     7     void OnGUI()
     8     {
     9         //方法一
    10         try {
    11             var javaClass = new AndroidJavaObject("com.hello.world.MainActivity");
    12             string value1=javaClass.Call<string>("test");
    13             GUI.Label (new Rect(10,10,500,500),value1);
    14         } catch (System.Exception ex) {
    15             GUI.Label (new Rect(10,10,500,500),ex.ToString());
    16         }
    17         //方法二
    18         try {
    19             AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
    20             AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");
    21             string value2=jo.Call<string> ("test");
    22             GUI.Label(new Rect(20,20,500,500),value2);
    23         } catch (System.Exception ex) {
    24             GUI.Label (new Rect(20,20,500,500),ex.ToString());
    25         }
    26 
    27     }
    28 }

     打包场景,搞定。

    Android模拟器运行结果:

    如果你按我上面的步骤进行的,或者看其他人写的教程,Unity在Build时都一样报错,那么恭喜你,你将终结这个噩梦。

    1、找到Android studio工程里的values/styles.xml

     

    2、打开后是这样子的

    3、同志们,重点来了,简单粗暴一点,将styles.xml里的东西统统删掉,只留下如下内容

    OK了,重新生成jar包,然后放心的扔到Unity了Build去吧,绝对不会再有问题了。

    求关注啊,同志们

  • 相关阅读:
    火币交易细则
    期货基础知识(竞价,定价,保证金计算)
    期货开平,多开,空开,多平,空平
    最优风险资产组合
    为什么不要把鸡蛋放在同一个篮子里?
    Linux shell 自定义函数
    Linux shell for while 循环
    shell 脚本编写 if else then
    linux任务前后台执行
    Mac 破解Navicat Premium Mac12
  • 原文地址:https://www.cnblogs.com/Jason-c/p/6743224.html
Copyright © 2011-2022 走看看