Unity与Android的通信
Android
- 下载eclipse,连接https://pan.baidu.com/s/1Bc2xZGgXr8cC6NMN1QK0iQ
- 下载Java的JDK,从Java官网上下载或用我在压缩包中提供的jdk1.7也行
- 配置java JDK的运行环境,这个自己百度就行,网上一大堆
- 打开eclipse,在eclipse工具和AndroidSDK\eclipse工具\新建文件夹\android-sdk-windows\android-sdk-windows\eclipse 目录下,打开后设置Android SDK的版本
- 点击窗口上方的Window/Preference选项
- 创建一个Android工程
接下来一路next,直到finish创建一个工程为止 - 第一次创建项目你会发现自动生成了一个appcompat_v7工程,并且还会报错
appcompat_v7是Google自己的一个兼容包,就是一个支持库,能让2.1以上全使用上4.0版本的界面,处理办法关闭项目再次打开就行了,要想创建项目不出现appcompat_v7,在开始创建项目时设置SFD版本4.0以上就行 - 导入unity的classes.jar
- 写测试通信方法
- 最后到处jar包
最后finih,产生一个jar文件,后面再Unity中使用
Unity
1_ . 创建一个和Jar包通信的脚本,代码如下
using UnityEngine;
using System.Collections;
public class MySDK : MonoBehaviour
{
public static void Call(string msg)
{
#if UNITY_IPHONE //苹果环境
#endif
#if UNITY_ANDROID && !UNITY_EDITOR //android和非uniyty编辑器环境
CallAndroid(msg);
#endif
}
private static void CallAndroid(string msg)
{
Debug.Log("MySDK_Call--------CallAndroid");
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");//定义AndroidJavaClass 对象
Debug.Log("MySDK_Call--------CallAndroid-->jc---->" + jc);
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");//得到个AndroidJavaObject对象
Debug.Log("MySDK_Call--------CallAndroid-->jo---->" + jo);
jo.Call("Test");//调用jar包的Test方法
jo.Call("Text1", msg);//调用jar包的Test1方法
jo.Call("Text2", 1, 2);//调用jar包的Test2方法
Debug.Log("MySDK_Call--------CallAndroid结束");
}
}
2_. 在Unity中创建3个按钮,添加脚本Test
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Test : MonoBehaviour
{
//在外面拖拽,组件对象
public Button test;
public Button test1;
public Button test2;
void Start()
{
test.onClick.AddListener(TestClick);
test1.onClick.AddListener(Test1Click);
test2.onClick.AddListener(Test2Click);
}
/// <summary>
/// 测试Test方法点击
/// </summary>
public void TestClick()
{
Debug.Log("测试Test方法点击");
MySDK.Call("Unity测试Test方法点击--->");
}
/// <summary>
/// 测试Test1方法点击
/// </summary>
public void Test1Click()
{
Debug.Log("测试Test1方法点击");
MySDK.Call("Unity测试Test1方法点击--->");
}
/// <summary>
/// 测试Test2方法低级
/// </summary>
public void Test2Click()
{
Debug.Log("测试Test2方法点击");
MySDK.Call("Unity测试Test2方法点击--->");
}
/// <summary>
/// 接收jar的方法
/// </summary>
/// <param name="msg"></param>
public void OnCallBack(string msg)
{
Debug.Log("这是Unity接收jar的方法信息--->" + msg);
}
}
3_. ①在Unity的Plugins目录中新建Android文件夹,在Android目录下新建libs和res目录,libs是放项目引用的各种jar文件的,res是存放项目的资源如图片,注意我们在创建Android项目时引入Unity的class.jar文件,但这个文件不能放在libs下,因为Unity本身都自带有这个jar包,也就是说jar不能重复。
②将Android中res文件夹下的内容拷贝Unity 的res中,但只需保留其中的几个文件夹,具体保留项如下图
③最后将Android工程的XML文件拷贝到Unity的Plugins目录中新建Android文件夹下,在修改XML
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xianwanqipai.qipailaile"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="23" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="GA测试"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<activity
android:name=".MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
4_. 将刚才自己创建的jar包和android-support-v4.jar放在libs目录下
5_.最后打包设置
修改Bundle Identifier和keystore(不会自己百度),
有可能打包失败,如出现应用未安装–>是手机已经存在一个包名一样的app了,闪退说明的Plugins的设置有问题
6_.在项目中导入log插件
https://pan.baidu.com/s/1msXlwtOEElH1iiuJqlFYpw
如果项目用的是UGUI,需要注释一些代码
7_.测试app安装到手机,打开后,点击测试测试Test()按钮,在屏幕转几下,看log
8_项目地址
https://gitee.com/GAXM/communication_test_project_between_unity_and_android.git
在java项目中如果已经有appcompat_v7工具,压缩包中的appcompat_v7就不需要了