Unity接入安卓SDK方法

接入SDK的本质上,就是我们需要在Unity中开发游戏时,用到别人提供的功能,比如说:QQ登录,微信分享,支付,广告等功能。因此,我们需要在Unity中调用别人开发的功能,来嵌入到自己的游戏中。

这里,我们接入SDK的方法使用Unity的Plugin方式。其本质类似于我们将安卓的库导入到unity中,然后在Unity中利用C#访问这个库里面的类,进而在游戏中在合适的时刻调用该类的方法。

这里我们用一种通俗易懂的方式来表达接入SDK的全过程。

Unity接入安卓的SDK就像我们要做一份菜,菜名叫《啤酒鸭》。

我们要做一份美味可口的啤酒鸭,但是目前缺一份啤酒。。我们要自己酿酒的话,太麻烦,最好的办法就是去找啤酒厂家弄一份。好了,现在我们弄来了啤酒。但是弄来的啤酒是用瓶子装起来的,我们不能直接把酒瓶往锅里扔,必须要先将啤酒的瓶盖打开,然后才能使用酒瓶内的啤酒。打开啤酒盖子后,把啤酒倒进锅里进行制作,最后和我们的食材混合在一起,才能做出美味可口的《啤酒鸭》。

接安卓的SDK也可以形容成我们上面的步骤。
1.我们先从网上下载下来SDK文件,就类似于从厂商处弄来整瓶啤酒。
2.把SDK中我们所需要用到的库函数提取出来,放入Unity的这个过程,我们可以认为是打开啤酒的瓶盖,让我们随时可以使用啤酒;
3.把SDK中的库函数在Unity里用C#封装起来供我们使用就可以认为是将啤酒倒入锅里翻炒。

以上过程,最核心的问题在于第二步,如何把需要的库放到Unity中。

以下是方法:(我所使用的工具是Android Studio)
1.将SDK工程文件用Android Studio(后面简称AS)打开,阅读说明文档,找到关键的库文件(*.jar);
2.在AS中新建一个空的工程,然后根据SDK中的说明文档修改其配置文件(AndroidManifest.xml);
3.点击File —-> New—–>New Module,在弹出的页面中选择Android Library(划重点),然后自己定义一个库的名字,新建一个module。
4.我们把步骤1中确定的那些库文件,复制到步骤3中我们自己新建的模块下,放入libs文件夹下。(其实我也不知道是否必须放在这个文件夹下,别人这么放,我也这么放)
5.在目录:模块名—->src—>main—>java—>com.XXX.XXX(包名)目录下新建一个java Class文件。

6.打开这个Class文件,编写我们的java代码,如下:

package com.testlib.maomao.mytestlib;            //这里是我们这个类的包名,这个后面会用到,要记好

import android.app.Activity;
import android.content.Context;

/**
 * Created by maomao on 2017/8/9.
 */

public class MyTestClass {
    private  static Context unityContext;

    private  static Activity unityActivty;

    public  static void init(Context param){
        unityContext = param.getApplicationContext();
        unityActivty = (Activity)param;
    }

    //我们需要调用的方法,这只是一个范例
    public  static int multiply(int num1,int num2){
        //我们可以把SDK中我们要调用的方法放到这里面来,在这个类文件夹中封装一遍。
        //我们要用到几个方法,我们在这个类里面就封装几个这样的方法

        return  num1 * num2;
    }

}

这样一来,我们就拥有了一个类,这个类里包含了我们所需要调用到的SDK里的所有方法。因此,我们只需要把这个类导出成库文件(*.jar),放到Unity中,我们就可以在unity中进行调用了。

7.把我们写的java代码导出成库文件。
在project目录下,左键选中app文件夹,右键—>弹出菜单中选择”Open Module Settings“,在弹出的界面中选择Dependencies选项卡,再点击右上角的+下拉菜单,选中Module denpendency,并选择我们自己在步骤3中所建立的模块。然后Build工程。

8.找到我们的java代码所导出的库文件。目录地址如下: 安卓工程根目录—>我们自己建立的模块名字文件夹—>build—>intermediates—>bundles—>debug—>classes.jar.这个classes文件就是我们自己定义的那个java类文件。这里我们可以把文件重命名一下,便于区分。

9.将库文件放入Unity工程中。把库文件放入:Assets/Plugins/Android/bin 目录下,于此同时,我们在步骤1中所确定的SDK里的那些库文件,也要放入这个文件夹下,并在Assets/Plugins/Android目录下放入我们在步骤2中所修改的AndroidManifest.xml文件。注意,如果你工程中有接入其他的SDK的话,有可能这个文件已经存在,那要注意其中的配置了。具体的可自己查解决方案。

10.在Unity中新建c#文件,调用我们自己的库文件里的函数。具体的参考代码网上也有很多了,下面只给出一个简易版:


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

public class tesst : MonoBehaviour {
    public Text txt;                            //测试用的,用于反馈我们是否成功调用了安卓库中的函数
    AndroidJavaClass unityPlayer;
    AndroidJavaObject currentActivity;
    AndroidJavaClass androidCall;

    // Use this for initialization
    void Start () {

        unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

        //***************下面这段代码划重点*****************************
        //后面括号的内的参数要改成你自己定义的java文件的包名.类名。
        //假如你自己创建的java文件的包名是:com.aaa.bbb.ccc,java类的类名是TestCallAndroid,那么你的参数应该是:com.aaa.bbb.ccc.TestCallAndroid
        androidCall = new AndroidJavaClass("com.testlib.maomao.callgdtlib.CallGdtMethod");         //所返回的androidCall 对象,其实就是我们在Java文件中创建的那个类。
        androidCall.CallStatic("init");         //调用我们创建的Java文件中的init方法。
    }



    private void OnGUI()
    {
        if(GUI.Button(new Rect(100, 300, 450, 300), "Click"))
        {
            int sum = androidCall.CallStatic<int>("multiply");           //调用安卓库里我们自己定义的那个multiply方法,返回一个int
            txt.text = sum.ToString();
        }
    }
}

把这个c#文件挂到Unity中的gameobject上。
至此,导出apk包,在手机或模拟器上测试,就可以看到,我们的游戏中是否成功调用了Android中的方法啦。

博主偷懒,就不上图片了。
转载注明出处!欢迎留言讨论。

相关文章推荐:
http://blog.csdn.net/yang8456211/article/details/51331358

猜你喜欢

转载自blog.csdn.net/q568360447/article/details/77070429