gpt4 book ai didi

android - 为什么 aapt 不在 apk 中添加 ``?

转载 作者:太空狗 更新时间:2023-10-29 16:16:17 25 4
gpt4 key购买 nike

我使用的是跨平台开发工具 Titanium。 Titanium 使用它自己的构建脚本来创建 apk。

我有一个使用 native 模块的 Titanium 应用程序:一个进行 VOIP 调用的 Java 库。 Java 应用程序可以运行,当我创建一个带有空模块的 Titanium 应用程序时,它可以运行。

但是我在 Titanium 应用程序中使用基于 VOIP 模块的模块时遇到构建问题:apk 中缺少一些资源。

首先,构建系统合并了我们 Titanium 应用程序中的一些资源和一些 native android 模块,并将它们放在目录 build 中。例如,我有:build/android/res/values/strings.xml 文件其中所有键和值似乎都正常且有效的 xml

然后构建调用 aapt 并使用库小部件的 Titanium 资源创建 apk(例如:通知字符串)。在这个 apk 中,build/android/res/values/strings.xml 丢失了。它不存在。应用程序启动,VOIP 服务启动,然后在调用所需的缺失资源后立即崩溃。

Titanium build

我可以用 aapt list 或解压缩 apk 来证明 strings.xml 丢失了。

深入查看 titanium javascript 构建文件,我看到执行了以下命令:

aapt "package" "-f" "-m" "-J" "/Users/nicorama/ti-voip/build/android/gen" 
"-M" "/Users/nicorama/ti-voip/project/build/android/AndroidManifest.xml"
"-S" "/project/build/android/res"
"-S" "/var/folders/6f/twxz46614h7_q/res"
"-S" "/var/folders/6f/twxz46614h7_q/res" ....

/var/folders/... 是 Titanium 小部件的文件。如果我删除它们,apk 的编译将失败。我在构建外部执行了此命令,为详细模式添加了 -v 并将结果保存到 log.txt 中。我在这个文件中搜索 strings.xml,我发现:

Found 18 custom asset files in /Users/nicorama/ti-voip/build/android/bin/assets
Configurations:
(default)
v11
v14
....
Src: () /var/folders/6f/twxz46614h7_q/res/values/ids.xml
values/strings.xml
Src: () /var/folders/6f/twxz46614h7_q/res/values/strings.xml
Src: (af) /var/folders/6f/twxz46614h7_q/res/values-af/strings.xml
Src: (am) /var/folders/6f/twxz46614h7_q/res/values-am/strings.xml
...

但是关于我的 /Users/nicorama/ti-voip/build/android/res/values/strings.xml 文件夹一无所知,它在 appt 命令中位于第一个。

我确实拥有图像或其他 xml 文件所需的所有引用资料:

(new resource id hidden from /Users/nicorama/ti-voip/build/android/res/layout/hidden.xml)
(new resource id launcher from /Users/nicorama/ti-voip/build/android/res/layout/launcher.xml)

知道这个 strings.xml 在哪里以及为什么消失了吗?

最佳答案

aapt 会将所有 strings.xml“值”合并到 resources.arsc 中,这就是为什么您在 apk 中看不到文件 strings.xml 的原因。我用我的几个 apk 仔细检查了这个,我没有在 apk 中看到 strings.xml。

如果您想查看与“apk”打包在一起的字符串值,请运行以下命令,它将转储所有字符串值。

    aapt.exe d strings myapp.apk

验证您在应用中定义的一些字符串值是否列在上面的字符串转储中。如果没有,请尝试在开头传入“res”文件夹 "/Users/nicorama/ti-voip/project/build/android/res" 的绝对路径:

    aapt "package" "-f" "-m" "-J" "/Users/nicorama/ti-voip/build/android/gen" 
"-M" "/Users/nicorama/ti-voip/project/build/android/AndroidManifest.xml"
"-S" "/Users/nicorama/ti-voip/project/build/android/res"
"-S" "/var/folders/6f/twxz46614h7_q/res"
"-S" "/var/folders/6f/twxz46614h7_q/res" ....

新的 apk 应该有 xml 值,再次测试

    aapt.exe d strings myapp.apk

确保您的 strings.xml 值在上面的字符串转储中。

关于android - 为什么 aapt 不在 apk 中添加 `<values/>`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26206581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com