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

本文详细介绍如何在Unity2020与Android Studio2021之间进行集成开发,包括项目配置、jar包处理、代码调整等关键步骤,确保跨平台游戏应用能够顺利构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

工具

  • 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");
	}
最后发布,大功告成
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

付帅v

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值