我正在使用Titanium这是一个跨平台的开发工具。 Titanium使用自己的构建脚本来创建apk。
我有一个使用本机模块的Titanium应用程序:一个进行VOIP调用的Java库。 Java应用程序可以工作,当我创建一个带有空模块的Titanium应用程序时,它可以工作。
但我使用基于Titanium应用程序内部VOIP模块的模块有构建问题: apk中缺少一些资源。
首先,构建系统合并来自我们的Titanium应用程序和一些原生android模块的一些资源,并将它们放在目录build
中。例如,我有build/android/res/values/strings.xml
文件,其中所有键和值似乎都正常且有效的xml 。
然后构建调用aapt并使用Titanium Resources for library Widgets创建apk(例如:通知的字符串)。在这个apk中,build/android/res/values/strings.xml
丢失了。它不存在。应用程序启动,VOIP服务启动,然后在调用所需的缺少资源后立即崩溃。
我可以使用aapt list
证明或解压缩strings.xml
缺少的apk。
深入研究钛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小部件的文件。如果我删除它,则编译失败。
我在构建之外执行了此命令,为详细模式添加了-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在哪里以及为什么消失了?
答案 0 :(得分:6)
aapt将合并所有strings.xml"值"到resources.arsc,这就是你在apk中看不到文件strings.xml
的原因。我用我的一些apks仔细检查了这个,我没有在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值在上面的字符串转储中。