アセットのファイル名に Unicode 文字 (中国語やアラビア語など) が含まれている場合、ファイルをパッケージにデプロイできず、エラーが発生します。
ファイルの名前を ANSI 文字に変更すると修正されます。
MonoDevelop + MonoDroid でユニコード アセットをデプロイする方法はありますか?
アセットのファイル名に Unicode 文字 (中国語やアラビア語など) が含まれている場合、ファイルをパッケージにデプロイできず、エラーが発生します。
ファイルの名前を ANSI 文字に変更すると修正されます。
MonoDevelop + MonoDroid でユニコード アセットをデプロイする方法はありますか?
これはどこにも文書化されていませんが、アセットのファイル名は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;
}
aapt
Android/にこの要件がある理由がわかりません。
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 プロパティを変更する必要がある場合があります)。