目录
2.1 Unity+AndroidStudio:学习:二:(第2次操作:成功)AndroidStudio如何产生.arr文件+交互
2.1.Unity 调用Android arr包(互相调用并传值)
2.2.Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)
3.1.新建Plugins目录与Android子目录+导入aar文件至Android目录下
3.1.导入AndroidManifest.xml文件至Android目录下
1.注意BoudleID可以不用设置和aar相同名字+BoudleID也不用设置和AndroidManifest.xml的package一样的名字
一.目的
1.1 想知道:.arr文件如何导入到Unity3D中
二.参考
2.1 Unity+AndroidStudio:学习:二:(第2次操作:成功)AndroidStudio如何产生.arr文件+交互
https://blog.csdn.net/qq_40544338/article/details/118406173
- 总结:good:我自己写的,亲测有效的
2.1Unity与Android交互方案优化版
https://www.jianshu.com/p/86b275da600e
- Demo下载下来了,运行了是正常的。
- 更新后的版本 VS2019+unity2019.4.9f1
2.1.Unity 调用Android arr包(互相调用并传值)
https://blog.csdn.net/Blog_Sun/article/details/102481342
- 待检测
2.2.Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)
http://www.xuanyusong.com/archives/667
- 待检测
三.操作:1:失败
3.1 版本
- .aar是公司安卓工程师给我的,所以我导入到U3D
- unity2019.4.9f1
3.1 新建U3D工程
- 名字改为 :unityblelibrary ;
3.1 .aar导入U3D
.aar导入U3D的 \Assets\Plugins\Android\
3.1 Unity设置
- 包名、最低版本 和AndroidManifest.xml 保持一致。
3.1 运行结果:导入.aar后直接打包APK:报错:
3.1 解决报错:已解决
- 删除.aar里面的 classes.jar
- 由于Unity在打包APK时会自动包含自身的classes.jar,所以需使用压缩软件打开*.aar文件删除libs目录下的classes.jar文件
3.1.1 运行结果:打包成功
3.1 Unity调用AS中的代码
新建代码 UnityAndAndroid 然后挂在Main Camera
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UnityAndAndroid : MonoBehaviour
{
/// <summary>Text:显示安卓发送来的消息</summary>
public Text text_showAndroid;
/// <summary>Button:btn_initBle </summary>
public Button btn_initBle;
/// <summary>Button:btn_startBle</summary>
public Button btn_startBle;
/// <summary>Button:btn_stopBle</summary>
public Button btn_stopBle;
/// <summary>
/// android原生代码对象
/// </summary>
///
private AndroidJavaClass javaClass = null;
private AndroidJavaObject javaObject = null;
// Start is called before the first frame update
void Start()
{
测试:1:失败
//AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
//AndroidJavaObject javaObject = javaClass.GetStatic<AndroidJavaObject>("currentActivity");
测试:2:失败:安装到手机报错:Caused by: java.lang.ClassNotFoundException: Didn't find class "com.zhhd.unityblelibrary.UnityBleActivity"
通过该API来实例化导入的arr中对应的类
//javaObject = new AndroidJavaObject("com.zhhd.unityblelibrary.UnityBleActivity");
测试:3:失败:adb报错 java.lang.NoSuchFieldError: no "Ljava/lang/Object;" field "UnityBleActivity" in class "Lcom/unity3d/player/UnityPlayer;" or its superclasses
//AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
//AndroidJavaObject javaObject = javaClass.GetStatic<AndroidJavaObject>("UnityBleActivity");
测试:4:失败:
// javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
// javaObject = javaClass.GetStatic<AndroidJavaObject>("currentActivity");
//测试:5:失败:报错: E/Unity: NullReferenceException: Object reference not set to an instance of an object
javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
javaObject = javaClass.GetStatic<AndroidJavaObject>("com.zhhd.unityblelibrary.UnityBleActivity");
测试:6:失败:报错:E/Unity: NullReferenceException: Object reference not set to an instance of an object
//javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
//javaObject = javaClass.GetStatic<AndroidJavaObject>("UnityBleActivity");
//btn_initBle.onClick.AddListener(() => { javaObject.Call("initBle"); });
//btn_startBle.onClick.AddListener(() => { javaObject.Call("startBle"); });
//btn_stopBle.onClick.AddListener(() => { javaObject.Call("stopBle"); });
}
// Update is called once per frame
void Update()
{
}
/// <summary>
/// 安卓调用此方法:
/// </summary>
/// <param name="content"></param>
public void FromAndroid(string content)
{
text_showAndroid.text = content;
}
public void Set_btn_initBle()
{
javaObject.Call("initBle");
}
public void Set_btn_startBle()
{
javaObject.Call("startBle");
}
public void Set_btn_stopBle()
{
javaObject.Call("stopBle");
}
}
3.1 运行结果:失败
三.操作:2:失败
3.1.新建Plugins目录与Android子目录+导入aar文件至Android目录下
3.1.找到AndroidManifest.xml
将.arr后缀改为.rar,这样就可以解压出来文件夹,找到AndroidManifest.xml
3.1.导入AndroidManifest.xml文件至Android目录下
1.注意BoudleID可以不用设置和aar相同名字+BoudleID也不用设置和AndroidManifest.xml的package一样的名字
下图是我的其他工程,其中可以发现Unity3D中的PackageName和导入AndroidManifest.xml的package内容不一样。