使用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,如果還有問題,可以來信,一塊研討!

發佈了58 篇原創文章 · 獲贊 13 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章