小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

[Unity]Unity接平臺SDK(3種方式)

 勤奮不止 2018-11-21

    最近又接了一次平臺SDK,順帶著也學(xué)習(xí)了接IOS的SDK。IOS的也是邊做邊學(xué)的,現(xiàn)在還沒這么清楚,就不講了。還是來說下安卓SDK的接法,因為平臺需求,我用了2種方式來接平臺SDK。隨便總結(jié)下,方便以后查閱。3種方式是我目前知道的,我不清楚是否還有其他接法。個人認為第一種和第三種是比較麻煩的。

    1.Unity導(dǎo)出Andorid工程,再導(dǎo)入SDK庫,開始寫SDK代碼,然后就可以打APK。這個比較簡單粗暴,就不多說了。

    2.SDK生產(chǎn)aar包,作為插件導(dǎo)入Unity,然后Unity生成APK,這個方式比較好,也是我剛開始采用的,基于此,還寫了個一鍵打包方法。

    3.Unity導(dǎo)出aar包,作為插件導(dǎo)入Android工程,開始寫SDK代碼,然后就可以打APK。其實這跟第一種方法類似,但由于平臺要弄聚合SDK,我們這安卓SDK代碼不需要自己寫,由平臺方寫,所以后續(xù)采用了這種方式。

    先上SDK代碼

SDK管理類:

  1. public class SDKManager : MonoBehaviour
  2. {
  3. #region 單例
  4. private static SDKManager _instance;
  5. public static SDKManager Instance
  6. {
  7. set { _instance = value; }
  8. get { return _instance; }
  9. }
  10. #endregion
  11. private SDKBase sdk;
  12. #region sdk 參數(shù)
  13. public int GetPlatformId()
  14. {
  15. if (sdk != null)
  16. {
  17. AddResult("GetPlatformId: " + sdk.GetPlatformId() + "---");
  18. return sdk.GetPlatformId();
  19. }
  20. return 0;
  21. }
  22. public string GetUID()
  23. {
  24. if (sdk != null)
  25. {
  26. AddResult("GetUID: " + sdk.GetUid() + "---");
  27. return sdk.GetUid();
  28. }
  29. return "";
  30. }
  31. #endregion
  32. private void Awake()
  33. {
  34. _instance = this;
  35. }
  36. private void Start()
  37. {
  38. #if UNITY_EDITOR
  39. sdk = new SDKBase();
  40. #elif UNITY_ANDROID
  41. sdk = new SDKForAndroid();
  42. #elif UNITY_IPHONE
  43. sdk = new SDKForIphone();
  44. #endif
  45. SDKInit();
  46. }
  47. /// <summary>
  48. /// SDK初始化
  49. /// </summary>
  50. public void SDKInit()
  51. {
  52. if (sdk == null) return;
  53. AddResult("SDKInit");
  54. sdk.Init();
  55. }
  56. /// <summary>
  57. /// SDK登錄
  58. /// </summary>
  59. public void SDKLogin()
  60. {
  61. if (sdk == null) return;
  62. AddResult("SDKLogin");
  63. sdk.Login();
  64. }
  65. /// <summary>
  66. /// SDK登出
  67. /// </summary>
  68. public void SDKLogout()
  69. {
  70. if (sdk == null) return;
  71. AddResult("SDKLogout");
  72. sdk.Logout();
  73. }
  74. /// <summary>
  75. /// SDK付費
  76. /// </summary>
  77. public void SDKPay()
  78. {
  79. if (sdk == null) return;
  80. AddResult("SDKPay");
  81. sdk.Pay();
  82. }
  83. /// <summary>
  84. /// SDK登錄游戲服務(wù)器
  85. /// </summary>
  86. /// <param name="uid">登錄后用戶id,由登錄傳給游戲的用戶id</param>
  87. /// <param name="sid">游戲區(qū)服id</param>
  88. public void SDKLoginGame(string uid, string sid)
  89. {
  90. if (sdk == null) return;
  91. AddResult("SDKLoginGame");
  92. sdk.LoginGame(uid, sid);
  93. }
  94. /// <summary>
  95. /// SDK創(chuàng)建角色
  96. /// </summary>
  97. /// <param name="uid">登錄后用戶id,由登錄傳給游戲的用戶id</param>
  98. /// <param name="sid">游戲區(qū)服id</param>
  99. /// <param name="roleId">游戲角色id</param>
  100. /// <param name="roleName">游戲角色名</param>
  101. public void SDKCreateRole(string uid, string sid, string roleId, string roleName)
  102. {
  103. if (sdk == null) return;
  104. AddResult("SDKCreateRole");
  105. sdk.CreateRole(uid, sid, roleId, roleName);
  106. }
  107. #region SDK事件回調(diào)
  108. /// <summary>
  109. /// result = platformId
  110. /// </summary>
  111. /// <param name="result"></param>
  112. public void OnSDKInit(string result)
  113. {
  114. AddResult(result);
  115. sdk.SetPlatformId(result);
  116. }
  117. /// <summary>
  118. /// result = bIsSuccess + uid + nickName
  119. /// </summary>
  120. /// <param name="result"></param>
  121. public void OnSDKLogin(string result)
  122. {
  123. AddResult(result);
  124. string[] strs = result.Split('|');
  125. if(strs.Length > 1)
  126. {
  127. string uid = strs[1];
  128. sdk.SetUid(uid);
  129. }
  130. //拋事件到lua
  131. }
  132. public void OnSDKLogout(string result)
  133. {
  134. AddResult(result);
  135. //拋事件到lua
  136. }
  137. public void OnSDKPay(string result)
  138. {
  139. AddResult(result);
  140. }
  141. public void OnSDKLoginGame(string result)
  142. {
  143. AddResult(result);
  144. }
  145. public void OnSDKCreateRole(string result)
  146. {
  147. AddResult(result);
  148. }
  149. #endregion
  150. #region 測試
  151. public static bool bIsTest = false;
  152. string m_showText = " ";
  153. private void OnGUI()
  154. {
  155. if (!bIsTest) return;
  156. if (GUI.Button(new Rect(100, 0, 100, 100), "SDK登錄"))
  157. {
  158. m_showText = "SDK登錄";
  159. SDKManager.Instance.SDKLogin();
  160. }
  161. if (GUI.Button(new Rect(200, 0, 100, 100), "SDK登出"))
  162. {
  163. m_showText = "SDK登出";
  164. SDKManager.Instance.SDKLogout();
  165. }
  166. GUI.TextField(new Rect(0, 100, 300, 200), m_showText);
  167. }
  168. private void AddResult(string result)
  169. {
  170. if (!bIsTest) return;
  171. if (!string.IsNullOrEmpty(result))
  172. m_showText = result;
  173. }
  174. #endregion
  175. }

SDK父類

  1. public class SDKBase
  2. {
  3. protected int platformId = 0;
  4. private string uid = "";
  5. public SDKBase() { }
  6. public virtual void Init() { }
  7. public virtual void Login() { }
  8. public virtual void Logout() { }
  9. public virtual void Pay() { }
  10. public virtual void LoginGame(string uid, string sid) {}
  11. public virtual void CreateRole(string uid, string sid, string roleId, string roleName) { }
  12. public void SetPlatformId(string platformIdStr)
  13. {
  14. if (string.IsNullOrEmpty(platformIdStr) || !IsNumber(platformIdStr)) return;
  15. platformId = int.Parse(platformIdStr);
  16. }
  17. public int GetPlatformId()
  18. {
  19. return (int)platformId;
  20. }
  21. public bool CheckIsInitSDK()
  22. {
  23. return platformId != 0;
  24. }
  25. public string GetUid()
  26. {
  27. return uid;
  28. }
  29. public void SetUid(string uid)
  30. {
  31. this.uid = uid;
  32. }
  33. public bool IsNumber(string value)
  34. {
  35. string pattern = @"^\d*$";
  36. return Regex.IsMatch(value, pattern);
  37. }
  38. }

 

SDK安卓

 

  1. public class SDKForAndroid : SDKBase
  2. {
  3. private AndroidJavaObject jc;
  4. AndroidJavaObject jo;
  5. public SDKForAndroid():base()
  6. {
  7. AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  8. jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
  9. }
  10. private void Call(string funcName, params object[] args)
  11. {
  12. try
  13. {
  14. if(jo != null)
  15. jo.Call(funcName, args);
  16. }
  17. catch (System.Exception e)
  18. {
  19. Debug.LogWarning(e.Message);
  20. }
  21. }
  22. public override void Init()
  23. {
  24. Call("SDKInit");
  25. }
  26. public override void Login()
  27. {
  28. if (!CheckIsInitSDK()) return;
  29. switch(platformId)
  30. {
  31. case 0:
  32. break;
  33. default:
  34. Call("SDKLogin");
  35. break;
  36. }
  37. }
  38. public override void Logout()
  39. {
  40. if (!CheckIsInitSDK()) return;
  41. switch (platformId)
  42. {
  43. case 0:
  44. break;
  45. default:
  46. Call("SDKLogout");
  47. break;
  48. }
  49. }
  50. public override void Pay()
  51. {
  52. if (!CheckIsInitSDK()) return;
  53. switch (platformId)
  54. {
  55. case 0:
  56. break;
  57. default:
  58. Call("SDKPay");
  59. break;
  60. }
  61. }
  62. public override void LoginGame(string uid, string sid)
  63. {
  64. if (!CheckIsInitSDK()) return;
  65. switch (platformId)
  66. {
  67. case 0:
  68. break;
  69. default:
  70. Call("SDKLoginGame", uid, sid);
  71. break;
  72. }
  73. }
  74. public override void CreateRole(string uid, string sid, string roleId, string roleName)
  75. {
  76. if (!CheckIsInitSDK()) return;
  77. switch (platformId)
  78. {
  79. case 0:
  80. break;
  81. default:
  82. Call("SDKCreateRole", uid, sid, roleId, roleName);
  83. break;
  84. }
  85. }
  86. }

