Eclipse 版本 (Helios 3.6.1) |
Android ADT (8.0.1) 版本 |
Android SDK (2.3 API 9) 版本 |
Google Android SDK 與 Eclipse ADT 每次在更新後,那個 Ant 的範本內容,總會有讓漁郎頭痛的變化。不是缺了某個參數,就是換了個參數名稱。這次咧!更慘!連 Ant 範本都給換了,還給你加入了 Proguard 整合!不知是該高興還是...... >_<
於是乎,漁郎乾脆整個不用 Ant,讓 Google 好人做到底,試著看看使用它新版 SDK 與 ADT 所提供的 Export Wizard 有啥方便之處?反正漁郎可以省些製作上載 Android Market 的 APK 所需的步驟就行了 (懶人的天性...^_^),以下的說明如果漁郎有搞錯的地方,夥伴們請儘量“凸槽”,好讓漁郎能有所進步... >_<
(1) 將 Android SDK 與 ADT 更新到最新版本 (撰文時為 Android 2.3 API 9 , ADT 8.0.1)。
(2) 漁郎使用的是 Eclipse 之 Helios 3.6.1 版本。
(3) 建立一個新的 Test 專案 (本文範例)。
PS:在此漁郎是以新專案建立的方式為範本說明,舊專案的處理方式則是以將整個舊專案翻新 (建新專案並將所有程式與資源檔複製到新專案中),且改成使用 Eclipse Builder 產生 .apk 檔。如果朋友們要在不更動以 Ant 為主的方式更新您的舊專案時,請使用以下命令列產生出 proguard.cfg 檔: android update project --path <project>,由於漁郎沒再去試著使用 Ant 編譯,所以在此就先不說明 build.xml 內的參數要做啥變化了,爾後當漁郎被雷打到突然想玩時再跟大夥兒分享心得 >_<。
(4) 記得 AndroidManifest.xml 中將 debuggable 改為 false。
(5) 找到並打開專案裡的 proguard.cfg 檔。
(6) 加入在 AndroidManifest.xml 中出現的 activity 名稱 (如有引入 JNI 也需要,
參考:http://developer.android.com/guide/developing/tools/proguard.html)
(7) 找到並打開專案中的 default.properties 檔。
(8) 加入 Enabled the Proguard 所需參數到 default.properties 檔中 (不用理該檔文頭的那些警告,經測試加入 proguard 參數不會被蓋掉)。
(9) 編輯 Android 專案,以產生原始 apk 檔 (在專案上以滑鼠右鍵叫出選單再點選 Build Project)。
(10) 匯出有簽章並經 Proguard 混淆且已 Zipaglin 可上載到 Android Market 的 apk 檔 (在專案上以滑鼠右鍵叫出選單再點選 Android Tools -- Export Signed Application Package...).
選單點選 |
Project Checks |
Keystore selection |
Key alias selection |
Destination and key/certificate checks (記得加入 .apk 副檔名) |
(11) 如匯出 apk 檔成功,Refresh 專案,就可看到在專案底下有個 proguard 目錄,其中有許多關於在經過 Proguard 混淆後的專案參數資料可以參考。
(12) 在你指定的匯出目錄中亦有了可上載至 Android Market 的 .apk 檔 ^__^。
PS1:當使用 Eclipse 中 Android SDK (ADT) 所提供的 Export Wizard 匯出含簽章的 .apk 檔時,ADT就已順便幫你使用 Zipalign 優化過了,因此可將製作出的 .apk 檔上載 Android Market,
參考:http://developer.android.com/guide/developing/tools/zipalign.html
PS2:當漁郎的專案使用到 libs 內自己加入的 .jar 時,在進行 Export 並使用 Proguard 有時會產生一堆 Warning,以致無法順利匯出 .apk 檔,這時在 proguard.cfg 檔內加入參數 -ignorewarning 就解了該問題。有遇到同樣狀況的朋友們不妨試試 ^_^。
參考:http://osdir.com/ml/Android-Developers/2010-12/msg02838.html
一堆 Warning @_@... |
Android SDK (2.3 API 9) 版本 圖放錯了
回覆刪除謝謝啦 ~~ 圖已更正囉 ^__^
回覆刪除現在ADT又出到9.0了....
回覆刪除是阿~~ 真的趕不上變化 @@ ... 暈
回覆刪除漁郎大哥請問一下.
回覆刪除我有個應用程式已經發佈至Market上去了
但是現在卡在更新問題...
上傳更新檔後出現這樣一段信息
(The apk must be signed with the same certificates as the previous version.)
我的android:versionName & android:versionCode有重設過了只是不知為何不能更新??
喔喔~ 完了!您是不是重新 build 過 Keystore?就那個 android.keystore?同一個程式一定要用同一個 Keystore 喔。漁郎就有慘痛的經驗,那個 GDPW 的 APP 就一直無法更新,只能重新上載一個新 APP ID 的 APP 。跟 android.versionName 與 android.versionCode 是無關的。
回覆刪除以下的連結有些網友討論的參考資料:http://www.google.com/support/forum/p/Android%20Market/thread?tid=6d113154a565b586&hl=en
回覆刪除意思是最初上傳到Market上的.apk檔要留著嗎..?
回覆刪除Export出更新檔要選(Use existing ketstory)覆蓋至原來的apk檔?
Hello~ 振揚,或許您可先參考一下漁郎「創始」的一篇文章,瞭解一下 Google 關於 Android 程式發佈的相關認證機制喔。其產出 android.keystore 的方式(command mode) 相對應於上述 Eclipsec 中 ADT 中的作法,相當於是「Keystore selection」中的 create new keystore... 與「Key alias selection」中的 create new key...。
回覆刪除參考文章:http://www.e68club.com/2010/03/eclipseandroid-sdkproguardant-android_4261.html
回覆刪除如後續需要更新 APK,則是選擇 Use existing ketstory...,並使用原來的 Keystore 檔。
回覆刪除好了,問題已經解決了
回覆刪除我重新傳了一個新的程式上Market上去測試
更新時
保留原始的apk檔然後覆蓋更新後的apk
呵呵,果然是要用(Use existing ketstory)
看來我的舊程式要砍掉重練了@@
謝謝你呀 漁郎大哥^^
派謝~沒事先「警告」你那個 keystore 檔的重要性 >_< ....
回覆刪除還有,只要是使用原本的 keystore 檔與選擇「Use existing ketstore」所製作出來的 APK 檔都可以覆蓋與更新在 Android Market 上面已經上載的舊 APK 檔,不見得要保留存在 Local(本機電腦)的 APK 檔。「重點」是:一定要留存原本使用在這個 APK 的 keystore 檔,不要刪除或遺失了這個 keystore 檔,不然,會粉慘滴。。。