Unity+AndroidStudio:学习:三:(第2次操作:失败).arr文件如何导入到Unity3D中+交互

Unity+AndroidStudio:学习:三:(第2次操作:失败).arr文件如何导入到Unity3D中+交互

目录


一.目的

1.1 想知道:.arr文件如何导入到Unity3D中

二.参考

2.1Unity+AndroidStudio:学习:二:(第2次操作:成功)AndroidStudio如何产生.arr文件+交互

  1. 总结:good:我自己写的,亲测有效的

2.1Unity与Android交互方案优化版

  1. Demo下载下来了,运行了是正常的。
  2. 更新后的版本 VS2019+unity2019.4.9f1
www.zeeklog.com  - Unity+AndroidStudio:学习:三:(第2次操作:失败).arr文件如何导入到Unity3D中+交互

2.1.Unity 调用Android arr包(互相调用并传值)

  1. 待检测

2.2.Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)

  1. 待检测

三.操作:1:失败

3.1 版本

  1. .aar是公司安卓工程师给我的,所以我导入到U3D
  2. unity2019.4.9f1

3.1 新建U3D工程

  1. 名字改为 :unityblelibrary ;
www.zeeklog.com  - Unity+AndroidStudio:学习:三:(第2次操作:失败).arr文件如何导入到Unity3D中+交互

3.1 .aar导入U3D

.aar导入U3D的\Assets\Plugins\Android\
www.zeeklog.com  - Unity+AndroidStudio:学习:三:(第2次操作:失败).arr文件如何导入到Unity3D中+交互
www.zeeklog.com  - Unity+AndroidStudio:学习:三:(第2次操作:失败).arr文件如何导入到Unity3D中+交互

3.1 Unity设置

  1. 包名、最低版本 和AndroidManifest.xml 保持一致。
www.zeeklog.com  - Unity+AndroidStudio:学习:三:(第2次操作:失败).arr文件如何导入到Unity3D中+交互

3.1 运行结果:导入.aar后直接打包APK:报错:

www.zeeklog.com  - Unity+AndroidStudio:学习:三:(第2次操作:失败).arr文件如何导入到Unity3D中+交互

3.1 解决报错:已解决

  1. 删除.aar里面的classes.jar
  2. 由于Unity在打包APK时会自动包含自身的classes.jar,所以需使用压缩软件打开*.aar文件删除libs目录下的classes.jar文件
www.zeeklog.com  - Unity+AndroidStudio:学习:三:(第2次操作:失败).arr文件如何导入到Unity3D中+交互

3.1.1 运行结果:打包成功

www.zeeklog.com  - Unity+AndroidStudio:学习:三:(第2次操作:失败).arr文件如何导入到Unity3D中+交互

3.1 Unity调用AS中的代码

新建代码UnityAndAndroid 然后挂在Main Camera
www.zeeklog.com  - Unity+AndroidStudio:学习:三:(第2次操作:失败).arr文件如何导入到Unity3D中+交互
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: Null