此為Unity 呼叫 Android 底層功能 jar 檔範例

於Adnroid Studio 建立新專案時,選Empty Activity,下一步

批注 2020-06-05 095853.png

Package name 會收到Company domain的影響,這裡API不能低於16,我這裡選16,下一步

批注 2020-06-05 101213.png

點Finish,耐心等待加載完成。

上面的步驟完成後我們看到的是這種界面:

批注 2020-06-05 101431.png

接下來創建一個Module,步驟File-New-New Module:

批注 2020-06-05 101542.png

這裡選擇Android Library,下一步

批注 2020-06-05 101651.png

 這裡名稱無所謂,自己可以隨意寫。需要注意的是下面的API不能低於16,這裡的packagename極為重要,此名稱要與你之後創建的unitry的 packageName一致,Finish

批注 2020-06-05 101839.png

完成後是這樣的格式,可以看多了一個mylibrary:

批注 2020-06-05 102146.png

接下來我們先回到Project

批注 2020-06-05 102323.png

找到mylibrary(這個名稱是自己創建Module是自已定義的)下的libs

批注 2020-06-05 102425.png

把unity安裝目錄裡的class.jar例:我unity2017.3.1f1的安裝目錄是

D:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

批注 2020-06-05 102649.png

把這個classes.jar復制到上面圖裡的libs裡,點OK

批注 2020-06-05 102800.png

然後右鍵這個class.jar,選Add As Library,點OK。

批注 2020-06-05 102950.png

成功的話能看到這裡是可以展開的。

批注 2020-06-05 103104.png

接下來回到安卓,找到Java下的com.test.mylibrary(這種名稱取決於你之前創建時的名稱),右鍵,New-Activity-Empty Activity

批注 2020-06-05 103211.png

這裡把這個Launcher Activity勾選上,一會需要用到的,Finish等待加載完成

批注 2020-06-05 103335.png

在開發過程中,必須將應用程序中出現的組件一一在 AndroidManifest.xml文件中申明,最終這個AndroidManifest.xml文件也會被一起打包到.apk文件中去。

批注 2020-06-05 103515.png

這裡我們給unity使用,該怎麼寫呢?這個時候上面的Empty Activity勾選的Launcher Activity的作用就體驗出來了。打開app/manifests下的AndroidManifest.xml文件

批注 2020-06-05 103629.png

把這裡的application裡的application代碼復制到mylibrary工程裡的AndroidManifest.xml,我們可以看到這裡是報錯的

批注 2020-06-05 103904.png

這裡把報錯的全部刪掉(因為這個只是一個library功能,所以可以全刪)。還需要在intemt-filter下加上這句代碼:<meta-data android:name="unityplayer.UnityActivity" android:value="true"/>

並補上 versionCode, versionName, sdk版本限制, 最後得到這樣的圖

批注 2020-06-05 104446.png

接下來回到我們之前創建的MainActivity裡,把setContentView(R.layout.activity_main);刪掉

批注 2020-06-05 104749.png

這裡可以寫unity需要調用的一些方法,因為需要和unity交互,這裡需要繼承UnityPlayerActivity(如果之前沒有把unity安裝目錄下的class.jar包導入到libs裡,或者導入錯誤什麼的,這裡的繼承可能就會出錯)

我這裡只寫一個簡單的加法運算,到時unity會調用這裡的方法

批注 2020-06-05 105023.png

另外res-layout下的這個activity_main.xml文件也刪掉,右鍵-delect-OK。

批注 2020-06-05 105148.png

接下來把這些配置文件什麼的等等弄到Project裡去。選擇mylibrary,執行Build中的Make Module 'mylibrary'

批注 2020-06-05 105329.png

Build完成後這些文件什麼的到哪裡去了呢?回到Project項目裡,接下來我們需要對這些文件進行操作

批注 2020-06-05 105559.png

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中

完成之後如下圖所示

批注 2020-06-05 105834.png

 接下來需要對這個AndroidManifest.xml進行確認,內容是否一樣,package 必須要是你建立library時所使用的package name

批注 2020-06-05 110626.png

裡面的package 的名稱就是unity打包時的Package Name,這個必須一致的(另外不能寫大寫),不然會報錯。

 

新一個Unity專案名稱為DemoUA

批注 2020-06-05 111008.png

專案開好之後,建立以下資料夾,Plugins/Android 裡面要放Android 相關檔案

批注 2020-06-05 111311.png

好了,接下來把文檔中的DemoUA中所有檔案, 拖到unity下的Plugins/Android裡。

批注 2020-06-05 111740.png

接下來我們來寫一下簡單的代碼:

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如下圖所示,

批注 2020-06-05 112047.png

切換平台為Android, 儲存場景並進行打包,注意一下這裡的Package Name要和AndroidManifest.xml下的package一致。

批注 2020-06-05 112353.png

若build 時出現以下錯誤

批注 2020-06-05 112539.png

請切換build System 為 internal ,重新Bulild 即可以成功,apk名稱可以自定,

批注 2020-06-05 113159.png

手機安裝成功後可以看到如下畫面,icon檔名為你自定的packagename

批注 2020-06-05 113133.png

真機運行測試,得到我們想要的結果(不會真機測試或者沒有安卓手機的同學們,可以在Android Studio裡選tools-Android-AVD Manager進行創建)

批注 2020-06-05 112931.png

 
此測試參考:  https://blog.csdn.net/qq_37491893/article/details/79713374

arrow
arrow

    狼翔月影 發表在 痞客邦 留言(0) 人氣()