Unity2019.3.8f1与AndroidStudio3.6.3交互

自从Unity2019.2以后的版本升级以后,各种奇葩事情层次不穷,废了我好久的功夫才能在Android端继承UnityPlayerActivity后正常交互,但是如果不继承UnityPlayerActivity的话,是可以很容易正常交互的,但是我们这里只讲Android端集成UnityPlayerActivity的方式

参考博客:https://blog.csdn.net/weixin_41311377/article/details/106144426

首先创建安卓项目,使用AndroidStudio3.6.3

在菜单栏选择File->New->NewProject创建一个项目

显示选择界面 点击Empty Activity - Next

填写项目名称Unity2Android (这个名可以随便填后面用不到),Minimum SDK 最好和Unity的项目选择一样的

做到这一步你就建成一个新的AS项目了

添加Modules

这个是重点

有两种方式添加

方式一:在菜单栏选择File->New->New Module...

方式二:在菜单栏选择File-> Project Structure

两种方式都可以打开Create New Module窗口

但是两种方式会在Unity中出现不同的效果

方式一:打包成jar包后,放到unity中会出现闪退现象

方式二:打包成jar包后,放到unity中正常调用

一开始我以为方式一出现闪退是因为unity发布设置时的PackageName和安卓包的PackageName不一致导致的,后来将方式一的包名设置一致,依然闪退,将方式二中的包名设置为不一致,依然正常调用

 

所以我们使用方式二:在菜单栏选择File-> Project Structure

 

创建完成以后,添加Unity的jar包,位置:classes.jar路径:Unity(Unity的安装路径下)\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Classes

据我所知classes.jar在Unity2019.2以下的版本中有UnityPlayerActivity类,在Unity2019.2以上的版本中将UnityPlayerActivity取消了不过可以在Unity(Unity的安装路径下)\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player中找到

找到classes.jar包,按下Ctrl+C,进入到项目中的我们刚刚创建的Module下的lib文件夹,选中它,Ctrl+V

lib下的classes.jar包,右键 Add AS Library

添加Unity和安卓的通信类和添加UnityPlayerActivity.java

将Unity(Unity的安装路径下)\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player中的UnityPlayerActivity.java拷贝到u2a\main\java\com.xiaoma.u2a(这里你是自己的包名)中

在u2a\main\java\com.xiaoma.u2a中新建一个Empty Activity,

此时你的文件结构应该如下图

设置AndroidStudio自动导入包

File->Settings->Editor->General->Auto Import

编写MainActivity.java

package com.wish.utoa;

import android.os.Bundle;
import android.widget.Toast;

import com.unity3d.player.UnityPlayer;

public class MainActivity extends UnityPlayerActivity  {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public void UnityCallAndroid () {

        Toast.makeText(this,"unity调用android成功", Toast.LENGTH_LONG).show();

        AndroidCallUnity();
    }
    //android调用unity
    public void AndroidCallUnity () {

        //第1个参数为Unity场景中用于接收android消息的对象名称
        //第2个参数为对象上的脚本的一个成员方法名称(脚本名称不限制)
        //第3个参数为unity方法的参数
        UnityPlayer.UnitySendMessage("receiveObj", "UnityMethod", "This is args.");
    }
}

修改我们创建的Module中的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wish.utoa">

    <application>
        <!-- 这个android:name的值必须为包名+类名-->
        <activity android:name="com.wish.utoa.MainActivity">
            <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>
    </application>

</manifest>

修改build.gradle,添加打包jar的代码

注意这个build.gradle是我们刚刚创建的Modules的build.gradle文件不是项目的build.gradle

我们刚刚创建的Modules的build.gradle位置在

在末尾添加

android {....}
dependencies {....}

task deleteOldJar(type: Delete) {
    delete 'release/AndroidPlugin.jar'
}

//task to export contents as jar
task exportJar(type: Copy) {
    from('build/intermediates/aar_main_jar/release/')
    into('release/')
    include('classes.jar')
    ///Rename the jar
    rename('classes.jar', 'AndroidPlugin.jar')
}

exportJar.dependsOn(deleteOldJar, build)

发布包我们有两种方式:

方式一:发布.arr包

方式二:发布.jar包

2019.2以下的可以使用方式一,因为.aar包中包括了所有的资源,AndroidManifest.xml、lib文件夹、.jar包等

但是我们使用的是2019.3.8

为什么呢?原因不知道,但是我经过多次测试,如果发布.aar包,哪怕将.aar包里面的资源删除的只剩下项目所必须的.jar包和AndroidManifest.xml,放到Plugins/Android/文件夹下,Unity发布安卓后,在小米9pro上运行时程序都会出现两个图标,还不能正常调用安卓代码,但是我解压后,将两个文件取出来,放到Plugins/Android/文件夹下后,再次发布就能运行正常,不知道在其他机型上有没有这个问题

所以我们发布.jar包

在我们写下build.gradle中的代码后,点击右上角SyncNow,然后就可以在右上角的Gradle->项目名称->创建的Module名称->Task->other->exportJar

双击exportJar,我们就会在创建的Module名字->release文件夹下找到我们需要放在Unity中的.jar包

选中.jar包,右键Show In Explorer,打开.jar包所在目录

将.jar包复制到Unity项目的Assets/Plugins/Android/目录下

将AndroidManifest.xml也一起复制到该目录下

 

然后选中.jar包,使用WinARA压缩管理器打开(不是解压),进到目录底层将BuildConfig.class删除,否则发布时会报错

然后便可以发布了

注意:不能讲.jar包放到Plugins/Android/Lib文件夹下,否则会闪退,可以放到Plugins/Android/目录或者Pligins/Android/bin目录下面

亲测可用

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值