此為Unity 呼叫 Android 底層功能 jar 檔範例
於Adnroid Studio 建立新專案時,選Empty Activity,下一步
Package name 會收到Company domain的影響,這裡API不能低於16,我這裡選16,下一步
點Finish,耐心等待加載完成。
上面的步驟完成後我們看到的是這種界面:
接下來創建一個Module,步驟File-New-New Module:
這裡選擇Android Library,下一步
這裡名稱無所謂,自己可以隨意寫。需要注意的是下面的API不能低於16,這裡的packagename極為重要,此名稱要與你之後創建的unitry的 packageName一致,Finish
完成後是這樣的格式,可以看多了一個mylibrary:
接下來我們先回到Project
找到mylibrary(這個名稱是自己創建Module是自已定義的)下的libs
把unity安裝目錄裡的class.jar例:我unity2017.3.1f1的安裝目錄是
D:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
把這個classes.jar復制到上面圖裡的libs裡,點OK
然後右鍵這個class.jar,選Add As Library,點OK。
成功的話能看到這裡是可以展開的。
接下來回到安卓,找到Java下的com.test.mylibrary(這種名稱取決於你之前創建時的名稱),右鍵,New-Activity-Empty Activity
這裡把這個Launcher Activity勾選上,一會需要用到的,Finish等待加載完成
在開發過程中,必須將應用程序中出現的組件一一在 AndroidManifest.xml文件中申明,最終這個AndroidManifest.xml文件也會被一起打包到.apk文件中去。
這裡我們給unity使用,該怎麼寫呢?這個時候上面的Empty Activity勾選的Launcher Activity的作用就體驗出來了。打開app/manifests下的AndroidManifest.xml文件
把這裡的application裡的application代碼復制到mylibrary工程裡的AndroidManifest.xml,我們可以看到這裡是報錯的
這裡把報錯的全部刪掉(因為這個只是一個library功能,所以可以全刪)。還需要在intemt-filter下加上這句代碼:<meta-data android:name="unityplayer.UnityActivity" android:value="true"/>
並補上 versionCode, versionName, sdk版本限制, 最後得到這樣的圖
接下來回到我們之前創建的MainActivity裡,把setContentView(R.layout.activity_main);刪掉
這裡可以寫unity需要調用的一些方法,因為需要和unity交互,這裡需要繼承UnityPlayerActivity(如果之前沒有把unity安裝目錄下的class.jar包導入到libs裡,或者導入錯誤什麼的,這裡的繼承可能就會出錯)
我這裡只寫一個簡單的加法運算,到時unity會調用這裡的方法
另外res-layout下的這個activity_main.xml文件也刪掉,右鍵-delect-OK。
接下來把這些配置文件什麼的等等弄到Project裡去。選擇mylibrary,執行Build中的Make Module 'mylibrary'
Build完成後這些文件什麼的到哪裡去了呢?回到Project項目裡,接下來我們需要對這些文件進行操作
1。先在文檔中建立一個DemoUA資料夾,裡面存放等下要複製到unity專案中的資料
2。將 DemoUnity\mylibrary\build\intermediates\aar_main_jar\debug下的classes.jar 檔案複製到DemoUA資料夾,底下新建的libs資料夾中
3。將 DemoUnity\mylibrary\src\main 中的res資料夾,複製到DemoUA中
4。將 DemoUnity\mylibrary\src\main 中的AndroidManifest.xml,複製到DemoUA中
完成之後如下圖所示
接下來需要對這個AndroidManifest.xml進行確認,內容是否一樣,package 必須要是你建立library時所使用的package name
裡面的package 的名稱就是unity打包時的Package Name,這個必須一致的(另外不能寫大寫),不然會報錯。
新一個Unity專案名稱為DemoUA
專案開好之後,建立以下資料夾,Plugins/Android 裡面要放Android 相關檔案
好了,接下來把文檔中的DemoUA中所有檔案, 拖到unity下的Plugins/Android裡。
接下來我們來寫一下簡單的代碼:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Test : MonoBehaviour
{
private Text text;
private AndroidJavaClass aj;
private AndroidJavaObject ao;
void Start()
{
text = GetComponent<Text>();
aj = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
//獲取com.unity3d.player下的這個UnityPlayer類
ao = aj.GetStatic<AndroidJavaObject>("currentActivity");
//取得對像,這兩句是固定寫法,不理解也無所謂
text.text = ao.Call<int>("add", 10, 20).ToString();
//加法有返回值,AndroidJavaObject.Call可以調用有參數和無參數的方法,靜態方法之類的,有返回值後面的是參數的類型
}
}
把這個腳本掛到ugui一個Text組件上,調整一下UI如下圖所示,
切換平台為Android, 儲存場景並進行打包,注意一下這裡的Package Name要和AndroidManifest.xml下的package一致。
若build 時出現以下錯誤
請切換build System 為 internal ,重新Bulild 即可以成功,apk名稱可以自定,
手機安裝成功後可以看到如下畫面,icon檔名為你自定的packagename
真機運行測試,得到我們想要的結果(不會真機測試或者沒有安卓手機的同學們,可以在Android Studio裡選tools-Android-AVD Manager進行創建)
此測試參考: https://blog.csdn.net/qq_37491893/article/details/79713374
留言列表