Android与Unity交互--接入安卓原生SDK

因技术更新,发现以前的文章有些过时,一些地方跟不上目前进度了,导致开发中出现一大堆问题,所以参考之前的一些文章整理了一下,希望对大家有所帮助。

工具

  • Unity2020
  • AndroidStudio 2021

AndroidStudio 操作

1.依然创建一个新的空项目 ,点击Next。
在这里插入图片描述
2.根据自己需要设置项目名称和包名,记住MinSDK 这里API等级,之后在Unity发布时也要和它同步设置。然后点击Finsh。
在这里插入图片描述
3.创建好就是这样了。点击Android下拉列表,选择Project。这两个可以删掉,没啥用(有没有用我也不知道),但是删掉没啥影响。
在这里插入图片描述
4.然后找到build.gradle这个文件,双击打开。把箭头1所指处改为:id ‘com.android.library’。箭头2所指删掉。点击Sync Now编译一下。
在这里插入图片描述
5.在unity引擎安装目录下Editor\Data\PlaybackEngines\AndroidPlayer\Variations 有两个文件夹il2cpp和mono,根据Unity中所选的语言编译进行选择,进入文件夹后在Release/Classes中找到jar包,复制到Android studio项目中libs文件夹下。右键jar包,添加到依赖。
在这里插入图片描述
6.由于Unity2019之后(好像是),jar包内不包含UnityPlayerActivity.java这个类,所以得自己手动加一下,在mono文件夹返回上一级,找到Source文件夹可以得到该文件。然后复制到com文件夹下。
在这里插入图片描述
7.然后双击MainActivity类打开,修改基类,使其继承自UnityPlayerActivity。

package com.wsetjin.monkey;

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);
        //setContentView(R.layout.activity_main);注释掉这一行
    }

    public int CallBackSurprise(){
    
    
        return 666;
    }
    
    public String GetDeviceId(){
    
    
        String deviceId = null;
        String android_id = Secure.getString(getBaseContext().getContentResolver(), Secure.ANDROID_ID);
        //deviceId = getDeviceId();
       return android_id;
    }
public String GetUUID()
    {
    
    
        String serial = "";
        try {
    
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    
    
                serial = Build.getSerial();
            } else {
    
    
                serial = Build.SERIAL;
            }
            //serial = Build.class.getField("SERIAL").get(null).toString();
            //return serial;
        } catch (Exception exception) {
    
    
            //serial需要一个初始化
            serial = "serial"; // 随便一个初始化
            //return serial;
        }
        String m_szDevIDShort = "28" +
                Build.BOARD.length()%10+ Build.BRAND.length()%10 +

                Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 +

                Build.DISPLAY.length()%10 + Build.HOST.length()%10 +

                Build.ID.length()%10 + Build.MANUFACTURER.length()%10 +

                Build.MODEL.length()%10 + Build.PRODUCT.length()%10 +

                Build.TAGS.length()%10 + Build.TYPE.length()%10 +

                Build.USER.length()%10 ; //13 位
        return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
    }
}

8.ok就要离成功不远了,接下来修改AndroidMainfest.xml。图片里忘了加一句代码,补在下方 在intent-filter节点结尾处下边添加上。

 <meta-data android:name="unityplayer.UnityActivity" android:value="true"/> 

在这里插入图片描述
9.最后–选择菜单栏Build->Make Moudle’你的项目名’,build完成后会在项目中创建一个build文件夹,在intermediates/aar_main_jar选择jar包,用解压软件打开,删除里面unity3d文件夹,避免在unity发布时重复。然后导入unity中 。将AndroidMainfest.xml也导入unity。

10.Android stuio操作就结束了。


Unity的操作

  • 创建脚本,我就简单的写个测试脚本。
	void Start()
    {
    
    
		AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
		AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
		int value = jo.Call<int>("CallBackSurprise");
	}

最后发布,大功告成

猜你喜欢

转载自blog.csdn.net/qq_39556084/article/details/126261789