Unity调用Android的两个方式:其一、调用jar包

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

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

一、通过Android studio生成jar包。

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

Unity调用Android的两个方式:其一、调用jar包

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

Unity调用Android的两个方式:其一、调用jar包

选择empty activity

Unity调用Android的两个方式:其一、调用jar包

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

Unity调用Android的两个方式:其一、调用jar包

找到unity的安装路径D:\****\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

Unity调用Android的两个方式:其一、调用jar包

复制class.jar到Android studio\Project\app\libs

Unity调用Android的两个方式:其一、调用jar包

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

Unity调用Android的两个方式:其一、调用jar包

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

Unity调用Android的两个方式:其一、调用jar包

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

Unity调用Android的两个方式:其一、调用jar包

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

Unity调用Android的两个方式:其一、调用jar包

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

类似这样

Unity调用Android的两个方式:其一、调用jar包

或者这样

Unity调用Android的两个方式:其一、调用jar包

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

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" /> 
Unity调用Android的两个方式:其一、调用jar包

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

打开app的build.gradle

Unity调用Android的两个方式:其一、调用jar包

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

Unity调用Android的两个方式:其一、调用jar包

在下面添加如下代码

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)

Unity调用Android的两个方式:其一、调用jar包

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

Unity调用Android的两个方式:其一、调用jar包

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

Unity调用Android的两个方式:其一、调用jar包

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

Unity调用Android的两个方式:其一、调用jar包

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

Unity调用Android的两个方式:其一、调用jar包

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

Unity调用Android的两个方式:其一、调用jar包

二、unity调用jar包

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

Unity调用Android的两个方式:其一、调用jar包

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

Unity调用Android的两个方式:其一、调用jar包

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

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

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

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

我们继续

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

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

Unity调用Android的两个方式:其一、调用jar包

在test脚本里添加如下代码

 using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class Test : MonoBehaviour { void OnGUI()
{
//方法一
try {
var javaClass = new AndroidJavaObject("com.hello.world.MainActivity");
string value1=javaClass.Call<string>("test");
GUI.Label (new Rect(,,,),value1);
} catch (System.Exception ex) {
GUI.Label (new Rect(,,,),ex.ToString());
}
//方法二
try {
AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");
string value2=jo.Call<string> ("test");
GUI.Label(new Rect(,,,),value2);
} catch (System.Exception ex) {
GUI.Label (new Rect(,,,),ex.ToString());
} }
}

打包场景,搞定。

Android模拟器运行结果:

Unity调用Android的两个方式:其一、调用jar包

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

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

Unity调用Android的两个方式:其一、调用jar包

2、打开后是这样子的

Unity调用Android的两个方式:其一、调用jar包

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

Unity调用Android的两个方式:其一、调用jar包

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

求关注啊,同志们

上一篇:无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)


下一篇:Codeforces_499C:Crazy Town(计算几何)