2014-10-05 15 views
0

我正在使用鈦這是一個跨平臺的開發工具。 Titanium使用它自己的構建腳本來創建apk。aapt爲什麼不在apk中添加'<values/>`?

我有一個使用本地模塊的Titanium應用程序:一個可以進行VOIP調用的Java庫。 Java應用程序可以工作,並且當我使用空模塊創建Titanium應用程序時,它可以工作。

但我有一個構建問題使用基於Titanium應用程序內的VOIP模塊的模塊:一些資源在apk中丟失。

首先構建系統將我們的Titanium應用程序和一些原生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丟失證明。

尋找在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/...是鈦部件文件。如果我刪除它們,編譯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文件夾是首先在聘任命令罷了。

我有需要的圖片或其他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

更新了我的答案,你是否能夠測試它。 – ashoke 2014-10-11 06:09:28

回答

4

aapt會將所有strings.xml的「values」合併到resources.arsc中,這就是爲什麼你在apk中看不到文件strings.xml的原因。我仔細檢查了幾次我的apks,我沒有看到apk內的strings.xml。

如果您希望查看與'apk'一起打包的字符串值,請運行以下命令,它將轉儲所有字符串值。

aapt.exe d strings myapp.apk 

驗證您在您的應用中定義的一些字符串值是否在上面的字符串轉儲中列出。如果沒有,請嘗試在絕對路徑之初通過的「資源」文件夾"/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值在上面的字符串轉儲中。

+0

嗨,我不得不改變路徑,因爲有客戶的名字,忘記裏面的'機器人'。不幸的是,這不是一個好的答案。 – 2014-10-08 19:26:53

+0

@NicolasZozol請看我的更新回答。 – ashoke 2014-10-08 20:49:33

+0

我確實有我的字符串,所以問題在其他地方:) – 2014-10-13 09:38:05

相關問題