Unity Android build为Application.StreamingAssetPath中的文件提供DirectoryNotFoundException

Unity Android build为Application.StreamingAssetPath中的文件提供DirectoryNotFoundException,android,sqlite,unity3d,Android,Sqlite,Unity3d,我正在开发一个带有SQLite嵌入式数据库的应用程序。在编辑器和PC机的构建中,访问数据库没有问题。然而,当谈到安卓系统的构建时,我在一台设备上进行了测试,由于一些我不知道的原因,它无法工作 我遵循了一些官方论坛指南的步骤。我还添加了该项目的插件文件夹: 尽管如此,我仍然无法在构建后运行数据库 conn = (Applicaiton.streamingAssetsPath + "/Database.sqlite"); filepath = (Application.persistentData

我正在开发一个带有SQLite嵌入式数据库的应用程序。在编辑器和PC机的构建中,访问数据库没有问题。然而,当谈到安卓系统的构建时,我在一台设备上进行了测试,由于一些我不知道的原因,它无法工作

我遵循了一些官方论坛指南的步骤。我还添加了该项目的插件文件夹:

尽管如此,我仍然无法在构建后运行数据库

conn = (Applicaiton.streamingAssetsPath + "/Database.sqlite");
filepath = (Application.persistentDataPath + "/Database.sqlite");
WWW dbPath = new WWW(conn);
while (!dbPath.isDone) {}

byte[] bytes = System.IO.File.ReadAllBytes(dbPath.url);
File.WriteAllBytes(filepath, bytes);
connection = ("URI=file:" + Application.persistentDataPath + "/Database.sqlite");
dbconn = (IDbConnection)new SqliteConnection(connection);
我用ADB提取了日志数据,发现:

06-01 22:29:05.180: I/Unity(5835): DirectoryNotFoundException: Could not find a part of the path "/jar:file:/data/app/com.Company.App-1.apk!/assets/Database.sqlite"
从:

请注意,在Android上,这些文件包含在压缩的.jar文件中(基本上与标准zip压缩文件的格式相同)。这意味着,如果您不使用Unity的WWW类来检索文件,那么您将需要使用其他软件来查看.jar归档文件中的内容并获取文件

你的问题是:

System.IO.File.ReadAllBytes(dbPath.url);
在Android版本上,
Application.streamingAssetPath
映射到压缩的APK文件中的某个位置。Unity的
WWW
类将在内部识别并处理此问题,但是
System.IO
没有内置此行为

您可以使用
WWW
类提取文件的字节:

while (!dbPath.isDone) {}
if (!string.IsNullOrEmpty(dbPath.error)) {
    //handle www error?
} else {
    byte[] bytes = dbPath.bytes;
    //do something with the data
}

请记住,这是一个阻塞操作,可能会影响游戏性能。如果这是一个问题,您可以重构以异步方式处理所有这些问题。

您是否收到任何特定错误或异常?哪一步失败?您好,应用程序在编辑器和PC版本中没有显示任何错误。然而,当我在任何Android设备上构建和运行时,都会出现一些故障。它在某种程度上类似于数据库,通过任何路径或其他方式。当我在安卓设备上运行日志时,是否可以在可能出现错误的地方显示日志?您可以使用ADB从设备中提取日志。建议对Unity项目进行开发构建,以获取更多日志数据。网上有教程详细介绍了这一点。谢谢,我从eclipse和logcat中保存了日志。这似乎就是失败的原因:06-01 22:29:05.180:I/Unity(5835):DirectoryNotFoundException:找不到路径“/jar:file:/data/app/com.Company.app-1.apk!/assets/Database.sqlite”的一部分。你真厉害!这对我有用!明天我将尝试为iOS做构建,并提出更多的问题,几乎可以肯定,呵呵。谢谢。嗨,拉特,我也有小问题。你能帮我看看我的问题吗