AAR 库中的 AndroidManifest.xml 文件总是 "readable" 吗?
Is the AndroidManifest.xml file inside AAR libraries always "readable"?
因此,如果您曾 "poked" 进入过 Android APK
存档,您可能知道其中的清单(AndroidManifest.xml
文件)并未存储作为纯文本,而是以不可读的二进制格式存储。
但今天我注意到在 AAR
档案(又名:Android 库文件)中,清单不是 "encoded",而是纯文本格式并且完全可读。
我假设这是为了方便包含在项目中和后续编译?
但我真正的问题是:我可以指望这个吗? 即:我可以指望 AAR
档案中的内容是可读的,而不是编码的吗? APK
存档使用的二进制格式?
我问这个的原因:我有一个自定义的基于 Gradle 的构建系统,可以扫描并包含基于输入配置的 AAR
库,我可以让它变得更简单如果我 100% 知道我可以直接从 AAR
档案中读取清单,而不必像现在这样使用 aapt
工具解析包。
是的,你可以依靠这个。
如果您考虑编码格式包含的内容,您会发现这对于库来说是不合适的。例如,编码格式将文本字符串引用替换为索引号——但只有当您知道与 apk 中所有字符串关联的数字时才能这样做。根据定义,库不是完整的 apk,因此在知道组合资源集之前,无法分配给资源项的编号。
如果您查看许多 aar 文件中的清单文件,您会发现它们包含 AOSP 版权 header 作为 xml 注释。注释是在转换为 apk 中使用的二进制编码格式时被丢弃的另一条信息,虽然不那么破坏交易,但在库中保留此信息可能是合法的。
请注意,不仅仅是 AndroidManifest 文件在 aar 文件中保持未编码 - 所有其他 xml 资源文件保持未编码,原因与上述类似。
因此,如果您曾 "poked" 进入过 Android APK
存档,您可能知道其中的清单(AndroidManifest.xml
文件)并未存储作为纯文本,而是以不可读的二进制格式存储。
但今天我注意到在 AAR
档案(又名:Android 库文件)中,清单不是 "encoded",而是纯文本格式并且完全可读。
我假设这是为了方便包含在项目中和后续编译?
但我真正的问题是:我可以指望这个吗? 即:我可以指望 AAR
档案中的内容是可读的,而不是编码的吗? APK
存档使用的二进制格式?
我问这个的原因:我有一个自定义的基于 Gradle 的构建系统,可以扫描并包含基于输入配置的 AAR
库,我可以让它变得更简单如果我 100% 知道我可以直接从 AAR
档案中读取清单,而不必像现在这样使用 aapt
工具解析包。
是的,你可以依靠这个。
如果您考虑编码格式包含的内容,您会发现这对于库来说是不合适的。例如,编码格式将文本字符串引用替换为索引号——但只有当您知道与 apk 中所有字符串关联的数字时才能这样做。根据定义,库不是完整的 apk,因此在知道组合资源集之前,无法分配给资源项的编号。
如果您查看许多 aar 文件中的清单文件,您会发现它们包含 AOSP 版权 header 作为 xml 注释。注释是在转换为 apk 中使用的二进制编码格式时被丢弃的另一条信息,虽然不那么破坏交易,但在库中保留此信息可能是合法的。
请注意,不仅仅是 AndroidManifest 文件在 aar 文件中保持未编码 - 所有其他 xml 资源文件保持未编码,原因与上述类似。