继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

番外篇之实现Unity和Android进行交互(基于Android Studio 3.1.1以及Jar包方式)

喵喔喔
关注TA
已关注
手记 505
粉丝 103
获赞 606

前言

Hello,大家好,我胡汉三又回来了~!!!
时隔多日不见,有木有一种,士别三日,当刮目想看的赶脚~~~
今天为带来番外篇,为什么叫做番外篇呢,因为没有接触过,哈哈~
不扯犊子了,今天为大家带来Android Studio 3.1.1 打Jar包供Unity使用。

本文目标

通过LZ泪崩的实践,让你我下次面对提供Unity小伙伴Jar包时能够很装逼的来一句,等着,分分钟,都是小意思~

突然有点怀念当年了,哈哈~

基础了解

本文基础环境搭建完毕的小伙伴,如有不懂,可查阅下面俩篇文章:

菜鸡学Unity 之 Untiy 下载(安装)与破解(基于Unity 2017版)

菜鸡学Unity 之 创建项目并预览游戏运行(基于Window平台)

其次,还要额外补充几点,关于Unity配置JDK以及SDK版本:

图片描述

另外,我们还需要记住Unity版本更新的一些和我们有关的特性:

  • Unity 5.x 开始支持使用 aar 文件

  • Unity 5.4 开始导出 Gradle 工程

最后,开启我们的爽歪歪之路吧~

Android 生成Jar

Step 1:创建Android工程

图片描述

Step 2:创建Android Library Module

图片描述

Step 3:去Unity本地安装目录拷贝jar包

这一步需要去你Unity本地安装目录下拷贝Jar包,地址如下:

EditorDataPlaybackEnginesAndroidPlayerVariationsmonoReleaseClassesclasses.jar

这里可能会遇到一个问题,就是在PlaybackEngines目录下找不到AndroidPlayer的问题,这里简单带大家解决下:

这里提供大家几种方式下载Android Support:

方式一:Unity 3D官方直接下载

https://unity3d.com/get-unity/download/archive

方式二:百度网盘下载

链接:https://pan.baidu.com/s/11Fl-4FXk-mm_2DAiG1lp3Q 密码:jcya

方式三:Unity打开Build Settings选择Android,点击右侧Open Download Page

图片描述

接下来就是无脑式安装,各位自行安装即可。

安装完成后,打开Unity安装目录,就会发现AndroidPlayer目录神奇般的出现了~

图片描述

到上面给出的Jar包地址拷贝Jar。

图片描述

Step 4:将拷贝的Jar放置到Android Library Module

图片描述

Step 5:创建Activity,继承自UnityPlayerActivity

图片描述

Step 6:创建测试Activity,并为LoadingActivity对外公开方法

首先定义如下布局样式,以方便接下来我们的测试:

图片描述

随后编辑TestActivity,这里主要有以下几方面内容:

  • 显示图片资源;

  • 测试Unity触发Android按钮事件;

  • 测试Unity往Android传值并显示

So,TestActivity代码如下:

