Unity与AndroidStudio简单交互

实现:用Android Studio生成unity可用的aar,将aar导入unity实现相互调用
参考:
https://www.jianshu.com/p/c06063a403c6
https://blog.csdn.net/sovechen/article/details/80793315
https://blog.csdn.net/s344951241/article/details/80629550
https://blog.csdn.net/dengshunhao/article/details/80595420

https://blog.csdn.net/BuladeMian/article/details/78387461
https://blog.csdn.net/huangzhenxun/article/details/82587904
https://blog.csdn.net/sovechen/article/details/80793315
https://blog.csdn.net/sinat_23156865/article/details/54143064

生成aar
  1. 新建一个空的project
    在这里插入图片描述
    说明;
    在App模块也能操作,需要修改一些东西,此处是新建模块搞
    在这里插入图片描述
    生成如图:
    在这里插入图片描述
  2. 在该项目上新建一个模块(项目完全生成完才会出现新建模块的选项)
    在这里插入图片描述
    在这里插入图片描述
    注意·:包名一定要与unity的包名相同,生成后更改配置文件中的包名无效,若不相同,配置文件错误,会造成apk运行闪退。Mini SDK的话应该与Unity保持一致,不一致没试过。
    在这里插入图片描述
    3.给新建的模块添加一个Empty Activity
    注意:在Android或Project下都可以
    Android结构下:
    在这里插入图片描述
    Project结构下:
    在这里插入图片描述
    注意:
    第一个:不勾,由于在unity中运行,所以不需要Android布局视图。勾上的话,会在res->layout下生 成一个.xml文件,删除掉也行。
    第二个:暂且不勾
    在这里插入图片描述
  3. 添加unity的classes.jar,直接复制粘贴在libs下
    注意:
    unity中classes.jar的路径有两种:
    (1)G:\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下;
    (2)G:\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes下。

Unity中我们使用的是C#脚本,最终运行在Android上是由于Mono进行转换的,所以我们选用的jar文件是第一个路径下的。如果使用的是il2cpp,就要选择第二个路径下的jar文件
在这里插入图片描述
设置作为library:
在这里插入图片描述
5.修改Activity:
由于上面添加了unity的classes.jar作为库,所以可以继承UnityPlayerActivity
在这里插入图片描述
代码如下:

package com.xxx.xxx;

//import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    public String ForTest()
    {
    	//向unity发送消息
        UnityPlayer.UnitySendMessage("testCube","UnityFun","android msg");
        return "Call ForTest";
    }
}

6.修改配置文件AndroidManifest.xml:
由于新模块的配置文件过于简单,直接从App模块中拷贝过来
在这里插入图片描述
标红的错误直接删除就是:
android:name=".MainActivity">为相对名字,build后直接生成为绝对名字,也可现在就改为绝对名字:
android:name=“com.wenye.test.MainActivity”>
在这里插入图片描述
7.一切Ok,Build 模块,生成arr文件:
在这里插入图片描述
用压缩软件打开,拷贝出来以下文件:
将当前的classer.jar替换libs下的classer.jar
因为libs下的classer.jar便是从unity拷贝的lasses.jar,而外部的classer.jar才是我们编写的代码。
在这里插入图片描述
8. 将libs、res、AndroidManifest.xml放到Unity的Assets/Plugins/Android下:
还有种方法是删除aar文件中libs下的classer.jar,再将arr文件和AndroidManifest.xml放到Unity的Assets/Plugins/Android下貌似也行。
在这里插入图片描述

Unity调用sdk

UnityPlayer.UnitySendMessage(“testCube”,“UnityFun”,“android msg”);

Unity场景新建一个“testCube”,挂载脚本代码如下:

using UnityEngine;

public class testCube : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject javaObject = javaClass.GetStatic<AndroidJavaObject>("currentActivity");
        string rtStr = javaObject.Call<string>("ForTest");
        Debug.Log("unity log: " + rtStr);
    }

    public void UnityFun(string message)
    {
        Debug.Log("unity log: " + message);
    }
}
打包

情况一 :Build System设置为Gradle
在这里插入图片描述
则会出错:
在这里插入图片描述
在这里插入图片描述
解决办法:
参考:
https://forum.unity.com/threads/android-project-multiple-dex-files-define-lcom-android-vending-billing-buildconfig.408823/
删除libs下classes.jar中的BuildConfig.class,重新打包就可以了
在这里插入图片描述
情况二 :Build System设置为Internal
能直接打包成功
在这里插入图片描述
运行log:
在这里插入图片描述

发布了24 篇原创文章 · 获赞 0 · 访问量 644

猜你喜欢

转载自blog.csdn.net/u014589770/article/details/105247486
今日推荐