LZ-Says:规矩的背后是自由,自由的背后,是坦然~ ^_^

前言

Hello,大家好,我胡汉三又回来了~!!!

时隔多日不见,有木有一种,士别三日,当刮目想看的赶脚~~~

今天为带来番外篇,为什么叫做番外篇呢,因为没有接触过,哈哈~

不扯犊子了,今天为大家带来Android Studio 3.1.1 打Jar包供Unity使用。

本文目标

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

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

基础了解

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

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

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

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

而关于过程中的异常,则各位老铁移步下面这篇博文:

菜鸡学Unity 之 坑神之路 (记录坑点,不断更新中~)

另外,我们还需要记住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包,地址如下:

\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.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);    }}

最后,LoadingActivity中对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>

要注意,以下为必填项:

"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("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目录下即可。(LZ未测试)

题外话

有些老铁问我,为什么不撸了呢,如下图所示:

以及最惨痛的事儿:

最后:

GitHub查看地址

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

个人公众号

欢迎关注,不定时发布~~~

赞赏

如果感觉不错,不妨赞助LZ~ 3q~~~

参考资料

  1. https://answers.unity.com/questions/1147298/where-can-i-download-android-build-support-531f1.html;
  2. https://blog.csdn.net/builder_taoge/article/details/70170590;

更多相关文章

  1. Android(安卓)Studio下使用AIDL创建和使用远程service
  2. Assets 与 Res android的两大资源的获取 与android studio中asse
  3. Android(安卓)ROM开发(三)——精简官方ROM并且内置ROOT权限,开启Rom
  4. android创建快捷方式来打开应用中特定的Activity
  5. 详解Android(安卓)Surface系统
  6. Android(安卓)各种Context区别
  7. android调试中怎样使用gcc提供的工具
  8. android实现解析webservices
  9. Android(安卓)FFmpeg

随机推荐

  1. Xamarin Mono For Android(安卓)4.6.0700
  2. android数据共享之Content Provider(概念
  3. Android面试题目及其答案
  4. android apk广告去除
  5. android 系统平台的架构
  6. Android框架简介
  7. 如何在android中实现swipe的手势功能及页
  8. Android设计模式系列(6)--SDK源码之享元
  9. 【Android】学习笔记(1)――基本控件一
  10. Android对话框大融合