先祝賀我國疫情基本結束,感謝爲疫情奉獻熱血甚至生命的醫護人員!
接下來進入正題。
用unity做一個手機app遊戲基本上都需要與android和ios交互,比如調用系統函數,調用sdk等。這是unity開發基本操作不用多說,而且unity與android/ios交互的過程網上已經很多了。
最近業餘時間一個半設計工業app差不多做完了,準備接入一些android/ios交互功能,所以記錄一下。
ps:我其實不怎麼寫日常開發方面的博客,因爲網上很多,之所以花時間寫這篇unity與android交互,一方面是因爲我不是公司專門接sdk的開發人員,所以自己一年也就搞那麼一兩次吧,記憶力不可靠,而且android studio和xcode一段時間不用變化還是挺大的,所以記錄一下,免得忘記了;另一方面,今天一早上我被網上文章坑了兩三個小時,大部分文章都有很多細節遺漏或錯誤,所以我還是自己寫一篇博客吧,免得以後浪費時間。
我會將操作寫的很詳細,標識也會很細緻。
準備工具:
1.unity2018.3.13f1
2.android studio3.4.1
需求目的:
完成android studio(後面簡稱as)導出aar文件到unity進行功能交互
具體過程:
1.as新建項目
新建as項目完畢,名稱:sdktest,包名:com.tomatopotato(我獨立工作室名,無需填寫額外的產品名稱)
2.引入unity的classes.jar文件
找到unity安裝目錄下的classes.jar
默認使用il2cpp版本,我想應該沒人使用mono版本打包了吧?
拷貝classes.jar到as工程libs下
as點擊同步工程
如果各位as工程中看不到libs等文件夾的情況下,直接右鍵右鍵右鍵jump to source就能展開所有文件列表了。
3.修改as配置
修改爲:
這樣我們就能打包aar包。
修改androidminafest.xml文件:
爲了怕遮擋文本,所以我不標紅(我同時隨便添加了一個permission權限演示)。
4.刪除res下不需要的文件
刪除標藍色的文件
繼續同步一下
5.開始寫代碼
我們隨便寫兩個功能,一個彈消息,一個打開相冊
代碼如上
6.修改activity_main.xml文件
修改爲:
爲了不遮擋文本,我不標紅。
繼續同步工程。
7.開始打包aar
打包aar文件。
得到aar文件包。
隨便用個壓縮程序打開aar包,刪除掉libs/classes.jar文件
8.unity工程調用演示
創建一個unity test工程,修改android配置信息
配製好包名,產品名。
將as工程的aar和androidmanifest文件拷貝到unity工程plugins/android下
打開androidmanifest.xml文件,註銷launcher語句。
接下來開始寫c#代碼:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PhonePlugin : MonoBehaviour
{
void Start()
{
}
void OnGUI()
{
if (GUI.Button(new Rect(0, 0, 200, 200), "Toast"))
{
AndroidJavaClass ajc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject ajo = ajc.GetStatic<AndroidJavaObject>("currentActivity");
ajo.Call("ShowToast", "unity msg");
}
if (GUI.Button(new Rect(300, 0, 200, 200), "Album"))
{
AndroidJavaClass ajc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject ajo = ajc.GetStatic<AndroidJavaObject>("currentActivity");
ajo.Call("OpenAlbum");
}
}
}
ok,一切就緒,打包android apk文件。
得到apk文件,發送到我的一臺老舊不用的android手機上安裝。
下面是真機測試:
好了,這就是細緻的unity和android交互流程,當然只是爲了記錄演示交互做法,所以並不做複雜的功能的demo,大家需要什麼功能百度寫代碼即可。
後話,我最近業餘時間做了一個app,對學習很有幫助,估計還要一段時間上線。