SDKios

  1. public class SDKForIphone : SDKBase
  2. {
  3. [DllImport("__Internal")]
  4. private static extern void SDKInit();
  5. [DllImport("__Internal")]
  6. private static extern void SDKLogin();
  7. [DllImport("__Internal")]
  8. private static extern void SDKLogout();
  9. public override void Init()
  10.         {
  11. SDKInit();
  12. }
  13. public override void Login()
  14. {
  15. if (!CheckIsInitSDK()) return;
  16. switch(platformId)
  17. {
  18. case 0:
  19. break;
  20. default:
  21. SDKLogin();
  22. break;
  23. }
  24. }
  25. public override void Logout()
  26. {
  27. if (!CheckIsInitSDK()) return;
  28. switch (platformId)
  29. {
  30. case 0:
  31. break;
  32. default:
  33. SDKLogout();
  34. break;
  35. }
  36. }
  37. public override void Pay()
  38. {
  39. if (!CheckIsInitSDK()) return;
  40. switch (platformId)
  41. {
  42. case 0:
  43. break;
  44. default:
  45. break;
  46. }
  47. }
  48. public override void LoginGame(string uid, string sid)
  49. {
  50. if (!CheckIsInitSDK()) return;
  51. switch (platformId)
  52. {
  53. case 0:
  54. break;
  55. default:
  56. break;
  57. }
  58. }
  59. public override void CreateRole(string uid, string sid, string roleId, string roleName)
  60. {
  61. if (!CheckIsInitSDK()) return;
  62. switch (platformId)
  63. {
  64. case 0:
  65. break;
  66. default:
  67. break;
  68. }
  69. }
  70. }

第2種方式:

    新建一個Android library工程,按照平臺給的SDK文檔配置AndroidManifest.xml,然后添加SDK的aar或者jar庫到libs目錄下,不要忘了去Unity安裝目錄找到classes.jar,放入libs目錄下,然后配置gradle。

    接著就開始寫SDK代碼,這個網(wǎng)上一大堆就不多說了。寫完之后直接生成aar庫,直接導(dǎo)入到Unity就可以用了。

 

第3種方式:

    Unity導(dǎo)出aar包,首先Unity導(dǎo)出gradle工程(Android studio),用Android studio打開。

    一、build.gradle配置

    1.將apply plugin: 'com.android.application'改為apply plugin: 'com.android.library'。

    2.去掉applicationId。

  3.修改gradle版本,將classpath 'com.android.tools.build:gradle:2.1.0'改成classpath 'com.android.tools.build:gradle:3.0.1'

 

    二、修改AndroidManifest.xml

    去掉 intent-filter 標(biāo)簽。

    三、編譯會報Java heap space錯誤(重要

    

    Unity官網(wǎng)說是Unity打包會減少方法應(yīng)用,但是和導(dǎo)出Android工程的實現(xiàn)是不一樣的,因此用Android studio打包,你有可能會遇到j(luò)ava heap space報錯,這個地方坑了我一天,后面找到了解決方法:

 

    修改gradle.properties,將org.gradle.jvmargs改成org.gradle.jvmargs=-Xmx5120m-XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

    四、生成aar包

    點擊(Android studio)右邊gradle按鈕,選擇build下的assembleRelease運行。

    五、使用aar包

    1.將aar包導(dǎo)入到新工程中,不要忘記導(dǎo)入SDK,繼續(xù)配置gradle,在repositories中添加flatDir {dirs 'libs'},不然不能讀取aar包。

    2.修改applicationId,改成與Unity工程一致。

    3.在dependencies中添加依賴,前面Unity工程生成的aar和sdk。

    4.繼續(xù)配置AndroidManifest.xml,跟Unity工程布局一樣,不然會強退。

    5.修改appname

    接下來就還是寫SDK代碼。

    細節(jié)就不多說,網(wǎng)上有很多,主要是一些比較坑的地方記下來,防止以后繼續(xù)掉坑里。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多