上方廣告

2012年10月16日 星期二

Android 開發GoogleMap專案

前幾天把一個先前已開發好的GoogleMap專案移到另外一台電腦上開啟,卻發現GoogleMap地圖沒有辦法正常work,找了好久才突然想起,若要在模擬器開發GoogleMap的程式必須先去註冊一組debug key(金鑰),這個很重要每次都忘記~"~。

在Android上面開發GoogleMap並不是直接接元件拉過去就可以使用了,必須先去註冊一組Key,而且模擬器和實體機器(發佈版本)的使用方式又有些許不同,下面我就記錄一下整個開發的步驟。


1. 新增一個Android專案,由於要開發GoogleMap專案,因此要建置的SDK請選擇Google APIs(API x),這樣產生的專案會自動幫你加上GoogleMap所需要的jar相關連結,當然也可以後面在手動加上,但這裡只是要示範,因此還是請選擇Google APIs的SDK。


2. 請將要呈現畫面的類別將本來繼承的類別 Activity 改成 com.google.android.maps.MapActivity,並且必實現isRouteDisplayed(),isRouteDisplayed主要在提供一些路徑的資訊,目前用不到,因此還是維持回傳false就好。
public class MainActivity extends Activity {} 
//調整成 public class MainActivity extends com.google.android.maps.MapActivity{}  
//實現該Methods 
@Override protected boolean isRouteDisplayed()  {  return false; } 

3. 將呈現物件的xml檔替換成,這個主要是用來呈現map用的,另外等一下會說明android:apiKey這個屬性(Google金鑰)該如何設定。
<com .google.android.maps.mapview="" 
 android:apikey="your google map key" 
 android:id="@ id/myMapView" android:layout_height="fill_parent" android:layout_width="fill_parent"/>

4.另外由於GoogleMap會使用到網路以及Google所提供額外的Lib,因此必須給予授權,請再AndroidManifest.xml加入授權。
GoogleMap Lib授權 : <uses-library android:name="com.google.android.maps"/>
網路授權 : <uses-permission android:name="android.permission.INTERNET"/>
<manifest android:versioncode="1" android:versionname="1.0" package="com.example.googlemap" xmlns:android="http://schemas.android.com/apk/res/android">
 <uses-sdk android:minsdkversion="8" android:targetsdkversion="15">
 <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme">
  <activity android:label="@string/title_activity_main" android:name=".MainActivity">
   <intent-filter>
    <action android:name="android.intent.action.MAIN">
     <category android:name="android.intent.category.LAUNCHER"/>
    </action>
   </intent-filter>
  </activity>
  <!-- GoogleMap Lib授權 -->
  <uses-library android:name="com.google.android.maps"/>
 </application>
 <!-- 網路授權 -->
 <uses-permission android:name="android.permission.INTERNET"/>
 </uses-sdk>
</manifest>

5. 只要有合法的apiKey,理論上剛剛上面的設定就可以正常的顯示地圖了(當然還要設定中心座標等一些基本設定,這裡不說明),下面就另外說明如何跟Google取得合法的金鑰,這裡又分成兩個部份來說明,模擬器專用與實體機器專用,下面就分開進行說明。


=================模擬器用===================
1. 先取得debug.keysotre,預設路徑應該是在C:\Users\{使用者}\.android\debug.keystore,不然也可以在Eclipse找到 : Windows -> Preferences -> Android ->Build -> Default debug keystore。

2. 執行command 工具,並且移動到Java JDK預設安裝路徑bin資料夾底下。

3. 取得MD5,請輸入已下指令,若出現要輸入密碼時,請輸入android,就會產生一組認證指紋(MD5)。
keytool -list -alias androiddebugkey -keystore "C:\Users\{使用者}\.android\debug.keystore" -storepass android -keypass android

4. 但是如果按照剛剛輸入的語法取到的去是只有SHA1,而取不到MD5的話,有可能是因為您的Java SDK已升級到7.x的版本,7.x版本以上的版本預設只會取得SHA1,但這不是我們要的,因為Google的官方註冊網頁只認MD5,因此請在剛剛上一句的命令加上 【-v】,-v 會將keytool輸出MD5、SHA1、SHA256三種憑證指紋。
keytool -v -list -alias androiddebugkey -keystore "C:\Users\{使用者}\.android\debug.keystore" -storepass android -keypass android



5. 請到GoogleMap API Key的申請網站,輸入剛剛取得MD5編碼來取得apiKey,取得apiKey後,
請把該Key值放到剛剛最上面提到的android:apiKey="your google map key"當中。


6. 執行模擬器就可以正確的顯示GoogleMap了,如下圖。


=================實機用(正式發佈時使用)===================

1. 使用剛剛的方法已經可以在模擬器上面正常運作,但是如果要發佈到實體機器上面還是建議更換一下自己的keystore。
PS. 直接使用Eclipse安裝到手機的可以正常顯示,但是如果將專案移動到另外一台開發,但是沒有調整該電腦的apiKey,還是會造成無法正常顯示的問題。

2. 首先必須先建立自己的keystore,執行command 工具,並且移動到Java JDK預設安裝路徑bin資料夾底下。接著輸入keytool指令(詳細說明如下),輸入會會有一系列的問題,就按照說明輸入,並且要記住輸入的資訊,輸入完後就會在Java JDK預設安裝路徑bin資料夾底下產生剛剛輸入的檔案名稱的檔案。
--參數說明如下--
  keystore:檔案名稱
  alias:別名
  keyalg:演算法
  validity:有效天數
keytool -genkey -v -keystore primeeagle.keystore -alias PrimeEagle -keyalg RSA -validity 36500


3. 有了這個keystore,接著就按照模擬器取得apiKey的方式來取得,取得自定keystore的MD5命令如下。
keytool -list -v -keystore "絕對路徑" -storepass 密碼 -keypass 密碼

4. 將取得apiKey的值放到剛剛最上面提到的android:apiKey="your google map key"當中。

5. 因為是使用我們自己的keystore,因此發佈到手機上面的方法也有些不同,必須匯出帶有簽章的apk檔案,請在專案處點選滑鼠右鍵 -> Android Tools -> Export Signed Application Package...

a. 選擇專案

b. 選擇剛剛產生的keystore檔,並輸入密碼

c. 輸入別明,並輸入密碼

d. 選擇apk要儲存的路徑

6. 產生的APK檔就是可以發佈的檔案,可以選擇上架或者將該檔案直接安裝到手機上皆可。



PS. 之前還有發生過我把作業系統更換成64位元的,但是打開先前的Android專案卻發現原本寫的GoogleMap顯示不出來,我的直覺告訴我是key的問題,於是想要重新註冊一個,但卻發現我本機電腦上找不到C:\Users\{使用者}\.android\debug.keystore,這支檔案,google了一下網路上有人說明,debug.keystore 這個檔案是建立 Android 專案之後才會產生的檔案。


本文範例 :
GoogleMap.zip