第三方SDK框架接入 (Android Studio)一 Android

Android 与 Unity 交互:

 UnityPlayer.UnitySendMessage("string","string", var2);

UnitySendMessage(“string”,“string”, ***),这是方法,我们至少需要传入两个参数,第一个参数为unity中的一个gameobject名称,第二个参数为这个gameobject身上捆绑的脚本中的一个方法,而第三参数事实上是这个对应方法上的参数,有没有参数就看你自己的需求了

Unity 与 Android

     private AndroidJavaObject GetAndroidJavaObject(){AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");return jc.GetStatic<AndroidJavaObject>("currentActivity");}private AndroidJavaObject sdk{get { return _sdk ?? (_sdk = GetAndroidJavaObject()); }}private AndroidJavaObject _sdk;public void ShowToolBar(){sdk.Call("requestShowToolBar");}

Call 方法和 UnitySendMessage 方法都是固定的形式,只是参数不一样而已。想了解更深的东西自行百度吧。

新建一个Library

我们采用Android Studio 打包成jar给Unity项目。怎么操作,百度一大堆,这里就不描述了。
1.新建一个Library


这里说明一下,我们需要把unity的classes.jar文件添加到我们的libs引用中去,因为我们的Activity需求继承于UnityPlayerActivity才能实现和Android 和 unity 之间的交互。

新建MyActivity类

package com.example.unitylibrary;import com.unity3d.player.UnityPlayerActivity;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;/*** Created by LJ on 2019/5/11.*/public class MyActivity extends UnityPlayerActivity {// public static MyHandler myHandler;public static Activity currentActivity;private API apl;@Override protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);currentActivity = this;// myHandler = new MyHandler();apl = new API();apl.requestInit(0);}@Override protected void onStart() {super.onStart();apl.onStart();}@Override protected void onRestart(){super.onRestart();apl.onRestart();}@Override protected void onPause(){super.onPause();apl.onPause();}@Override protected  void onResume(){super.onResume();apl.onResume();}@Override protected void onStop() {super.onStop();apl.onStop();}@Override protected  void  onDestroy(){super.onDestroy();apl.onDestroy();}@Override public  void  finish() {super.finish();apl.finish();}public void requestLogin(){apl.requestLogin();}public void requestLogout(){apl.requestLogout();}public  void requestExit(){apl.requestExit();}public  void requestHideToolBar(){apl.requestHideToolBar();}public  boolean requestHasUserCenter(){return apl.requestHasUserCenter();}public  void requestEnterUserCenter(){apl.requestEnterUserCenter();}public  boolean requestHasCustomerCenter(){return apl.requestHasCustomerCenter();}public  void requestEnterCustomerCenter(){apl.requestEnterCustomerCenter();}public  void requestHasForum(){apl.requestHasForum();}public  void requestEnterForum(){apl.requestEnterForum();}public boolean requestCommand(String command,String arg0){return apl.requestCommand(command, arg0);}public  String requestConfig(String key){return apl.requestConfig(key);}public boolean requestUpgrade(String downloadUrl){return apl.requestUpgrade(downloadUrl);}public void  reportRoleInfo(String reason, String roleID, String roleName, String roleLevel, String roleGemder,String rolePower, String roleCreatedTime, String roleLoginAt, String roleLogoutAt,String roleProfessionId, String roleProfession, String roleServerId, String roleServerName,String roleUnionId, String roleUnionName, String roleUnionMemberId, String  roleUnionMemberName,String  roleFriendIds, String roleVipLevel, String roleVipExp, String roleDiamondCoun, String  roleGoldCoins){apl.reportRoleInfo(reason, roleID, roleName, roleLevel, roleGemder, rolePower, roleCreatedTime, roleLoginAt, roleLogoutAt, roleProfessionId, roleProfession, roleServerId, roleServerName, roleUnionId, roleUnionName, roleUnionMemberId, roleUnionMemberName, roleFriendIds, roleVipLevel, roleVipExp, roleDiamondCoun, roleGoldCoins);}public void requestPay(String goodID, String goodName, String goodCount, String firstRewardCount, String goodrewardCount,String quantifier, String currency, String price, boolean isFirstPaymentOfGoods, String cpOrderId,String callbackUrl, String extraParams){apl.requestPay(goodID, goodName, goodCount, firstRewardCount, goodrewardCount, quantifier,currency, price, isFirstPaymentOfGoods, cpOrderId, callbackUrl, extraParams);}public void reportPaymentResult(String goodID, String goodName, String goodCount, String firstRewardCount, String goodrewardCount,String quantifier, String currency, String price, boolean isFirstPaymentOfGoods, String rewardCount,String success){apl.reportPaymentResult(goodID, goodName, goodCount, firstRewardCount, goodrewardCount, quantifier,currency, price, isFirstPaymentOfGoods, rewardCount, success);}}
/*
class MyHandler extends Handler {public MyHandler() {}public MyHandler(Looper L) {super(L);}// 子类必须重写此方法,接受数据@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case SDKUtility.INIT: {Log.i("UNITY", "调用了sdk初始化方法");}break;case SDKUtility.LOGIN: {Log.i("UNITY", "调用了sdk登陆方法");}break;case SDKUtility.LOGOUT: {Log.i("UNITY", "调用了sdk登陆出方法");}break;case SDKUtility.PAY: {Log.i("UNITY", "调用了sdk支付方法");}case SDKUtility.GAMECENTER: {Log.i("UNITY", "调用了sdk游戏中心方法");}break;default:break;}}
}*/

MyActivity 类 提供底层的所有接口。功能不在这个类实现。他只是负责接口的调度。我们新建一个实现接口的APL类。

package com.example.unitylibrary;import android.util.Log;import com.unity3d.player.UnityPlayer;/*** Created by LJ on 2019/5/11.*/public class API {public void onStart(){Log.i(SDKUtility.tag,"onStart");}public void onRestart(){Log.i(SDKUtility.tag,"onRestart");}public void onResume(){Log.i(SDKUtility.tag,"onResume");}public void onStop(){Log.i(SDKUtility.tag,"onStop");}public void onPause(){Log.i(SDKUtility.tag,"onPause");}public void onDestroy(){Log.i(SDKUtility.tag,"onDestroy");}public void finish(){Log.i(SDKUtility.tag,"finish");}//---------------------------------------------------------------------------------------黄金分割线---------------------------------------------------------------------------------------/*** sdk初始化* @param flag*/public void requestInit(int flag ){Log.i(SDKUtility.tag,"初始化");}//初始化成功private void InitSuccess(){Log.i(SDKUtility.tag,"初始化成功");requestLogin();}//初始化失败private void InitFail(){Log.i(SDKUtility.tag,"初始化失败");String str ="";UnityPlayer.UnitySendMessage("PlatformSdkHelper","SdkInitHandler", str);}/*** sdk登陆*/public void requestLogin(){Log.i(SDKUtility.tag,"requestLogin");}//sdk登陆成功private void LoginSuccess(){Log.i(SDKUtility.tag,"sdk登陆成功");}//sdk登陆失败private void LoginFail(){Log.i(SDKUtility.tag,"sdk登陆失败");}/*** 登出*/public void requestLogout(){Log.i(SDKUtility.tag, "requestLogout");}//登出成功public  void LogOutSuccess(){Log.i(SDKUtility.tag,"sdk登出成功");}//登出失败public  void LogOutFail(){Log.i(SDKUtility.tag,"sdk登出失败");}public void requestExit(){Log.i(SDKUtility.tag, "requestExit");}/*** 游戏中心*/public static void GameCenter(){Log.i(SDKUtility.tag, "GameCenter");}public void requestShowToolBar(){Log.i(SDKUtility.tag, "requestShowToolBar");}public void requestHideToolBar(){Log.i(SDKUtility.tag, "requestHideToolBar");}public boolean requestHasUserCenter(){Log.i(SDKUtility.tag, "requestHasUserCenter");return  false;}public void requestEnterUserCenter(){Log.i(SDKUtility.tag, "requestEnterUserCenter");}public boolean requestHasCustomerCenter(){Log.i(SDKUtility.tag, "requestHasCustomerCenter");return false;}public void requestEnterCustomerCenter(){Log.i(SDKUtility.tag, "requestEnterCustomerCenter");}public boolean requestHasForum(){Log.i(SDKUtility.tag, "requestHasForum");return false;}public void requestEnterForum(){Log.i(SDKUtility.tag, "requestEnterForum");}public boolean requestCommand(String command,String arg0){Log.i(SDKUtility.tag, "requestCommand");return  false;}public String requestConfig(String key){Log.i(SDKUtility.tag, "requestConfig");return "";}public boolean requestUpgrade(String downloadUrl){Log.i(SDKUtility.tag, "requestUpgrade");return false;}public void reportRoleInfo(String reason, String roleID, String roleName, String roleLevel, String roleGemder,String rolePower, String roleCreatedTime, String roleLoginAt, String roleLogoutAt,String roleProfessionId, String roleProfession, String roleServerId, String roleServerName,String roleUnionId, String roleUnionName, String roleUnionMemberId, String  roleUnionMemberName,String  roleFriendIds, String roleVipLevel, String roleVipExp, String roleDiamondCoun, String  roleGoldCoins){Log.i(SDKUtility.tag, "reason: " + reason + " roleID" + roleID + " roleName" + roleName + " roleLevel" + roleLevel + " roleGemder" + roleGemder+ " rolePower" + rolePower + " roleCreatedTime" + roleCreatedTime + " roleLoginAt" + roleLoginAt + " roleLogoutAt" + roleLogoutAt+ " roleProfessionId" + roleProfessionId + " roleProfession" + roleProfession + " roleServerId" + roleServerId + " roleServerName" + roleServerName+ " roleUnionId" + roleUnionId + " roleUnionName" + roleUnionName + " roleUnionMemberId" + roleUnionMemberId + " roleUnionMemberName" + roleUnionMemberName+ " roleFriendIds" + roleFriendIds + " roleVipLevel" + roleVipLevel + " roleVipExp" + roleVipExp + " roleDiamondCoun" + roleDiamondCoun + " roleGoldCoins" + roleGoldCoins);}public void requestPay(String goodID, String goodName, String goodCount, String firstRewardCount, String goodrewardCount,String quantifier, String currency, String price, boolean isFirstPaymentOfGoods, String cpOrderId,String callbackUrl, String extraParams){Log.i(SDKUtility.tag , "goodID: " + goodID + " goodName" + goodName + " goodCount" + goodCount + " firstRewardCount" + firstRewardCount+ " goodrewardCount" + goodrewardCount+ " quantifier" + quantifier+ " currency" + currency + " price" + price + " isFirstPaymentOfGoods" + isFirstPaymentOfGoods+ " cpOrderId" + cpOrderId + " callbackUrl" + callbackUrl + " extraParams" + extraParams);}public void  reportPaymentResult(String goodID, String goodName, String goodCount, String firstRewardCount, String goodrewardCount,String quantifier, String currency, String price, boolean isFirstPaymentOfGoods, String rewardCount,String success){Log.i(SDKUtility.tag , "goodID: " + goodID + " goodName" + goodName + " goodCount" + goodCount+ " firstRewardCount" + firstRewardCount+ " goodrewardCount" + goodrewardCount+ " quantifier" + quantifier+ " currency" + currency+ " price" + price+ " isFirstPaymentOfGoods" + isFirstPaymentOfGoods+ " rewardCount" + rewardCount+ " success" + success);}
}

API类的理解:

API主要是实现MyActivity的接口,接入第三方SDK的相关代码都在这里完成,如: 初始化,登录,支付 ,信息上传等等,
接SDK的时候,几乎都是抄代码,你只需要写好一个模板。根据第三方的文档对着抄就可以了。

导出jar




双击exportJar等待生产的AndroidPlugin.jar文件,将他拷贝到unity的Plugins/Android目录下。
工程下载链接

Unity 第三方SDK框架接入 (Android Studio)相关推荐

  1. android unity 关闭应用_使用Android Studio在安卓平台Profile Unity应用

    0x00 前言 大家常常会抱怨安卓平台没有一个统一.好用的性能检查工具.不能像iOS的instrument那样方便. 比如,Unity Blog在3年前就已经教大家如何使用instrument来进行性 ...

  2. android9.0谷歌框架cdsk,Android Studio项目适配AndroidX(Android 9.0)的方法步骤

    说在前面: 老项目.大项目适配Android X 注意了,一定要谨慎.谨慎.再谨慎.项目中用到的第三方库多的话会很麻烦,有些第三方库还没有适配Android X. 适配Android X的两种情况:一 ...

  3. 【Unity3D】Android 打包 ④ ( Android 工程打包 | Unity 中导出安卓工程 | Android Studio 打开 Unity 导出的 Android 工程 )

    文章目录 一. Android 工程打包 二. Android Studio 打开 Unity 导出的 Android 工程 一. Android 工程打包 Android 工程打包 就是将 Unit ...

  4. android sdk字体设置,Android Studio常用设置(设置ide主题、安装插件、设置编码区字体、自定义sdk位置)...

    1 设置ide主题和字体 大家刚下载下来的时候,感觉是不是有点儿怪怪的,有点儿2003的感觉,还好,stuido提供修改主题,和window设置主题一样,File->setting->ap ...

  5. android sdk插件开发教程,Android Studio Plugin 插件开发教程(二) —— 插件SDK中的常用对象介绍...

    项目源码 系列教程 先树立一个概念,AS里项目的一切都可以视为对象,比如整个项目,项目里的每个文件,文件里的每个方法.每行语句等等都是一个对象.我们插件SDK的开发,主要工作就是针对这一个个的对象的分 ...

  6. Android studio接入高德SDK(1)--获取地址信息

    1.创建一个Empty Activity 的应用项目 a.File->New->New Project b.选择Phone and Table -> Empty Activity - ...

  7. Unity项目导入Android Studio项目 --Androis Studio小白

    前言:Unity项目,项目需求接入推送SDK,选择的是 友盟的U-Push SDK.在Android Studio接入SDK后再把unity项目打包导入Android Studio.本篇主要讲述如何将 ...

  8. 如何做Android第三方SDK准入测试

    最近在做客户端测试的过程中,自己负责的功能模块涉及到了第三方SDK的接入.准入测试,期间自己也踩了不少坑,所以特此写一篇文章总结一下. 先说一下SDK的概念吧,sdk就是软件工具开发包(外语全称:So ...

  9. 使用 Android Studio 跑新浪微博SDK Demo遇到的问题及解决

    概述 这是新浪微博官方 Android SDK Demo 使用 Android Studio 导入.编译并运行通过的版本. 源码:WeiboSdkDemo 官方项目请点击: weibo_android ...

最新文章

  1. 从程序媛到启明星辰集团云安全总经理,郭春梅博士揭秘云时代安全攻防之道...
  2. 自学python的书籍-不可错过的十本Python好书
  3. 机器人彩铅画_彩铅画嗔
  4. 把图片保存到数据库的实现
  5. 【渝粤教育】国家开放大学2018年秋季 1021t劳动与社会保障法 参考试题
  6. linux环境下redis5.0的安装配置
  7. (79)FPGA复位激励(initial)
  8. html table 转置,jQuery+CSS实现的table表格行列转置功能示例
  9. nRF52840(一) 环境搭建
  10. 卫星导航信号结构变化的过去,现在和未来
  11. 反射+自定义属性拼接sql
  12. C语言,移动鼠标获得当鼠标当前位置坐标
  13. c语言多文件编译 实例霓虹灯,单片机51c语言编程20种不同霓虹灯亮法
  14. 百度知道怎样引流?如何把有共同需求的人精准地引导给我们?
  15. 香帅的北大金融学课笔记 -- 房地产特辑
  16. .Net开发 开发工具使用vs C盘占用空间不断增大
  17. 线性代数28——复矩阵和快速傅立叶变换
  18. 五霸七雄 细数ERP春秋(转)
  19. Android camera预览流程
  20. 用Origin绘图软件绘制图表-用theme

热门文章

  1. 使用学信网认证,免费获取JetBrains学习产品
  2. 用jQuery提取到input中value值 checked选择器
  3. 虚拟机+服务器管理器怎么打开,大话西游2特色版虚拟机镜像一键服务端+启动教程+物品ID+GM设置方法+数据库工具等...
  4. UserAgent个人整理
  5. cairo填充_Cairo图形指南
  6. 自由浏览器 android,Safari、Android Browser合占移动浏览器半壁江山
  7. greenplum 历史拉链表
  8. Kanzi自定义插件节点属性、自定义消息以及自定义响应
  9. 【OpenCV】生成透明的PNG图像
  10. [前端积累]--响应式布局(二)