【问题标题】:Unity3D with multiple jars (android jar + pure java lib)带有多个 jar 的 Unity3D(android jar + 纯 java lib)
【发布时间】:2016-07-05 09:41:37
【问题描述】:

我是 Unity3D 的新手,我已经使用 Java 完成了一些项目,这些项目需要包含在我的 Unity3D 项目中。

我想在 Unity3D 项目中添加多个 jar,但是当它们在 Unity 项目中运行时,它们之间似乎没有任何依赖关系。

为此,

  • 我尝试在Assets/Plugins/Android文件夹中添加所有相关的jar(文件夹中的多个纯java jar文件与一个Android jar调用jar的方法)

  • 我尝试只制作一个 jar 文件(通过创建一个包含所有 jar 的 Android 项目)

使用这两种方法,我可以将我的项目构建为基于 Android 的项目,但它们显示错误说相关库不存在

有什么方法可以在 Unity3D 项目中使用多个 jar 库并依赖于其他 jar?

也就是说,我想要这个结构

|主要项目(Unity) | --依赖--> |罐子库 1 | --依赖--> | jar 库 2 |

  • Jar lib 1:我需要直接调用方法的库
  • Jar lib 2:lib 1 使用的库

【问题讨论】:

  • 我倾向于忘记它。这不是 Unity 的用途。你付出了巨大的痛苦却一无所获。

标签: java android unity3d


【解决方案1】:

有什么办法可以在Unity3D项目中使用多个jar库 依赖于其他 jars?

如果您有许多相互依赖的 jar 库,则必须将它们合并为一个。是的,这些 jar 必须合并为一个,然后您可以制作一个 Unity 可以用来访问它们的桥。

Jar lib 1: Library 我需要直接调用方法

Jar lib 2:lib 1 使用的库

在这种情况下,您必须在 Lib 1 中导入 Lib 2。然后在 Lib 1 中创建调用 Jar Lib 2 中的函数的函数。然后,您可以构建 Lib 1Lib 2

在 Eclipse 中,项目->全部构建。然后将它们都导出到一个 jar 文件中。同样,在 Eclipse 中,File->Export...->Java->JAR 文件。接下来,如果它们出现,则选择两个 Lib。使用以下设置:

Java:

//来自 Lib/Jar 2 的东西(假设这是其中的函数代码)

public class Lib2{
    public static Lib2 instance = new Lib2();

    public double getRandomNumber() {
        double advancedRandomNumber = 5;
        return advancedRandomNumber;
    }
}

//来自 Lib/Jar 1 (com.roxy.app) 包的东西(假设这是其中的函数代码)

public class Lib1{
    public static Lib1 instance = new Lib1();

    public double getMagicRandomNumber() {
        double advancedRandomNumber = 15;
        return advancedRandomNumber;
    }

   //Bridge to access Stuff from jar 2
   public double getExtraMagicRandomNumber()
   {
        return Lib2.instance.getRandomNumber();
   }
}

C#:

  private AndroidJavaClass androidClass;
  private AndroidJavaObject androidFunction;

  #if UNITY_ANDROID
        if (androidClass == null || androidFunction == null)
        {
            androidClass = new AndroidJavaClass("com.roxy.app.Lib1");
            androidFunction = androidClass.GetStatic<AndroidJavaObject>("instance");
        }
  #endif

然后你可以从Lib1调用getMagicRandomNumber()函数:

double adRand = androidFunction.Call<double>("getMagicRandomNumber");

并从Lib1 中的桥接函数调用Lib2 的函数。

double adRand = androidFunction.Call<double>("getExtraMagicRandomNumber");

就是这样。这并不难,但这可能编译,因为我直接将它输入到这个编辑器。可能需要稍作修改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-17
    • 2014-01-03
    • 2019-05-04
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2013-02-23
    相关资源
    最近更新 更多