Unity与AndroidStudio通信学习笔记 IL2CPP打包(02)

本文详细介绍了如何将Unity2020.3.40f1c1LTS工程嵌入到AndroidStudio4.1.3项目中,包括Unity工程的导出、Android项目的创建、依赖配置、NDK设置、包名和SDK版本一致性、以及在Android代码中启动Unity的步骤。此外,还提到了解决编译错误和实现Unity与Android之间的交互功能的方法。
摘要由CSDN通过智能技术生成

Unity嵌入AndroidStudio:

原帖:https://blog.csdn.net/Nbin_Newby/article/details/128065977?spm=1001.2014.3001.5506

仅为学习记录使用。

AndroidStudio版本:4.1.3 稳定版

unity版本:2020.3.40f1c1 LTS

首先建立Unity工程,话不多说直接上图:

导出Android工程: 

 得到如下文件,备用:

接下来创建安卓项目:

 注意包名要和unity里面的一致,sdk版本也要一致

 等待编译完成:

安卓配置如下(不同版本as所需sdk也不一样):

-------------------------------开始配置安卓工程-------------------------------

打开setting.grade添加依赖:

include ':unityLibrary'

打开gradle.properties添加StreamingAsset;

unityStreamingAssets=.unity3d, google-services-desktop.json, google-services.json, GoogleService-Info.plist

安卓要启动Unity工程,所以在主入口build.gradle添加unity的路标(草,我也不知道咋说了)

implementation project(path: ':unityLibrary')

接下来添加ndk(记得换成自己的路径)

ndk.dir=C\:\\Program Files\\Unity\\Hub\\Editor\\2020.3.40f1\\Editor\\Data\\PlaybackEngines\\AndroidPlayer\\NDK

然后再主app添加ndk:

 ndk {
            abiFilters "armeabi", "armeabi-v7a", "x86", "mips","x86_64"
        }

还有最后一个部分在string里面添加

<string name="game_view_content_description">Game view</string>

 -------------------至此安卓环境配置部分全部结束------------------------

  将刚才导出的安卓工程里面的unityLibrary文件夹直接放入安卓工程中,等待编译完成。

 

在安卓里面启动Unity

 添加启动按钮:

 代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="进入Unity场景"
        android:textAllCaps="false"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

然后添加按钮的代码:

代码如下:

package com.zhangsan.dahuilang;


import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn=findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,UnityPlayerActivity.class);
                startActivity(intent);
            }
        });
    }
}

 直接粘贴过来可能会报错如图:

这会只需要搞一下jar包就行了: 

 右键有一个as a library,点一下就行了。

然后如图:

 然后打包,发现一致报错,提示Failed to load ‘libmain.so’

回头把Unity里面的设置改了一下就行了

也可以这样:

 ndk {
           abiFilters "armeabi", "armeabi-v7a", "x86", "mips","x86_64"
       }

 

对了打包后发现有两个图标,这个时候只需要打开unityLibrary里面的 安卓清单文件,删除以下代码即可:

如果只是在安卓启动unity工程以上就可以了,如果有交互部分可以修改Unity场景为:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Test : MonoBehaviour
{
    private AndroidJavaClass androidJavaClass;
    private AndroidJavaObject androidJavaObject;
    private Text msg;
    private Button btn;
    private void Start()
    {
        msg = GameObject.Find("Text").GetComponent<Text>();
        btn = GameObject.Find("Button").GetComponent<Button>();
        androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        androidJavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity");
        btn.onClick.AddListener(CallAndroid);
    }
    public void CallAndroid()
    {
        msg.text = androidJavaObject.Call<string>("BackToUnity");
        Debug.Log("unity调用安卓函数");
    }
}

 然后再安卓里面找到unityLibrary添加java代码:

 private int num;

    //在unity里面调用并返回消息
    public String BackToUnity() {
        num++;
        return "安卓收到Unity消息:"+num;
    }

 打包。

Unity嵌入安卓

结束。 

--------------------------------------分割线---------------------------------------

更新:

如果是新版的androidstudio,安卓的环境配置会有变化

比如需要在清单里面加上这一句:

 android:exported="true"

还有这个:

 implementation project(path:':unityLibrary')
    implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString()+('\\libs'), include: ['*.jar', '*.aar'])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值