unity 在 Android 端开发的时候,免不了要调用 Java;Unity 可以通过两种方式来调用 Android:一是调用 jar、二是调用 aar。
这篇文章主要讲解怎么从无到有的生成一个 jar 包,然后 unity 怎么调用 jar。
一、通过 Android studio 生成 jar 包。
首先,在 Android studio 上面新建一个工程。
选择你要发布的 Android 版本,注意:要和 unity 保持一致。
选择 empty activity
默认的 activity name 不用动,直接点 finish
找到 unity 的安装路径 D:\****\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
复制 class.jar 到 Android studio\Project\app\libs
在 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:\AndroidStudio\MyJDK\MyJava 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 脚本里添加如下代码
- 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 value=javaClass.Call<string>("test");
- GUI.Label (new Rect(10,10,500,500),value);
- } catch (System.Exception ex) {
- GUI.Label (new Rect(10,10,500,500),ex.ToString());
- }
- }
- }
打包场景,搞定。
Android 模拟器运行结果:
来源: http://www.cnblogs.com/Jason-c/p/6743224.html