2018年安卓巴士全球开发者论坛-深圳站
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 工程
最后,开启我们的爽歪歪之路吧~
这一步需要去你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。
首先定义如下布局样式,以方便接下来我们的测试:
随后编辑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);
}
// 定义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目录
点击右侧Gradle,选择刚刚新建的Lib工程,点击other,如下图:
找到exporJar,用力双击:
成功会有如下提示:
下面查看生成的Jar包:
Ok,到此,Android打Ja包告此一段落,可以简单的松口气了~
喝杯茶,抽根烟,让我们继续开动~
在Assets目录下创建Plugins、Android以及libs目录,如下:
将Jar包拷贝到libs目录下:
如上图,导入时需要注意,Windows环境下需要使用WinRAR打开并删除buildConfig文件,具体原因请看文章开头异常总结。
接下来复制相关资源文件:
修改后如下:
<?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" />
关联很Easy,点击Main Camera,选择右侧下方的Add Component,搜索刚刚创建的Test确定即可。
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.");
}
}
}
点击File,选择Build Setting…
这里需要配置Id也就是包名以及最小兼容版本号,如下图:
这里需要注意一点,首次运行会出现如下异常:
问题原因如下:
我们先来看下TestActivity继承关系:
TestActivity extends AppCompatActivity
它依赖 com.android.support:appcompat-v7:26.1.0 ,所以针对目前这种情况,LZ给出俩个解决方案:
TestActivity extends Activity: android.app.Activity
下载对应v7包,拷贝Unity Libs目录下即可。
https://github.com/HLQ-Struggle/UnityDemo
大家都在看
好文章来之不易,分享至朋友圈让更多朋友受益
欢迎巴友留言,一起探讨成长