unity接入安卓SDK,與安卓相互通信


.接SDK是個什么樣的活計?

SDK的工作流程:

1. 從unity端出發,向安卓發起一系列的請求(unity call android)。

2. 安卓端收到unity端調用,然后在具體調用SDK的一系列接口(android內部調用)

3. SDK服務器處理之后得到結果,再返回給安卓(網絡通信)

4. 安卓獲得SDK結果,然后回調unity方法,將結果傳回unity端(android call unity)

我們需要做的:

1. 在安卓端,將SDK集成進入 Android的 MainActivity(或者其他Activity),為Unity的調用做好接口

2. 將做好的安卓接口,打成jar包,以插件的形式,集成到Unity中去,供unity使用

3. 編寫Unity端的調用 函數與響應函數,完成SDK接入。

2.unity 與 android 的通信:

unity  Call android:

1 //獲取名為UnityPlayer的類
2 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
3 
4 //獲取當前運行的Activity
5 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
6 
7 //調用UnityPlayer類中的函數
8 var result  = jo.Call<返回結果類型>("函數名稱","函數參數1","函數參數2",……);

android Call unity:

UnityPlayer.UnitySendMessage("場景中GamObject名字","該Obj身上腳本的一個方法名",返回值(字符串類型));

3.實際操作

3.1 准備工作

  1. 安卓開發環境,因為我們需要擴展UnityActivity,並且將擴展過后的結果打成 .jar包放入Unity,所以,我們需要 Android Studio 或者Eclipse+ADT,作者使用的Android Studio3.01.(下載網址:http://www.androiddevtools.cn/ )
  2. SDK源文件,這個看你需要接入什么SDK,去官網下載即可。
  3. Unity 的Android classes.jar文件,這里面定義了unity 在安卓中的各種行為,我們在編寫代碼的時候,需要用到這里面的接口。(路徑為:\Editor\Data\PlaybackEngines\androidplayer\release\bin\classes.jar  

3.2開始創建Android工程

  

 經過以上步驟,一個完整的Android項目就算是創建好了,如下圖:

3.3 導入Jar包

切換到Project視圖,將在3.1中准備好的unity 的classes.jar文件、SDK的.jar文件復制到 App/libs文件夾下面

將導入的.jar文件 作為依賴項導入到項目中去,導入成功之后,jar包就可以展開了,可以看到里面的信息。(具體做法為:右鍵點擊jar包,有一個 add as library 選項,點擊該選項即可)

3.4編寫Unity Android交互接口

  • 將項目切換到 Android結構,然后到java目錄下,開始編寫交互接口。
  • 說道這里,提一下Android 應用的運行機制。在 安卓應用中,有許多個Activtiy,這些Activity,可以當做是unity的一個scene。在應用啟動的時候首先會啟動一個MainActivity,而這個MainActivity,是在Applicationmainfest.xml中配置的。而我們想要在安卓應用啟動起來的時候,就進行初始化SDK,然后調用各個接口,那么我們就需要編寫這樣一個MainActivity對應的腳本,並且將其配置到 ApplicationMainfest.xml文件中去。
  • 我們可以自己寫一個新的Activity,也可以直接使用默認生成的Activity,這里我們直接在生成的MainActivity.java中進行編寫交互代碼。
    //1.首先,將 MainActivity繼承的父類改為UnityPlayerActivity 
    public class MainActivity extends UnityPlayerActivity {
    
        //這里是自動生成的,相當於Mono的Awake()函數,用於初始化操作
        
           @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
        }
        
    //unity調用Android接口
        public void UnityCallAndroid(int a, int b,string symbol)
        {
             String result;
            switch (symbol){
                case "+":
                    result ="加法結果:"+(a+b);
                    break;
                case "-":
                    result ="減法結果:"+(a-b);
                    break;
                case "*":
                    result="乘法結果:"+(a*b);
                    break;
                default:
                    result="未知運算:"+"a="+a+",b="+b;
            }
            
            AndroidCallUnity(result);
        }
    
    //安卓調用Unity接口
     public void AndroidCallUnity(String result){
            UnityPlayer.UnitySendMessage("SDK","ShowMsg",result);
        }
    
                
    }

3.5更改gradle配置

打開Gradle Scripts/build.gradle(Module:app)文件

在該文件最下方添加如下代碼:

task deleteOldJar(type:Delete){
    //打出的舊版本jar
    delete 'build/outputs/test.jar'
}

task exportJar(type:Copy){
    
    from('build/intermediates/bundles/release/')
    //打出jar包的文件目錄
    into('build/libs/')
    include('classes.jar')
    rename('classes.jar','test.jar')
}

exportJar.dependsOn(deleteOldJar,build)

3.6打包

點擊右上角 Gradle->:app->Tasks->other->exportJar 即可開始打包

3.7創建Unity工程

這個就簡單了,直接New 一個 project就行了,需要注意的是:

  1. File -> Build Setting -> Player Settings -> Other Settings ->Bundle Identifier中的字符串,要與在創建 Android工程時的 Company damon保持一致
  2. 在Assets下創建 Plugins/Android目錄

將上面打出的Jar包,放到Plugins/Android目錄下,然后編寫Unity的調用代碼:

  //調用安卓函數
   public void CallAndroid()
    {
        AndroidJavaClass jc=  new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo= jc.GetStatic<AndroidJavaObject>("currentActivity");
        jo.Call("UnityCallAndroid",8,3,"+");

    }
  
//安卓調用Unity的函數 public void ShowMsg(string str){ unityResultShow.text = str; }

新建一個Unity場景,創建一個空的物體,命名為"SDK",然后將編寫的腳本附上去。

 

最后,將unity打包成apk,上手機安裝即可測試。

 

 問題:

1.Conflict with Dependency

1 Error:Execution failed for task ':app:preDebugAndroidTestBuild'.
2 > Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for app (26.1.0) and test app (27.1.1) differ. See https://d.android.com/r/tools/test-apk-dependency-conflicts.html for details.

解決方案

//在build.gradle(Module:App)文件的dependencies中添加如下代碼

  androidTestCompile('com.android.support:support-annotations:26.1.0') {
        force = true
    }

 

 

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM