Google Maps API v2 android版本開發 國內手機不支持google play Service相關問題解決
Google Maps API v2 android版本開發 國內手機不支持google play Service相關問題解決--圖文教程
google 地圖在國內的使用讓人很頭痛,麻煩得要死,真搞不明白google為什麼不能搞成跟百度地圖那樣讓人使用。
後註:最近刷機後重新安裝(默認root的)可以直接在市場上下載幾個apk安裝後使用google服務了。
google maps依賴於google play Service,而國內手機大部分都沒預裝google play Service,單獨安裝也安裝不了,要root後經過幾步安裝系統app才能使用。
v2版本的申請api key方式讓調試也變得複雜,開發的jar包不是用普通的導入方式就可以的,還需要導入工程,相對其他功能來說複雜了很多,網上搜索了很多資料,自己測試出了很多問題後總算在手機上看到地圖了,這裡記錄一下,時間是2013-03-25.(以後可能現在可以的方法又不行了)。
把自己手機上最新的apk導出來傳到博客上共享了google服務相關apk-20130325.zip
http://files.cnblogs.com/zdz8207/google%E6%9C%8D%E5%8A%A1%E7%9B%B8%E5%85%B3apk-20130325.zip
官方介紹地址
Google Maps Android API v2的初步介紹: https://developers.google.com/maps/documentation/android/ Introduction https://developers.google.com/maps/documentation/android/intro
===================================================
具體步驟:
一、下載 Google Play services SDK :打開Android SDK Manager進行下載。
更新sdk內容,拉到最下面,下載會到你sdk目錄的extras目錄下,具體路徑跟你環境有關,如上圖,滑鼠移動上去可以看到。
二、申請api key
1.獲取數字證書的證書指紋,數字證書(digital certificate)有Debug和Release兩種。本地調試的debug keystore 文件debug.keystore。默認和虛擬機AVD存放在一起,xxx.android,也可以通過Eclipse中的Windows>Preferences>Android中的Default debug keystore進行查看。Release的是自己發布應用生成的keystore在cmd命令行里切換到你安裝的JDK的bin目錄中輸入下列命令(路徑替換成你自己的):keytool -v -list -keystore E:androidavd.androiddebug.keystore
debug.keystore默認密碼是android,自己的簽名文件是你自己設置的密碼,跟發布時輸入的密碼一樣。查看"證書指紋"中的SHA1中的內容,這個內容記下來,接下來會使用到. 效果圖如下:
2.創建Google Maps API Key
https://code.google.com/apis/console需要先登錄,首次使用會出現讓你創建API工程的頁面. 點擊Create project後會跳轉到services頁面,需要在這個頁面選擇你要使用的API.選擇Google Maps Android API v2. 跳轉到服務條款確認的頁面,接受後,在顯示的頁面中左邊列表選擇」API Access」,然後點擊Create new Android key... 按鈕.
在彈出的對話框中填寫SHA1認證指紋和程序的包命,中間用分號分隔(google自帶的google map v2示常式序的包命是com.example.mapdemo): C6:3D:DB:7B:1C:07:FD:5A:53:E0:85:28:3D:D1:5F:FE:FF:8E:D1:38;com.example.mapdemo點擊create按鈕後,就創建了一個新的API key: Key for Android apps (with certificates)API key: AIzaSyDFGLwpvnJ33QxKvHPY7MxrhbNUX29J42YAndroid apps: C6:3D:DB:7B:1C:07:FD:5A:53:E0:85:28:3D:D1:5F:FE:FF:8E:D1:38;com.example.mapdemoActivated on: Mar 25, 2013 12:56 AM
上面生成的API key配置到AndroidManifest.xml<meta-dataandroid:name="com.google.android.maps.v2.API_KEY"android:value="AIzaSyDFGLwpvnJ33QxKvHPY7MxrhbNUX29J42Y"/>
再到Service裡面打開api功能,尤其是android的api v2 哪項,否則無法使用申請的key
三、導入工程
Eclipse中選擇 File > Import, Android > Existing Android Code into Workspace. (注意: 是 Android > Existing Android Code into Workspace, 不是General > Existing Projects into Workspace, 否則是無法導入) ,拷貝到自己的工作目錄,注意:這個項目和maps項目必須在同一文件夾或者工作空間才行,否則會出錯。
導入<android-sdk-folder>/extras/google/google_play_services/samples/maps 注意:新版本eclipse不能先複製到workspace下再導入了,否則會報錯。
Eclipse中選擇 File > Import, Android > Existing Android Code into Workspace,把此程序導入到Eclipse中.(注意: 這裡是 Android > Existing Android Code into Workspace, 而不是General > Existing Projects into Workspace, 否則會出現大量錯誤.)
導入後發現有大量錯誤,解決辦法
1.刪除reslayout下面的options_demo.xml multimap_demo.xml 刪除對應類,修改MainActivity。
2.創建libs文件夾,導入android-support-v4.jar
3.修改AndroidManifest.xml 把申請到的api key 填到裡面,
注意,你的包名必須和申請的一致才可以,修改了包名以後要重新申請,當然debug.keystore不一樣也要重新申請,就是說我這裡這個key你是用不了的
<meta-dataandroid:name="com.google.android.maps.v2.API_KEY"android:value="AIzaSyDFGLwpvnJ33QxKvHPY7MxrhbNUX29J42Y"/>
4.把google-play-services.jar這個jar包導入,在自己的項目上右鍵,選Properties,左邊選Android,然後在下面的Library裡面Add剛才的google-play-services_lib。
注意:一定要變成綠色打勾了以後才可以,當前情況下可以的,關閉後再進入有可能又變紅x了,原因應該是路徑的問題,上面說過了兩個項目必須在同一workspace裡面才可以。
另外,手機的google play必須更新到最新版本,否則第一次運行會提示要你先更新了才能使用。
本人的運行效果:
測試過程遇到了很多問題,可能不同環境,不同機型還會遇到其他問題,我遇到的問題要點都在上面說明了,下面是兩個報錯比較多的異常。
03-25 13:09:00.265: E/AndroidRuntime(16215): java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
03-25 15:45:19.311: E/Google Maps Android API(10212): Failed to load map. Could not contact Google servers.
最後為了方便大家把自己手機上最新的apk導出來傳到博客上共享了google服務相關apk-20130325.zip
把兩個導入到workspace的項目代碼也發上來吧---由於key和環境不一樣,其他人導入了也用不了的,只能做參考了。
google-play-services_lib.zipmaps.zip
=========================================
收集的一些反饋信息
博主,我虛擬機跑的地圖是英文版的 看你截圖跑出來是中午地名 這個哪裡控制 。 還有博主Release版的 發布後在手機上地圖跑出來了沒? 我創建的私人證書 然後用裡面的SHA1申請了API KEY 替換key後在手機上顯示的是一片空白 地圖顯示不出來 只有+-兩個標準 包名是匹配的 由於我是新手 第一次生成自個的私人密鑰 地圖始終顯示不出來 我懷疑是我的證書有問題 求助啊..---------------------------------------------------------地圖出來什麼版本跟手機或者虛擬機設置的語言有關的,你把語言設置成中文,地圖就變成中文了,這個是google地圖自己做的事情。Release版的和debug版的沒什麼差別的,就生成api key的SHA1不一樣。可以用ADT插件生成的私人證書然後導出簽名。Release版的證書你不能在eclipse裡面直接run的,直接run的是用debug的簽名的,Release版的需要Export出正式版apk安裝才能正常使用。
========================================
流風,飄然的風,本人博客網站:http://www.ssqhm.comQQ群:Android技術交流群 253065556, python技術交流群:453879716 有興趣的可以加入分類: android, iphone-ios標籤: android, google, maps, api, v2, google-play-services好文要頂關注我收藏該文
流風,飄然的風關注 - 1粉絲 - 74 +加關注 2 0 (請您對文章做出評價) 上一篇:android計時器,時間計數器的實現 下一篇:Android 拖動條(SeekBar)實例 附完整demo項目代碼 posted @ 2013-03-25 19:46 流風,飄然的風 閱讀(11839) 評論(20) 編輯 收藏 發表評論 #1樓 2013-03-26 16:35 | Jewin 博主,我虛擬機跑的地圖是英文版的 看你截圖跑出來是中午地名 這個哪裡控制 。 還有博主Release版的 發布後在手機上地圖跑出來了沒? 我創建的私人證書 然後用裡面的SHA1申請了API KEY 替換key後在手機上顯示的是一片空白 地圖顯示不出來 只有+-兩個標準 包名是匹配的 由於我是新手 第一次生成自個的私人密鑰 地圖始終顯示不出來 我懷疑是我的證書有問題 求助啊..支持(0)反對(0) #2樓 2013-03-26 16:59 | Jewin @流風,飄然的風那我Release版的在手機上跑不出來 應該就是api key的問題了 api key出了問題 那就是我在證書籤名上有問題咯? 用ADT插件生成的私人證書然後導出簽名 是可行的么?支持(0)反對(0) #3樓 2013-03-26 17:13 | Jewin @流風,飄然的風我測試的項目是谷歌官方示例項目 Key for Android apps (with certificates)API key: AIzaSyDtSzsnloYpPkYmS75mJB4_ekHInFrlUasAndroid apps: BD:7D:38:75:76:9D:8A:F5:ED:C5:B4:FD:64:B5:07:44:03:BD:41:83;com.example.mapdemo<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyDtSzsnloYpPkYmS75mJB4_ekHInFrlUas"/>包名和申請到的api key是對應了的 可是還是顯示空白支持(0)反對(0) #4樓 2013-03-28 16:20 | Jewin @流風,飄然的風現在最讓我鬱悶的事情發現了,當我下載了google地圖打開運行過後,再運行我的demo 地圖就跑出來了 各方面功能皆能正常使用, 然後我把google地圖卸載了清除了緩存 再次運行我的demo 一切還是正常的 但是當我把我的demo卸載重裝後 一切又回到原地 顯示一片空白 只有+-兩個logo支持(0)反對(0) #5樓 2013-03-28 16:23 | Jewin @流風,飄然的風我一直懷疑是ADT插件快捷創建的證書不行 今天我嘗試用cmd創建了個新證書 提取出SHA1申請的api key 運行發現還是一樣 顯示一片空白 只有+-兩個logo支持(0)反對(0) #6樓 2013-03-28 16:29 | Jewin @流風,飄然的風Google APIs Console.裡面 Google Maps Android API v2 和Google Play Android Developer API 還有Google Maps API v2 服務我全都是開啟了的測試了這麼久除了在虛擬機上直接跑出地圖來了以外 就沒成功的案例了 實在想不明白問題出在哪裡。 難道還是說國產手機不支持Google Play services? 我用小米1 小米2 還有三星蓋世3 測試均是一樣的結果支持(0)反對(0) #7樓[樓主] 2013-04-01 18:12 | 流風,飄然的風 @Jewin我的都是在真機上測試的 沒有在模擬器上跑過支持(0)反對(0) #8樓 2013-05-20 19:40 | wzwanlin Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).樓主,這個是什麼錯誤啊支持(0)反對(0) #9樓[樓主] 2013-07-13 18:28 | 流風,飄然的風 @wzwanlin
不能連接google服務,有可能是google伺服器不穩定導致的,也有可能你沒有安裝好google的服務框架支持(0)反對(0) #10樓 2013-07-25 22:24 | 移動中的鴨子 樓主啊!你真的是令我淚流滿面啊!就因為你一句話,一句「注意:這個項目和maps項目必須在同一文件夾或者工作空間才行,否則會出錯。」我終於解決我的問題啊!我x度、google,死活沒找到根本原因,結果卻因為你這句話提醒了我,讓我的程序一下子用上了地圖,感謝你。為了讓後面的童鞋不要走錯路我說說我的情況:我按照「聖騎士Wind」的文章,做個地圖軟體,結果,運行時彈出了個錯誤:android.view.InflateException: Binary XML file line #6: Error inflating class fragment 問題似乎指向「activity_main.xml"布局文件,於是我又回頭將Fragment相關的包又改來改去,有說是v4包的問題,可我改了也一樣,我甚至看到「聖騎士Wind」那篇文章有人提問相同問題,但是沒有解決(當然,我剛剛回復了解決方案)。 最糟糕的是,我以前的那些涉及Fragment的項目全部出現同樣的錯誤,直接崩潰,我在壓力中找呀找呀,google play server裝了又卸,下載個新的又裝,差點以為我的所有項目作廢了,正在思量今晚如何過。 結果,就因為看到你的那句話,讓我徹底明白了為什麼谷歌自帶的demo可以我不可以的原因了,現在那個莫名其妙的」android.view.InflateException: Binary XML file line #6: Error inflating class fragment「已經不出現了。雖然不知道這個錯誤怎麼來,但是解決了問題始終是值得慶賀。再次感激樓主。支持(0)反對(0) #11樓[樓主] 2013-08-02 01:05 | 流風,飄然的風 @移動中的鴨子謝謝你的回復,這個注意之所以加紅加粗也是因為我自己在這個問題上折騰了很久才搞清楚的,希望對大家有幫助。支持(1)反對(0) #12樓 2013-09-12 17:56 | hubs 大俠們,是實現了 google map的展示,但要實現定位必須要求你 還要安裝 google play services 和store 估計好像還得gmail賬號登錄進去, 這樣嵌套進應用的話就會強制國內手機用戶安裝 google play services 和store 這樣用戶會不滿意,用一個應用要 安裝3個apk, 我們現在是放棄google地圖了,希望對大家有個提示幫助支持(1)反對(0) #13樓 2013-09-29 20:41 | 蘇灕江 您好~我嘗試運行了您的demo,並且已經用了我自己的的debug證書和您的項目名稱生成了一個API KEY重寫進去了,但是還是一直出現下面這種情況
,能幫忙看下怎麼解決嗎,我都是按照您的步驟做的,android服務框架也都安裝了啊,謝謝。支持(0)反對(0) #14樓[樓主] 2013-09-29 21:39 | 流風,飄然的風 @蘇灕江
根據你報錯的提示 應該是你沒有申請正確的api key 沒有在google帳號控制台裡面開啟google maps的功能導致的支持(1)反對(0) #15樓 2013-09-30 11:26 | 蘇灕江 @流風,飄然的風仔細檢查了一遍我的配置信息也沒有發現有哪個地方出錯了,能請您幫我看看嗎?配置的截圖信息在這個文檔里:http://pan.baidu.com/share/link?shareid=2318449787&uk=3760930196支持(0)反對(0) #16樓 2013-10-22 11:56 | 奶茶gg 不錯 謝謝支持(0)反對(0) #17樓 2013-11-14 11:51 | 闌珊尋夢 11-13 22:41:52.759: E/AndroidRuntime(757): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mlgb/com.example.mlgb.MainActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class fragment樓主啊,我明明已經導入了呀,為什麼還會顯示這樣。支持(0)反對(0) #18樓 2013-11-14 11:52 | 闌珊尋夢 [img]http://images.cnitblog.com/blog/410877/201311/14115151-5796d699bf09412c9c50c1a4b8d763fc.x-png[/img]支持(0)反對(0) #19樓 2013-12-03 15:41 | 循序漸進--> 啥都不說了 非常感謝樓主 !! 我的小米2s 只安裝一 Play Stroe 然後啟動地圖 demo,在demo中 獲取google 服務,自動更新 就OK了 ! 再次感謝 樓主!支持(0)反對(0) #20樓 2014-05-10 16:02 | lawrence199243 博主您好,我嘗試用了下您的代碼現在報錯主要有幾個方面:R.layout.basic_demoR.drawable.newark_nj_1922,R.id.description都是最後一個詞報錯,您知道哪出問題了嗎?還有您有QQ等聯繫方式嗎?謝謝
推薦閱讀:
※全國旅遊地圖精簡版,放在手機里太方便了!
※金立S10配置怎麼樣?
※為什麼總有人說什麼原生安卓流暢?
※魅藍E3——可以讓煤油「沸騰」的魅族真旗艦踐行者!
※董明珠就是和雷軍耗上了?格力也要做手機了