【问题标题】:Android files in jar library not accessible when using with Unity与 Unity 一起使用时无法访问 jar 库中的 Android 文件
【发布时间】:2013-12-24 13:48:49
【问题描述】:

我是 Unity 的新手。我有一个 Android 库 jar,我也想将它作为 Unity 的插件提供。

在库 jar 中,我有一个文件夹 html,其中包含一个文件 temp.json。在 jar 文件中(如果我解压缩),结构如下:html/temp.json(请注意,在 Unity 之外的任何 Android 应用程序中运行时 jar 都可以正常工作)

这些是我通过 Unity 调用我的库的步骤:

1) 在我的 Unity 项目层次结构中创建文件夹 Assets/Plugins/ Android

2) 将我的库 jar 文件与 AndroidManifest.xml

一起放在那里

3) 创建了一个 bridge.cs 文件,我用它来调用 jar 文件中的函数

调用了 jar 中的函数,但在我调用的库生命周期中 Android 端某处的 jar 代码中:

InputStream inputStream = MyClass.class.getClassLoader()
.getResourceAsStream("html/temp.json");

我得到一个 ResourceNotFound 异常

根据我的阅读,Unity 在打包时会忽略这些文件(如 .json)。因此,根据我的理解,为了在打包时将它们保留在 Jar 中,我创建了以下 Unity 结构:

Assets/Plugins/Android/assets/StreamingAssets/html/temp.json

我意识到放置在 StreamingAssets 文件夹中的任何文件都会被复制到库的 assets 文件夹中。

我现在用 Java 调用:

inputStream = activity.getResources().getAssets().open("html/temp.json");

但是我仍然收到文件未找到的异常。

谁能帮助我/向我解释在 Unity for Android 上执行时我必须遵循的程序才能在 Java 端读取这些文件?

【问题讨论】:

  • 你能告诉我MyClass在哪个包里吗?
  • MyClass 是库类。该库可以作为任何 Android 项目中的库正常工作。该问题仅在 Unity 中出现
  • 您是否尝试将 json 文件统一放在资源文件夹中?因为““资源”文件夹中的所有资产都将包含在构建中。”[链接]docs.unity3d.com/Documentation/ScriptReference/Resources.html
  • 就我目前而言,在 Unity 中构建时包含它的唯一方法是在构建时将 res/ 文件夹放在 tour Plugin/Android/ 文件夹中。但是,这限制了您可以使用项目结构完成的很多事情。

标签: android unity3d


【解决方案1】:

试试这个代码:

    private void readJson() {
    String json = null;
            try {

                InputStream is = getAssets().open("html/temp.json");

                int size = is.available();

                byte[] buffer = new byte[size];

                is.read(buffer);

                is.close();

                json = new String(buffer, "UTF-8");


            } catch (IOException ex) {
                ex.printStackTrace();
            }
    }

并将您的 json 文件保存到:

Assets/Plugins/Android/assets/html/temp.json

如果还是不行,请联系我

兄弟,

弗兰克

【讨论】:

  • 你好弗兰克谢谢你的回答。我已经尝试过了。问题似乎是构建插件时不包含资产文件夹,它被完全忽略了......
  • Assets 文件夹肯定会包含在内。您可以通过更改您的 file.apk -> yourfile.zip 然后解压缩来检查。您可以看到资产文件夹。
  • 是的弗兰克,资产文件夹包括在内,但似乎对库中的 java 代码不可见,因为它们不能被引用。上面的代码无法跟踪文件。
  • 也许你忘记了什么,再检查一遍。因为我检查过了,我可以用上面的代码轻松完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 2018-10-17
  • 2013-09-29
  • 1970-01-01
相关资源
最近更新 更多