5

我有一个游戏,它在数千个地方使用 std::wstring 作为其基本字符串类型,并使用 wchar_t 及其函数进行操作:wcsicmp() wcslen() vsprintf() 等。

问题是 R5c 不支持 wstring(撰写本文时的最新 ndk)。

由于国际化,我无法更改代码以使用 std::string 并且我会破坏许多游戏使用的游戏引擎......

我有哪些选择?

1 - 用我自己的字符串类替换字符串和 wstring

这会给我更好的平台独立性,但重新实现轮子是荒谬的。我已经开始使用字符串的 COW 实现。我需要它是 COW,因为我将它们用作 hash_maps 中的键。这当然需要大量的工作并且容易出错......但似乎这是我可以做的事情。

2 - 尝试使用我自己实现的 C 标准库的宽字符字符串函数(wcslen、mbstowcs ...)修复 NDK 重新编译 STLPort

这将是更可取的方式......但我不知道该怎么做:(

如何替换 libstdc++.a 或 libstlport_static.a 中的函数(比如说 wcslen)?(不确定它们在哪里:()

而且我不确定我需要重新实现哪些功能,我知道 wcslen 不起作用所以我想它们应该都是......

3 - 你有其他想法吗?

我等不及官方解决这个问题,如果我不知道如何做#2,我将不得不选择#1。

我在某处读到,如果您以 2.3 为目标,则可以使用 wstrings,但我应该以 Android 2.1 为目标。

PS:忘了说我当然需要使用STL,但没有RTTI,我可以毫无例外地生活。

提前致谢!

4

3 回答 3

1

试用 CrystaX 的 NDK。早在官方的谷歌支持之前,它就有了 stl 支持。当前版本 (r5) 基于官方 ndk r5,仍然是 beta 3,但它确实支持 wchar_t。

http://www.crystax.net/android/ndk-r5.php

于 2011-06-28T20:14:41.483 回答
0

I'm suffering from the same problem as you, but my only other thought is to load the strings via the JNI (as jstring* in native land), then convert them to UTF characters as necessary. Take a look at the available JNI string functions here:
http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html#string_operations

于 2011-06-22T12:07:06.057 回答
0

Qt提供了出色的写时复制、国际友好的字符串实现QString,即 LGPLed。

理论上,您可以从 Qt 源代码中提取它并在您自己的项目中使用它。您将在Qt 源代码下载src/corelib/tools/qstring.h中找到 QString 实现。您还需要、、和包含/类(都在文件夹下),并且您应该在编译时进行定义。(为此,我将手动编译或使用我自己的脚本/Makefile。)并不简单,但是一旦你启动并运行它,你的生活会简单得多。这比重新发明轮子要好,因为它带有大量的便利功能和特性。.cppQCharQByteArrayQAtomicQNamespacecorelibQT_NO_STL_WCHAR

您也可以将 QtCore 模块作为一个整体来使用,而不是仅仅剥离 QString。请参阅android-lighthouse 项目以获取到 Android 的 Qt 端口。(此外,无论您做什么,从那里获取资源可能比从上面的“香草”链接中获取更好。)

于 2011-06-27T19:35:11.980 回答