欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity与AndroidStudio简单交互

程序员文章站 2022-07-14 21:36:46
...

实现:用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
    Unity与AndroidStudio简单交互
    说明;
    在App模块也能操作,需要修改一些东西,此处是新建模块搞
    Unity与AndroidStudio简单交互
    生成如图:
    Unity与AndroidStudio简单交互
  2. 在该项目上新建一个模块(项目完全生成完才会出现新建模块的选项)
    Unity与AndroidStudio简单交互
    Unity与AndroidStudio简单交互
    注意·:包名一定要与unity的包名相同,生成后更改配置文件中的包名无效,若不相同,配置文件错误,会造成apk运行闪退。Mini SDK的话应该与Unity保持一致,不一致没试过。
    Unity与AndroidStudio简单交互
    3.给新建的模块添加一个Empty Activity
    注意:在Android或Project下都可以
    Android结构下:
    Unity与AndroidStudio简单交互
    Project结构下:
    Unity与AndroidStudio简单交互
    注意:
    第一个:不勾,由于在unity中运行,所以不需要Android布局视图。勾上的话,会在res->layout下生 成一个.xml文件,删除掉也行。
    第二个:暂且不勾
    Unity与AndroidStudio简单交互
  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文件
Unity与AndroidStudio简单交互
设置作为library:
Unity与AndroidStudio简单交互
5.修改Activity:
由于上面添加了unity的classes.jar作为库,所以可以继承UnityPlayerActivity
Unity与AndroidStudio简单交互
代码如下:

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

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
Unity与AndroidStudio简单交互
则会出错:
Unity与AndroidStudio简单交互
Unity与AndroidStudio简单交互
解决办法:
参考:
https://forum.unity.com/threads/android-project-multiple-dex-files-define-lcom-android-vending-billing-buildconfig.408823/
删除libs下classes.jar中的BuildConfig.class,重新打包就可以了
Unity与AndroidStudio简单交互
情况二 :Build System设置为Internal
能直接打包成功
Unity与AndroidStudio简单交互
运行log:
Unity与AndroidStudio简单交互

相关标签: Unity与Android交互