为什么不在apk中添加`<values />`?

Nic*_*zol 2 android titanium

我正在使用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" ....
Run Code Online (Sandbox Code Playgroud)

/var/folders/...是钛部件文件.如果我删除它,则编译失败.我在构建之外执行了这个命令,添加-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
...
Run Code Online (Sandbox Code Playgroud)

但没有关于我的/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)
Run Code Online (Sandbox Code Playgroud)

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

ash*_*oke 6

aapt会将所有strings.xml"values"合并到resources.arsc中,这就是为什么你strings.xml在apk 中看不到该文件的原因.我用我的apks几次检查了这个,我没有在apk中看到strings.xml.

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

    aapt.exe d strings myapp.apk
Run Code Online (Sandbox Code Playgroud)

验证您在应用中定义的某些字符串值是否在上面的字符串转储中列出.如果没有,尝试将绝对路径传递到"/Users/nicorama/ti-voip/project/build/android/res"开头的"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" ....
Run Code Online (Sandbox Code Playgroud)

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

    aapt.exe d strings myapp.apk
Run Code Online (Sandbox Code Playgroud)

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