前言
Hello,大家好,我胡汉三又回来了~!!!
时隔多日不见,有木有一种,士别三日,当刮目想看的赶脚~~~
今天为带来番外篇,为什么叫做番外篇呢,因为没有接触过,哈哈~
不扯犊子了,今天为大家带来Android Studio 3.1.1 打Jar包供Unity使用。
本文目标
通过LZ泪崩的实践,让你我下次面对提供Unity小伙伴Jar包时能够很装逼的来一句,等着,分分钟,都是小意思~
突然有点怀念当年了,哈哈~
基础了解
本文基础环境搭建完毕的小伙伴,如有不懂,可查阅下面俩篇文章:
其次,还要额外补充几点,关于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官方直接下载
方式二:百度网盘下载
方式三: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查看地址
共同学习,写下你的评论
评论加载中...
作者其他优质文章