/**
 * author : HLQ
 * e-mail : 925954424@qq.com
 * time   : 2018/4/19
 * desc   : 测试在nity中跳转
 * version: 1.0
 */public class TestActivity extends AppCompatActivity {    private Button mShowBtn;    private TextView mUnityInfoShow;    @Override
    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        initView();
        String msg = getIntent().getStringExtra("UnityTest");        if (!TextUtils.isEmpty(msg)) {
            setUnityText(msg);
        }
    }    private void initView() {
        mShowBtn = findViewById(R.id.btn_show);
        mUnityInfoShow = findViewById(R.id.tv_unity_info_show);
        initEvent();
    }    private void initEvent() {
        mShowBtn.setOnClickListener(new View.OnClickListener() {            @Override
            public void onClick(View v) {
                runOnUiThread(new Runnable() {                    @Override
                    public void run() {
                        Toast.makeText(TestActivity.this, "Unity触发Jar按钮事件", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        });
    }    /**
     * Unity传值 Android Jar 接收并显示
     *
     * @param unityText
     */
    public void setUnityText(String unityText) {
        mUnityInfoShow.setText(unityText);
    }

}

最后,TestActivity中对Unity暴露一个接收值得方法如下:

    /**
     * Unity传值 Android Jar 接收并显示
     *
     * @param unityText
     */
    public void setUnityText(String unityText) {
        Intent startIntent = new Intent(LoadingActivity.this, TestActivity.class);
        startIntent.putExtra("UnityTest", unityText);
        startActivity(startIntent);
    }

Step 7:build.gradle新增打包脚本

// 定义SDK包名称def SDK_BASENAME = "AndroidPlugin"// 定义SDK包版本def SDK_VERSION = "_V1.0.0"// SDK包生成地址def SDK_PATH = "build/libs"// 删除之前的Jar包 保证每一次生成的都是最新的task deleteOldJar(type: Delete) {
    delete SDK_PATH + SDK_BASENAME + SDK_VERSION + '.jar'}task exportJar(type: Copy) {    // 从源地址拷贝
    from('build/intermediates/packaged-classes/release/')    // 存放
    into(SDK_PATH)    // 导入
    include('classes.jar')    // 重命名
    rename('classes.jar', SDK_BASENAME + SDK_VERSION + '.jar')
}// 执行脚本文件exportJar.dependsOn(deleteOldJar, build)

这里需要注意一点,如下:

  • 2.3 之前
    from('build/intermediates/bundles/release/')

  • 2.3 之后
    default和debug debug目录之前也是有的,没有变化,只是原来的release目录被现在的default目录代替了。

  • 3.1 之后
    之前有的bundle目录现在没有了(classes.jar文件在里面),取而代之的是packaged-classes目录

Step 8:执行脚本,开始打包

点击右侧Gradle,选择刚刚新建的Lib工程,点击other,如下图:

图片描述

找到exporJar,用力双击:

成功会有如下提示:

图片描述

下面查看生成的Jar包:

图片描述

Ok,到此,Android打Ja包告此一段落,可以简单的松口气了~

Unity调用Jar包(Unity与Android简单交互)

喝杯茶,抽根烟,让我们继续开动~

Step 1:新建Unity工程,导入Jar包以及资源文件

在Assets目录下创建Plugins、Android以及libs目录,如下:

图片描述

将Jar包拷贝到libs目录下:

图片描述

如上图,导入时需要注意,Windows环境下需要使用WinRAR打开并删除buildConfig文件,具体原因请看文章开头异常总结。

接下来复制相关资源文件:

图片描述

Step 2:复制AndroidManifest并修改

修改后如下:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <application android:label="@string/app_name">
    <activity android:name="com.hlq.hlqlib.activity.LoadingActivity"
          android:label="@string/app_name"
          android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
      <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
    </activity>
    <activity android:name="com.hlq.hlqlib.activity.TestActivity" />
  </application></manifest>

要注意,以下为必填项:

<meta-data android:name="unityplayer.UnityActivity" android:value="true" />

Step 3:创建脚本文件,关联Main Camera

图片描述

关联很Easy,点击Main Camera,选择右侧下方的Add Component,搜索刚刚创建的Test确定即可。

图片描述

Step 4:绘制按钮,调用Jar包

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Test : MonoBehaviour {    // Use this for initialization
    void Start () {
        
    }    
    // Update is called once per frame
    void Update () {
        
    }    void OnGUI()
    {        if (GUI.Button(new Rect(100, 100, 300, 150), "点我啊~"))
        {            // 获取unity的Java类,只能调用静态方法,获取静态属性
            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");            // 获取当前的Activity对象,能调用公开方法和公开属性
            AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
            jo.Call("setUnityText", "This is Unity info.");
        }
    }

}

Step 5: 配置基本属性

点击File,选择Build Setting...

图片描述

这里需要配置Id也就是包名以及最小兼容版本号,如下图:

图片描述

Step 6:点击Build,生成APK,运行查看实例

图片描述

这里需要注意一点,首次运行会出现如下异常:

图片描述

问题原因如下:

我们先来看下TestActivity继承关系:

TestActivity extends AppCompatActivity

它依赖 com.android.support:appcompat-v7:26.1.0 ,所以针对目前这种情况,LZ给出俩个解决方案:

  • TestActivity extends Activity: android.app.Activity

  • 下载对应v7包,拷贝Unity Libs目录下即可。

GitHub查看地址

https://github.com/HLQ-Struggle/UnityDemo

原文链接:http://www.apkbus.com/blog-904057-77606.html

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP