Android不复制以_开头的资源文件夹有什么原因吗?

问题描述 投票:0回答:1

我有一个以“_”开头的资产文件夹。当然,编译应用程序后,它找不到一些资源。

我找到了如何修复它的答案:https://github.com/ionic-team/capacitor/issues/1750,但我想知道这是否会对应用程序的运行产生负面影响?

android kotlin assets
1个回答
0
投票

在 Android 上(至少默认情况下),文件名编码为 UTF-8。 来自 android.os.FileUtils

    private static boolean isValidFatFilenameChar(char c) {
        if ((0x00 <= c && c <= 0x1f)) {
            return false;
        }
        switch (c) {
            case '"':
            case '*':
            case '/':
            case ':':
            case '<':
            case '>':
            case '?':
            case '\\':
            case '|':
            case 0x7F:
                return false;
            default:
                return true;
        }
    }
private static boolean isValidExtFilenameChar(char c) {
    switch (c) {
        case '\0':
        case '/':
            return false;
        default:
            return true;
    }
}

注意:FileUtils 是隐藏的 API(不适用于应用程序;用于 AOSP 使用)。用作参考(或通过反思,风险自负)

用作忽略该文件的标志。

正如 jcesarmobile 提到的,

这确实是 Android 的一个“功能”。默认情况下,它不会将以 _ 开头的资产文件夹复制到生成的 apk 中(请参阅 https://android.googlesource.com/platform/frameworks/base/+/b41af58f49d371cedf041443d20a1893f7f6c840/tools/aapt/AaptAssets.cpp#60 ).

它可能会产生特定于平台的问题。由于有效文件名的传递规则是由操作系统、文件系统、编译器、链接器和编译工具链的其他部分设置并依赖于它们的。

例如,

  • 在默认的 ASP.NET MVC 3 项目中,布局和部分
    .cshtml
    文件以下划线开头。这些文件不适合浏览。带有前导下划线的文件将被忽略。
  • Ruby on Rails 使用其 Partials 实现这一点,与 Ember Partials
  • 相同
  • 部分 Sass 文件
  • Python中,以
    _
    开头的模块不应该直接使用;同样,带有
    _
    的方法被认为是私有的,等等。
  • 在 LaTeX 中,_ 用于创建下标,并且必须包含在内,例如$...$ 以避免错误,但它会生成与您期望的不同的文本。我发现的其他上下文都包含在here

我相信现代系统几乎允许文件系统未直接禁止的任何内容。虽然我知道有些软件在显示文件时会自动用空格替换下划线以使它们看起来更好。但是,如果底层系统支持该名称,文件可以随意命名。

可以使用一些特殊字符:

&

_
^
,但不能使用
%
~
#
\
。只要系统接受,甚至可以使用 
{
}

© www.soinside.com 2019 - 2024. All rights reserved.