2

アセットのファイル名に Unicode 文字 (中国語やアラビア語など) が含まれている場合、ファイルをパッケージにデプロイできず、エラーが発生します。

ファイルの名前を ANSI 文字に変更すると修正されます。

MonoDevelop + MonoDroid でユニコード アセットをデプロイする方法はありますか?

4

2 に答える 2

6

これはどこにも文書化されていませんが、アセットのファイル名はASCII である必要があります。これはaaptツールが必要とするためです

/*
 * Names of asset files must meet the following criteria:
 *
 *  - the filename length must be less than kMaxAssetFileName bytes long
 *    (and can't be empty)
 *  - all characters must be 7-bit printable ASCII
 *  - none of { '/' '\\' ':' }
 *
 * Pass in just the filename, not the full path.
 */
static bool validateFileName(const char* fileName)
{
    const char* cp = fileName;
    size_t len = 0;

    while (*cp != '\0') {
        if ((*cp & 0x80) != 0)
            return false;           // reject high ASCII
        if (*cp < 0x20 || *cp >= 0x7f)
            return false;           // reject control chars and 0x7f
        if (strchr(kInvalidChars, *cp) != NULL)
            return false;           // reject path sep chars
        cp++;
        len++;
    }

    if (len < 1 || len > kMaxAssetFileName)
        return false;               // reject empty or too long

    return true;
}

aaptAndroid/にこの要件がある理由がわかりません。

于 2012-05-22T20:20:10.993 に答える
3

MonoDroid チームからこれを入手しました (jomp に感謝します)。

Android は Unicode アセット ファイル名をサポートしていないため、代わりにファイルの Build アクションを EmbeddedResource に設定し、.NET リソースを使用してリソースにアクセスできます。

  using (var s = new StreamReader (typeof (Activity1).Assembly
       .GetManifestResourceStream ("Úñîćödę.txt")))
   button.Text = s.ReadToEnd ();

(Assembly.GetManifestResourceStream() に渡される値と一致するように、ファイルのリソース ID プロパティを変更する必要がある場合があります)。

于 2012-05-22T20:42:43.310 に答える