写在前边
- 之前没有接触过AndroidStudio相关内容,第一次实现该功能时踩了很多坑查了很多资料。经测试该方案可行,现记录下流程
- 需了解unity基本UI事件绑定和Android打包
- 不了解AndroidStuido也可,本文对小白友好
环境版本
- MacOS系统
-
AndroidStudio
image.png - Unity:2020.3.48f1c1
- 支付宝支付SDK:alipaysdk-noutdid-15.8.06.211122165332.aar
目的
- 通过Unity和Android通信。在Unity中调用Android写好的类实现支付宝支付功能
AndroidStudio端接入支付宝SDK
- 支付宝SDK下载地址:链接: https://pan.baidu.com/s/1WdnZEl_BUhdbbv2z5auVLg?pwd=dc7d 提取码: dc7d
-
创建安卓工程
image.png
image.png
-
-
创建Module
image.png
image.png
-
-
- 导入Unity类包
- ① Unity类包路径(找自己对应的unity版本目录下的类包,我的是2020.3.48f1):
/Applications/Unity/Hub/Editor/2020.3.48f1c1/PlaybackEngines/AndroidPlayer/Variations/mono/Development/classes.jar -
② 将 classes.jar 包复制到第二步创建的module下的libs目录
image.png -
③ 选中 classes.jar 右键选择 “Add as library”
image.png -
④ 修改module下build.gradle配置(classes.jar不要打包到aar中,会和unity中的类冲突)
image.png
compileOnly files('libs/classes.jar')
image.png
-
- 导入支付宝支付SDK
- ① 支付宝SDK下载地址:链接: https://pan.baidu.com/s/1WdnZEl_BUhdbbv2z5auVLg?pwd=dc7d 提取码: dc7d
-
② 将 alipaysdk-noutdid-15.8.06.211122165332.aar 包复制到第二步创建的module下的libs目录
image.png - ③ 修改 module 下build.gradle配置
compileOnly fileTree(include: ['*.aar'], dir: 'libs')
image.png
- ④ 将 alipaysdk-noutdid-15.8.06.211122165332.aar 包复制到app下的libs目录
image.png
- ⑤ 修改 app 下build.gradle配置,在dependencies中添加以下内容(与module中配置一致)
compileOnly fileTree(include: ['*.aar'], dir: 'libs')
image.png
-
- 在module中编写支付类
- ① 导入UnityPlayerActivity类,路径(按照自己的Unity版本目录查找):/Applications/Unity/Hub/Editor/2020.3.48f1c1/PlaybackEngines/AndroidPlayer/Source/com/unity3d/player/UnityPlayerActivity.java
-
② 复制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>
-
- 导出aar至Unity项目中
-
① 生成aar
image.png - ② 解压aar文件,得到其中的 AndroidManifest.xml 文件,复制AndroidManifest.xml 文件到Unity项目 Assets/Plugins/Android 目录下
- ③ 复制 aar文件到Unity项目 Assets/Plugins/Android 目录下(目录不存时需手动创建)
-
④ 复制 module中libs目录下alipaysdk-noutdid-15.8.06.211122165332.aar文件到Unity项目 Assets/Plugins/Android/libs/ 目录下
image.png
image.png
Unity中编写脚本
- 在场景中创建button并绑定以下方法(绑定方式自行百度,主要演示如何调用aar)
public void pay()
{
string orderStr = ""; // todo:api请求服务端获取到的订单串
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测试
image.png-
为了调试方便,可勾选一下内容,连接真机后 构建运行 ,在AndroidStudio Logcat中查看log
image.png
image.png
网友评论