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