使用AS接入sdk 给unity

在使用as接入安卓原生sdk时候,遇到了很多坑,这里做一下记录,希望帮到有缘人!

一,配置

  由于要提供给unity使用,而sdk大多是采用原生接入,所以我这里要接成类库导入给unity调用。对于unity-安卓交互不了解的去补一下再来。方式我采用arr包而不是jar包因为相对更方便,快捷,安全。

1:在as中创建module,选择 android lib,并设置模块名,对应的包名也是这个,所以对于有一些sdk需要在特定的包里的可以直接设置,也可以自定义包名后在创建对应的子包就可以了。

2,将要接入的sdk包放到libs文件夹下边 同时将unity的类库放入 classes.jar

       

     放入的包需要添加依赖项,jar包可以直接右键,点击add as library ,或者去module下的build.gradle 里边配置

     api 可以使用这几个:

     

    

     打码的是你导入的包的名字,第三个是arr包的方式 第二个要是全路径,‘libs/’+包名

二,接入代码

大部分初始化等都需要在application或者mainactivity中,而我们刚创建的类库都是空的,需要自己定义 

在你的包名右键,点击new-activity -baseactivity 创建空活动页,并自定义名字,勾上launcher,

将上图layout文件夹删除

然后去配置文件(AndroidManifest 。xml)这一部分都清掉,此时你的脚本还在报错,同样将报错的全部删除,不需要,再将appcompatActivity 改为 UnityPlayerActivity

然后你就可以接入对应的代码........

三,提供接口

  按照接入指南,你只能是在安卓端的,你需要为unity提供接口调用,比如初始化init等,

 定义public方法,可以带参数,如string ,int 等。来接受unity传入的数据

一般的接入我们不只需要unity去传入,还要接受安卓返回的数据,回调。

 UnityPlayer.UnitySendMessage("Receiver", "CallUnity", "您取消了授权! ");

第一个是unity需要接受的脚本挂载的物体名字,第二个为脚本上的public方法,第三个为参数,你可以在unity这个方法中处理数据

然后有些会涉及到信息提示,比如结果状态等,可以用下边方法提示,原生的提示,一定时间后就会消失的

Toast.makeText(MainActivity.this, errorCode , Toast.LENGTH_SHORT).show();

errorcode  为你要展示的信息内容

四,打包aar

 sdk中提到的配置文件,manifest,混淆代码,路径xml等都先不管,直接打包,这些我们要放到unity中,包体在output下

然后将这个包拖到UN体验的plugins\Android 文件夹下,同样将manifest拖入,并双击打开,按照要求修改

导入后自定义交互脚本,调用相应的方法,进行交互.....

  交互方式:  做一个工具类,方便!

/// <summary>
/// unity 和安卓交互类
/// </summary>
public static class AndroidTools
{
    private static AndroidJavaClass jc;
    private static AndroidJavaObject jo;


    /// <summary>
    /// 发送给android的
    /// </summary>
    /// <param name="methordName"></param>
    /// <param name="args"></param>
    public static void CallAndroid(string methordName, object[] args=null)
    {
#if UNITY_ANDROID && !UNITY_EDITOR
        if (jo == null)
        {
            Init();
        }
        if (args != null)
            jo.Call(methordName, args);
        else
            jo.Call(methordName);
#endif
    }
#if UNITY_ANDROID 
    /// <summary>
    /// 和安卓通信s
    /// </summary>
    /// <param name="methordName"></param>
    /// <returns></returns>
    public static T CallAndroid<T>(string methordName)
    {

          return jo.Call<T>(methordName);
    
    }
#endif

    /// <summary>
    /// 初始化
    /// </summary>
    private static void Init()
    {
        jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");//com.unity3d.player.UnityPlayer
        jo = jc.GetStatic<AndroidJavaObject>("currentActivity");//currentActivity
    }
}

五,unity打包

   正常情况下是可以打出来的,但是更多时候是会失败的。

 1,设置keystore ,自己创建或者使用现有的,不会的 可以百度,很简单

 2,untiy playersetting 里的包名是不能跟aar包一致的, 第一,二个框都是com.xx.xx,你的module的包名,第三个是名字,最后一个xx

       

3,你可能会遇到theam报错,就是安卓主题的,根据提示,打开aar包找到文件,跟主题相关的都删掉,删掉lib是下的calssses包,进res文件夹,values 的stringxml只留一个包名的代码,其他的都删掉。

4,然后你又可能还会失败,Program type already present: com.crush.gogo.BuildConfig 这是你包重复了,arr中libs下的包不要在放unity里  Trying to add file to the list of ouptut files in the build report, but.... 

 如果出现一些奇怪的报错,直接再丢进去这几个包就行了,支持包

去这里下载:https://download.csdn.net/download/nt_xs_j/12074031

5,还有,可能会有一些asset文件,路径啥的,按照人家说的,在plaugins/android 下创建对应的

6,如果还有问题,可以来信,一块研讨!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值