Unity3D有多个jar(android jar +纯java lib)

时间:2016-07-05 09:41:38

标签: java android unity3d

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

我想在Unity3D项目中添加多个jar,但看起来jars在Unity项目中运行时它们之间没有任何依赖关系。

为此,

  • 我尝试添加Assets / Plugins / Android文件夹中相关的所有jar(使用Android jar在文件夹中复制一些纯Java jar文件以调用jar的方法)

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

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

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

换句话说,我想要这个结构

|主项目(团结)| --dependency - > | Jar lib 1 | --dependency - > | Jar lib 2 |

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

1 个答案:

答案 0 :(得分:1)

  

有什么方法可以将多个jar库用于Unity3D项目   依赖于其他罐子?

如果您有许多相互依赖的jar库,则必须将它们合并为一个。是的,必须将罐子合并为一个,然后你可以建立一个Unity可以用来访问它们的桥梁。

  

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

     

Jar lib 2:lib 1使用的库

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

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

enter image description here

<强>爪哇:

//来自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

然后,您可以使用以下内容从getMagicRandomNumber()拨打Lib1功能

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

Lib2中的桥接函数调用来自Lib1的函数。

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

就是这样。这并不难,但这可能编译,因为我直接输入到此编辑器。可能需要进行微小的修改。