寫在前邊
- 之前沒有接觸過AndroidStudio相關(guān)內(nèi)容,第一次實(shí)現(xiàn)該功能時(shí)踩了很多坑查了很多資料。經(jīng)測(cè)試該方案可行,現(xiàn)記錄下流程
- 需了解unity基本UI事件綁定和Android打包
- 不了解AndroidStuido也可,本文對(duì)小白友好
環(huán)境版本
- MacOS系統(tǒng)
-
AndroidStudio
image.png - Unity:2020.3.48f1c1
- 支付寶支付SDK:alipaysdk-noutdid-15.8.06.211122165332.aar
目的
- 通過Unity和Android通信。在Unity中調(diào)用Android寫好的類實(shí)現(xiàn)支付寶支付功能
AndroidStudio端接入支付寶SDK
- 支付寶SDK下載地址:鏈接: https://pan.baidu.com/s/1WdnZEl_BUhdbbv2z5auVLg?pwd=dc7d 提取碼: dc7d
-
創(chuàng)建安卓工程
image.png
image.png
-
-
創(chuàng)建Module
image.png
image.png
-
-
- 導(dǎo)入U(xiǎn)nity類包
- ① Unity類包路徑(找自己對(duì)應(yīng)的unity版本目錄下的類包,我的是2020.3.48f1):
/Applications/Unity/Hub/Editor/2020.3.48f1c1/PlaybackEngines/AndroidPlayer/Variations/mono/Development/classes.jar -
② 將 classes.jar 包復(fù)制到第二步創(chuàng)建的module下的libs目錄
image.png -
③ 選中 classes.jar 右鍵選擇 “Add as library”
image.png -
④ 修改module下build.gradle配置(classes.jar不要打包到aar中,會(huì)和unity中的類沖突)
image.png
compileOnly files('libs/classes.jar')

image.png
-
- 導(dǎo)入支付寶支付SDK
- ① 支付寶SDK下載地址:鏈接: https://pan.baidu.com/s/1WdnZEl_BUhdbbv2z5auVLg?pwd=dc7d 提取碼: dc7d
-
② 將 alipaysdk-noutdid-15.8.06.211122165332.aar 包復(fù)制到第二步創(chuàng)建的module下的libs目錄
image.png - ③ 修改 module 下build.gradle配置
compileOnly fileTree(include: ['*.aar'], dir: 'libs')

image.png
- ④ 將 alipaysdk-noutdid-15.8.06.211122165332.aar 包復(fù)制到app下的libs目錄

image.png
- ⑤ 修改 app 下build.gradle配置,在dependencies中添加以下內(nèi)容(與module中配置一致)
compileOnly fileTree(include: ['*.aar'], dir: 'libs')

image.png
-
- 在module中編寫支付類
- ① 導(dǎo)入U(xiǎn)nityPlayerActivity類,路徑(按照自己的Unity版本目錄查找):/Applications/Unity/Hub/Editor/2020.3.48f1c1/PlaybackEngines/AndroidPlayer/Source/com/unity3d/player/UnityPlayerActivity.java
-
② 復(fù)制UnityPlayerActivity.java 到module下 src/main/com.xxx.xxx(包名)/ 目錄下
image.png - ③ 下載 PayResult.java (package需改為自己的包名)到module下 src/main/com.xxx.xxx(包名)/ 目錄下
鏈接: https://pan.baidu.com/s/1hSWKwB9st2v0tYQhMCZ_OQ?pwd=ig66 提取碼: ig66
image.png - ④ 下載 MainActivity.java (package需改為自己的包名)到module下 src/main/com.xxx.xxx(包名)/ 目錄下 鏈接: https://pan.baidu.com/s/18477hRy61nZadMtr6aqf2Q?pwd=f2ge 提取碼: f2ge
image.png
-
刪除 module中 src/main/res 目錄下所有文件
image.png
-
- 修改 module下 AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:allowBackup="true"
android:supportsRtl="true">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
-
- 導(dǎo)出aar至Unity項(xiàng)目中
-
① 生成aar
image.png - ② 解壓aar文件,得到其中的 AndroidManifest.xml 文件,復(fù)制AndroidManifest.xml 文件到Unity項(xiàng)目 Assets/Plugins/Android 目錄下
- ③ 復(fù)制 aar文件到Unity項(xiàng)目 Assets/Plugins/Android 目錄下(目錄不存時(shí)需手動(dòng)創(chuàng)建)
-
④ 復(fù)制 module中l(wèi)ibs目錄下alipaysdk-noutdid-15.8.06.211122165332.aar文件到Unity項(xiàng)目 Assets/Plugins/Android/libs/ 目錄下
image.png
image.png
Unity中編寫腳本
- 在場(chǎng)景中創(chuàng)建button并綁定以下方法(綁定方式自行百度,主要演示如何調(diào)用aar)
public void pay()
{
string orderStr = ""; // todo:api請(qǐng)求服務(wù)端獲取到的訂單串
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
string result = jo.Call<string>("testPay", orderStr);
Debug.Log(result);
}
Unity打包到android測(cè)試

image.png
-
為了調(diào)試方便,可勾選一下內(nèi)容,連接真機(jī)后 構(gòu)建運(yùn)行 ,在AndroidStudio Logcat中查看log
image.png
image.png

















