首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Eclipse 為 APK 簽名完整教程:解決 Lint 錯誤與 Keystore 逗號陷阱

     編輯:更多程式設計知識

在 Eclipse 中導出簽名 APK 時,常遇到兩大阻礙:Lint 錯誤導致導出中斷、Keystore 信息中包含逗號導致 keytool 失敗。本文提供完整解決方案,助你順利完成發布簽名。

問題一:Lint 錯誤阻止導出

現象

右鍵項目 → Android Tools → Export Signed Application Package 時,彈出致命錯誤:

Lint found fatal errors while assembling a release target. The following issues were found: MissingTranslation: "app_name" is not translated in "af" (Afrikaans), "am" (Amharic), "ar" (Arabic) ...

原因:ADT 預設啟用 Run full error check when exporting app,且 MissingTranslation 級別為 Fatal。項目依賴 appcompat_v7 等庫帶入大量語言資源,導致主項目 strings.xml 被要求翻譯所有語言。

解決方案:調整 Lint 策略(推薦)

  1. 打開 Window → Preferences → Android → Lint Error Checking
  2. 搜索 MissingTranslation
  3. 將 Severity 從 Fatal 改為 Warning 或 Ignore
  4. Apply → OK,重新導出即可通過

優勢:保留其他 Lint 檢查(如未使用資源、性能隱患),僅放寬翻譯檢查。

替代方案:關閉導出時完整檢查(不推薦)

同頁面取消勾選 Run full error check when exporting app。缺點:跳過所有 Lint 檢查,可能漏掉真正錯誤。

問題二:Keystore 信息中逗號導致 keytool 失敗

現象

創建新 Keystore 時,填寫 City or Locality(城市/地區)欄位輸入 Beijing, China 或 GuangXi, China,點擊下一步報錯:

keytool error: java.io.IOException: Incorrect AVA format

根因

keytool 解析 Distinguished Name (DN) 時,將逗號 , 視為字段分隔符(RFC 2253)。DN 格式為:

CN=Common Name, OU=Organizational Unit, O=Organization, L=Locality, ST=State, C=Country

若 L=GuangXi, China,解析器誤以為 L=GuangXi 結束,China 為下一字段,導致格式錯誤。

解決方案

  • 方法一(最簡單):去掉逗號,改用空格或分號:GuangXi China 或 GuangXi; China
  • 方法二(需轉義):使用反斜槓轉義 GuangXi\, China(Windows 下可能需雙轉義 GuangXi\\, China)

其他特殊字符同理需轉義:+ " \ < > ; 等。

完整導出流程圖解

  1. 右鍵項目 → Android Tools → Export Signed Application Package
  2. 選擇導出項目 → Next
  3. 選擇 Create new keystore → 瀏覽保存路徑(如 my-release-key.keystore) → 設置密碼
  4. 填寫 Key 信息:
    • Alias:my-key-alias
    • Password:Key 專用密碼(可與 Keystore 密碼不同)
    • Validity (years):25(建議 25 年以上,Google Play 要求 2033 年後仍有效)
    • First and Last Name:Your Name
    • Organizational Unit:Department
    • Organization:Company Name
    • City or Locality:Beijing China (無逗號)
    • State or Province:Beijing
    • Country Code (XX):CN
  5. 指定 APK 輸出路徑 → Finish

備選方案:命令行簽名(完全避開 GUI 限制)

# 1. 生成 Keystore
keytool -genkeypair -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 9125 -dname "CN=Your Name, OU=Dept, O=Company, L=Beijing China, ST=Beijing, C=CN" -storepass keystorePass -keypass keyPass

# 2. 簽名 APK (使用 apksigner,Android 24.0.3+ 推薦)
apksigner sign --ks my-release-key.keystore --ks-pass pass:keystorePass --key-pass pass:keyPass --out app-signed.apk app-unsigned.apk

# 3. 驗證簽名
apksigner verify --print-certs app-signed.apk

命令行方式支持 DN 中包含逗號(用引號包裹整個 -dname 值),且適合 CI/CD 自動化流水線。

最佳實踐建議

  • 妥善備份 Keystore:丟失將無法更新應用,建議加密存儲多地備份。
  • 區分 Debug/Release Keystore:Debug 簽名僅用於開發調試,Release 簽名用於發布。
  • 遷移到 Android Studio + Gradle:signingConfigs 統一管理,構建腳本化,避免 Eclipse 歷史包袱。

掌握這兩大核心問題的解決之道,Eclipse 簽名 APK 將不再是攔路虎,而是順暢的發布環節。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved