萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> 使用Eclipse給 APK 簽名遇到的問題及解決辦法

使用Eclipse給 APK 簽名遇到的問題及解決辦法

  今天用 APK 反編譯工具看了一下自己項目生成的 APK 文件,發現代碼並沒有混淆,於是設置了用 ProGuard 混淆代碼,可是混淆是必須在非 Debug 模式才會生效的,即使你是以 Release 模式來 Run As 啟動所生成的 APK 包,依然是沒有使用 ProGuard 混淆的。於是決定導出一下 Release 版的 APK,導出分“簽名”和“不簽名”的兩種,都這麼做了,當然是要簽名一下了,所以遇到了後面這兩個問題。

  一、strings.xml 的翻譯問題

  在你的項目名字上面點鼠標右鍵,彈出下面的菜單,選擇 Android Tools -> Export Signed Application Package... ,

  然後會看到這麼一個提示:

  並且得到下面這樣的錯誤描述:

  大意是,導出操作因為 Lint Error Checking (檢測 Lint 錯誤) 出現致命錯誤而退出,請修正這些錯誤再運行導出,或者在設置裡的 Android -> Lint Error Checking 頁面裡把 “Run full error check when exporting app” 把選項關掉。

  而錯誤描述裡面的說的是,strings.xml 裡面的 app_name 缺少 af(Afrikaans), am(Amharic), ar, bg, bn-rBD, ca, cs, da, de ... 等語言的翻譯,這個可能跟創建工程時自動生成的項目 appcompat_v7 裡的 strings.xml 的語言數量有關,我們當然不希望每種語言都翻譯一遍啊,純屬吃多了,除非我們真的想每種語言都翻譯。

  另一方面,我們也不希望關掉所有的 Lint Error Checking,所以我們可以這麼做,打開eclipse 菜單的 Windows -> Perferences,

  切換到 Android -> Lint Error Checking 子項下面,下面這是 Missing Translation 的默認設置:

  我們可以把這一項的 Severity 由 Fatal (致命) 修改為 Ignore(忽略) 或者 Warning(警告),如下圖:

  另:關於多語言翻譯的問題,有一個問題是值得關注的,例如:《Android翻譯多國語言字符串注意事項》。

  二、簽名 keystore 的逗號問題

  點擊確定,然後重新開始前面的步驟,開始導出,這次可以了,下面是導出的界面,選擇你要導出的項目:

  後面就是選擇 keystore ,你可以選擇已經存在的 keystore 或者新建一個 keystore,我選擇新建,輸入密碼,然後進入下面這個設置界面:

  下一步,最後生成的時候,我們得到這樣一個錯誤:

  Google 一下,找到這麼一篇: 《keytool 錯誤: java.io.IOException: Incorrect AVA format》,stackoverflow 上也有類似的討論:keytool error :java.io.IoException:Incorrect AVA format ,結論都是一樣的,原來原因竟然是因為 “,”(逗號) 被認為是特殊字符,這通常發生在書寫 “City or Locality” 時,按我們平時的習慣都會寫成 “Beijing, China”,而我也不例外的寫成了 “GuangXi, China” ,所以就出錯了,找到原因,去掉逗號再試,就 OK 了。

  除了用 Eclipse 以外,還有一種簽名方法,就是使用 Keytool 和 Jarsigner 給 app 簽名,而這種簽名是允許加入這個逗號的,《keytool 錯誤: java.io.IOException: Incorrect AVA format》 裡有提到。

  這裡貼一個 keytool 關於特殊字符的說明及用法,摘自:http://www.oschina.net/question/163910_29310,

  特殊字符還包括,加號(+),引號("),斜槓(),大於小於號(< 和 >),分號(;) 等,解決的辦法是用 轉義符。

copyright © 萬盛學電腦網 all rights reserved