Unity直接调用Java SDK的方法与步骤

.接SDK是个什么样的活计?

SDK的工作流程:

1. 从unity端出发,向安卓发起一系列的请求(unity call android)。

2. 安卓端收到unity端调用,然后在具体调用SDK的一系列接口(android内部调用)

3. SDK服务器处理之后得到结果,再返回给安卓(网络通信)

4. 安卓获得SDK结果,然后回调unity方法,将结果传回unity端(android call unity)


我们需要做的:

1. 在安卓端,将SDK集成进入 Android的 MainActivity(或者其他Activity),为Unity的调用做好接口

2. 将做好的安卓接口,打成jar包,以插件的形式,集成到Unity中去,供unity使用

3. 编写Unity端的调用 函数与响应函数,完成SDK接入。

2.unity 与 android 的通信:

unity  Call android:

登录后复制

1 //获取名为UnityPlayer的类
2 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
3 
4 //获取当前运行的Activity
5 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
6 
7 //调用UnityPlayer类中的函数
8 var result  = jo.Call<返回结果类型>("函数名称","函数参数1","函数参数2",……);

android Call unity:

登录后复制

UnityPlayer.UnitySendMessage("场景中GamObject名字","该Obj身上脚本的一个方法名",返回值(字符串类型));

3.实际操作

3.1 准备工作

  1. 安卓开发环境,因为我们需要扩展UnityActivity,并且将扩展过后的结果打成 .jar包放入Unity,所以,我们需要 Android Studio 或者Eclipse+ADT,作者使用的Android Studio3.01.(下载网址:http://www.androiddevtools.cn/ )
  2. SDK源文件,这个看你需要接入什么SDK,去官网下载即可。
  3. Unity 的Android classes.jar文件,这里面定义了unity 在安卓中的各种行为,我们在编写代码的时候,需要用到这里面的接口。(路径为:\Editor\Data\PlaybackEngines\androidplayer\release\bin\classes.jar  )

3.2开始创建Android工程

unity直接调用java文件 unity怎么调用sdk_android

unity直接调用java文件 unity怎么调用sdk_Android_02

unity直接调用java文件 unity怎么调用sdk_unity直接调用java文件_03

unity直接调用java文件 unity怎么调用sdk_android_04


经过以上步骤,一个完整的Android项目就算是创建好了,如下图:

unity直接调用java文件 unity怎么调用sdk_unity直接调用java文件_05

3.3 导入Jar包

切换到Project视图,将在3.1中准备好的unity 的classes.jar文件、SDK的.jar文件复制到 App/libs文件夹下面

unity直接调用java文件 unity怎么调用sdk_android_06

将导入的.jar文件 作为依赖项导入到项目中去,导入成功之后,jar包就可以展开了,可以看到里面的信息。(具体做法为:右键点击jar包,有一个 add as library 选项,点击该选项即可)

3.4编写Unity Android交互接口

  • 将项目切换到 Android结构,然后到java目录下,开始编写交互接口。
  • 说道这里,提一下Android 应用的运行机制。在 安卓应用中,有许多个Activtiy,这些Activity,可以当做是unity的一个scene。在应用启动的时候首先会启动一个MainActivity,而这个MainActivity,是在Applicationmainfest.xml中配置的。而我们想要在安卓应用启动起来的时候,就进行初始化SDK,然后调用各个接口,那么我们就需要编写这样一个MainActivity对应的脚本,并且将其配置到 ApplicationMainfest.xml文件中去。
  • 我们可以自己写一个新的Activity,也可以直接使用默认生成的Activity,这里我们直接在生成的MainActivity.java中进行编写交互代码。

登录后复制

//1.首先,将 MainActivity继承的父类改为UnityPlayerActivity 
public class MainActivity extends UnityPlayerActivity {

    //这里是自动生成的,相当于Mono的Awake()函数,用于初始化操作
    
       @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
    
//unity调用Android接口
    public void UnityCallAndroid(int a, int b,string symbol)
    {
         String result;
        switch (symbol){
            case "+":
                result ="加法结果:"+(a+b);
                break;
            case "-":
                result ="减法结果:"+(a-b);
                break;
            case "*":
                result="乘法结果:"+(a*b);
                break;
            default:
                result="未知运算:"+"a="+a+",b="+b;
        }
        
        AndroidCallUnity(result);
    }

//安卓调用Unity接口
 public void AndroidCallUnity(String result){
        UnityPlayer.UnitySendMessage("SDK","ShowMsg",result);
    }

            
}

3.5更改gradle配置

打开Gradle Scripts/build.gradle(Module:app)文件

unity直接调用java文件 unity怎么调用sdk_Android_07

unity直接调用java文件 unity怎么调用sdk_jar_08

在该文件最下方添加如下代码:


登录后复制

task deleteOldJar(type:Delete){
    //打出的旧版本jar
    delete 'build/outputs/test.jar'
}

task exportJar(type:Copy){
    
    from('build/intermediates/bundles/release/')
    //打出jar包的文件目录
    into('build/libs/')
    include('classes.jar')
    rename('classes.jar','test.jar')
}

exportJar.dependsOn(deleteOldJar,build)

3.6打包

点击右上角 Gradle->:app->Tasks->other->exportJar 即可开始打包

unity直接调用java文件 unity怎么调用sdk_unity直接调用java文件_09

3.7创建Unity工程

这个就简单了,直接New 一个 project就行了,需要注意的是:

  1. File -> Build Setting -> Player Settings -> Other Settings ->Bundle Identifier中的字符串,要与在创建 Android工程时的 Company damon保持一致
  2. 在Assets下创建 Plugins/Android目录

将上面打出的Jar包,放到Plugins/Android目录下,然后编写Unity的调用代码:

登录后复制

//调用安卓函数
   public void CallAndroid()
    {
        AndroidJavaClass jc=  new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo= jc.GetStatic<AndroidJavaObject>("currentActivity");
        jo.Call("UnityCallAndroid",8,3,"+");

    }

  //安卓调用Unity的函数
    public void ShowMsg(string str){
        unityResultShow.text = str;
    }
    
    

新建一个Unity场景,创建一个空的物体,命名为"SDK",然后将编写的脚本附上去。

最后,将unity打包成apk,上手机安装即可测试。

问题:

1.Conflict with Dependency

登录后复制


1 Error:Execution failed for task ':app:preDebugAndroidTestBuild'.
2 > Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for app (26.1.0) and test app (27.1.1) differ. See https://d.android.com/r/tools/test-apk-dependency-conflicts.html for details.

解决方案

登录后复制

//在build.gradle(Module:App)文件的dependencies中添加如下代码

  androidTestCompile('com.android.support:support-annotations:26.1.0') {
        force = true
    }
    
    

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空