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