一.前序准备

基础知识相关文章:https://blog.csdn.net/jiaxunnanling/article/details/89947744

新建工程,并引入Unity内置jar包相关文章:https://blog.csdn.net/jiaxunnanling/article/details/90268239

二.如何扩展 

由于Unity发布Android的Apk时,只包含一个主Acitivity,俗称MainActivity,可以通过扩展该Activity,达到预期效果。通过引入Unity内置的Android的Jar库,并继承库中的UnityPlayerActivity。

Unity内置的Android的Jar库地址在Unity目录:Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

其中classes.jar就是Unity内置的Android的Jar库,这是扩展MainActivity需要使用的库。

Unity在发布Android的Apk时

如果没有在目录Plugins/Android(Unity特殊目录)存放AndroidManifest文件,Unity会使用默认的AndroidManifest文件 。

如果存在AndroidManifest文件,Unity会使用该AndroidManifest文件替换默认的AndroidManifest

扩展Unity的MainActivity时,注意AndroidManifest配置的主要Activity入口,例如使用自己扩展的AndroidManifest代替Unity默认的AndroidManifest,这样Activity入口就是我们自定义的Activity入口。

关于AndroidManifest的合并,可以参考基础知识:https://blog.csdn.net/jiaxunnanling/article/details/89947744

三. 案例演示(导出Arr包)

如何引入Unity内置的jar包可以参考 :https://blog.csdn.net/jiaxunnanling/article/details/90268239

在模块的这个目录下,右键新建一个空的Activity,不知道新建模块的可以参考:

https://blog.csdn.net/jiaxunnanling/article/details/90268239

Unity与Android交互-扩展Unity的MainActivity_第1张图片

Unity与Android交互-扩展Unity的MainActivity_第2张图片

目录结构,移除不必要的东西

Unity与Android交互-扩展Unity的MainActivity_第3张图片

修改MainAcitivity的代码,继承UnityPlayerActivity

package com.huowu.add;import android.os.Bundle;import com.unity3d.player.UnityPlayerActivity;public class MainActivity extends UnityPlayerActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);    }}

修改AndroidManifest的文件内容,可以从其他地方复制过来再修改 

<?xml version="1.0" encoding="utf-8"?>                                                                    

 

 在MainActivity中,添加一个加法运算方法,相当于扩展UnityPlayerActivity的功能

package com.huowu.add;import android.os.Bundle;import com.unity3d.player.UnityPlayerActivity;public class MainActivity extends UnityPlayerActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);    }    //加法运算    public int Add(int num1,int num2)    {        int sum = num1 + num2;        return sum;    }}

 

 选择该模块,选择菜单条的Build=>Make Module '模块名'

Unity与Android交互-扩展Unity的MainActivity_第4张图片

 编译好了之后,在目录build=>outputs=>arr

Unity与Android交互-扩展Unity的MainActivity_第5张图片

复制一份arr出来,用压缩软件,推荐使用7z,打开arr包,跟jar包的区别里面包含有很多文件

打开libs,把里面的classes.jar删掉,这是我们之前导入的Unity内置的jar包,为什么要删掉,在基础知识提过,Unity打包的时候会把内置的jar包引入,如果这个arr包也引入了,就会产生冲突。

 Unity与Android交互-扩展Unity的MainActivity_第6张图片

 把arr包里面的AndroidManifest文件复制一份出来,作为自定义的AndroidManifest文件,用来替换Unity默认的AndroidManifest文件。

Unity与Android交互-扩展Unity的MainActivity_第7张图片

把Arr包与AndroidManifest文件,一起放入Unity工程中的Assets目录下Plugins/Android(没有这些目录就创建) 

Unity与Android交互-扩展Unity的MainActivity_第8张图片

新建脚本,AndroidToUnity,挂载到UI文本组件上界面,涉及到的内容,可以参考基础知识:https://blog.csdn.net/jiaxunnanling/article/details/89947744

using System.Collections;using System.Collections.Generic;using UnityEngine;using  UnityEngine.UI;public class AndroidToUnity : MonoBehaviour{    public Text text; //用来显示结果值    private AndroidJavaClass androidJavaClass; //获取Unity发布的唯一MainActivity类    private AndroidJavaObject androidJavaObject;//获取Activity对象    public void Awake()    {         text = this.GetComponent();        //Unity要导出的MainActivity类            androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");        //获取MainActivity的实例对象           androidJavaObject = androidJavaClass.GetStatic("currentActivity");          }    public void Start()    {        Add();    }    public void Add()    {        //调用Android写好的add的方法,并传参,获取结果值        int sum = androidJavaObject.Call("Add",5,5);        text.text = "从Android计算出来的值为:" + sum;    }}

 

 发布APK,运行在模拟器的结果

Unity与Android交互-扩展Unity的MainActivity_第9张图片

四. 导出Jar包

Build Module后,打开目录build=>intermediates=>packaged-classes=>debug

以及 build=>intermediates=>manifest=>full=>debug

(注意我的AndroidStudio版本是3.1.3,其余的版本的目录可能不一样)

Unity与Android交互-扩展Unity的MainActivity_第10张图片

 复制build=>intermediates=>packaged-classes=>debug中的classes,该目录下的libs是我们之前引用的Unity内置jar包,所以不需要复制出来,如果是其他jar包就需要一同复制出来。

复制 build=>intermediates=>manifest=>full=>debug目录下的AndroidManifest文件。

把classes和AndroidManifest文件一起导入的Unity工程下的Assets/Plugins/Android目录下,按照导出arr包时,编写AndroidToUnity一样,运行的效果是一样的。

区别在于Jar包没有过多的文件,相关联的文件需要自己去找。

Arr包已经把涉及到的资源都整理成一套了。

更多相关文章

  1. android 4.0 以上平台选择图片报错Attempted to access a cursor
  2. android Java BASE64编码和解码二:图片的编码和解码
  3. Android设置Selector不同状态下颜色及图片
  4. android学习笔记(4)-android的文件的操作模式与单元测试
  5. 更改Android模拟器中的hosts文件
  6. android 5.1拍照后图片镜像处理
  7. 【Androidd Release】AndroidStudio 发布apk 提示资源文件未翻译
  8. Android:安装APK包以后系统文件目录的变化
  9. Error : android studio 中mipmap引用.9图片出错

随机推荐

  1. 最近研究有关Android中的TextView
  2. Android中像素相关说明
  3. Android(安卓)study(1)--Intent
  4. Android(安卓)GridView 添加 网格线解决
  5. Android(安卓)== 简单的binder通信
  6. Android(安卓)Hook 机制之简单实战
  7. android 进程间通信原理
  8. 电脑无法安装Android设备驱动
  9. android -- 测试器 AVD 虚拟设备
  10. 使用CMake来进行Android(安卓)NDK开发