我正在构建一个针对 Android API 33 (Android 13) 的 Android 应用程序。当我使用 gradlew 在命令行上构建应用程序时,我看到以下警告:
aapt2 W 09-02 02:57:09 6715 6715 LoadedArsc.cpp:682] Unknown chunk type '200'.
Run Code Online (Sandbox Code Playgroud)
这到底意味着什么?我应该期待副作用吗?
让我们看一下提到的与resources.arscLoadedAsrc.cpp相关的文件。您的警告提到了第 682 行,如果我们查看之前的几行,我们可以在第 677 行看到您的警告。
如果在查看“可覆盖策略块”时,我们发现 a 不等于 ,则似乎会overlayable_child_chunk.type()发生此警告RES_TABLE_OVERLAYABLE_POLICY_TYPE。
通过查看switchandcase语句,我们可以看到块的子块RES_TABLE_TYPE_SPEC_TYPE应该是类型RES_TABLE_OVERLAYABLE_POLICY_TYPE,在代码的旧副本中定义为0x0205(517?),而不是200错误中显示的。当子块的类型不正确时,我们会转到default,抛出看到的警告。
此警告在内部调用LoadedPackage::Load,我们尝试type_builder_map使用 using填充loaded_package(参见第 748 行)。所以,现在我们知道我们看到这个警告是因为在尝试做一些围绕构建类型映射的事情时子块类型设置不正确。总结如下:
// A map of TypeSpec builders, each associated with an type index.
// We use these to accumulate the set of Types available for a TypeSpec, and later build a single,
// contiguous block of memory that holds all the Types together with the TypeSpec.
Run Code Online (Sandbox Code Playgroud)
在这一点上,我认为深入研究并没有多大价值。主要收获是:
该警告是在编译器内部生成的,只要一切正常就没有关系。这是由为应用程序文件构建映射时类型不匹配引起的resources.arsc。
我强烈怀疑这只是一个编译器错误,并且怀疑除了等待更高版本的编译器版本(更新目标 API)之外,您是否可以自己修复它,希望可以修复此问题。
然而,如果你确实想深入了解,我发现这个中文分析(需要翻译,在页面中搜索LoadedPackage::Load!)非常详细。load它包含函数、文件本身以及块加载的实际含义的高级描述。
它包括这个有用的图表,显示所有部分如何交互,特别是我们的_TYPE解析:
| 归档时间: |
|
| 查看次数: |
4780 次 |
| 最近记录: |