2014-01-07 75 views
41

我要去使用Android google maps v2android emulator/android studio 0.4.0。其中一個要求是將項目google-play-services_lib與版本低於/等於emulator級別。我的模擬器適用於api lv 17。現在的問題是,如何下載的google-play-services_lib比由android sdk manager下載的舊版本?如何下載較舊的谷歌播放服務?

+1

所有的Android設備應該始終擁有最新版本的播放服務,因爲它們會自動升級。不需要使用較低版本進行測試。 –

+0

然後如果你的設備壞了或者你沒有能力測試你的程序。其實如果你正確地設置模擬器和庫地圖也可以。但它沒有足夠的味道。只需要知道是否可以下載其他版本。或者,也許我對此有一些誤解。 – Jacob

+1

如果你的設備壞了,你無法獲得新的谷歌播放服務,那麼你將無法獲得更新版本的谷歌播放服務的應用程序,所以這是一個模擬點 – tyczj

回答

87

我意識到這是一個老問題,但是今天我有同樣的問題(真正的設備不仿真器),並找到了解決辦法。

我知道您可以添加代碼來提示用戶升級到最新版本(請參閱@ nathan-walters的評論),但出於複雜的原因,在我的情況下,我需要使用用戶的任何版本已經安裝在他們的設備上(如果有的話),因此更願意使用舊版本的客戶端庫進行編譯/構建(google-play-services_lib)

因此,進一步研究,我解壓縮了Android SDK Manager用來查找並安裝包括最新版Google Play服務在內的'額外'套餐。
如果你有興趣從這裏開始:https://dl-ssl.google.com/android/repository/addon.xml

對於目前的版本(如2014年11月10日的),讓你的谷歌,播放services_lib庫:

https://dl-ssl.google.com/android/repository/google_play_services_6171000_r21.zip 

老版本是谷歌服務器上的相同位置(儘管它們隨時可能會消失),所以如果您準備將當前安裝的庫移到一邊並手動解壓縮較舊的zip,那麼您可以安裝舊版本。我發現:

同樣的技術將允許您測試對非升級舊版本的谷歌地圖(谷歌播放服務)在舊版本的硬連線的模擬器。我還沒有針對模擬器測試過所有這些版本,但是已經在模擬器中成功測試了基於Google API(API 19)的AVD的Google Maps。

谷歌確實偶爾嘗試使模擬器保持最新狀態。這裏有一個問題跟蹤線程討論客戶端庫和仿真器和谷歌的各種嘗試,以解決他們之間的版本不兼容的問題:https://code.google.com/p/android/issues/detail?id=57880

[更新:]

@btrue see answer below現在有一個更好的答案比我的回答

去:

<your path to android sdk>/extras/google/m2repository/com/google/android/gms/play-services/ 

在那裏你會找到包含AAR備考舊版本目錄t - 只需重命名爲.zip即可提取。

+0

太棒了。我認爲可以使用相同的技術來下載舊版本的支持庫? SDK管理器僅顯示最新版本。你是如何找到以前的文件名的? – friederbluemle

+0

@friederbluemle - 爲每個以前的文件名查找正式版本號(即4132530)是命中與遺漏 - 我通過掃描各種網頁/谷歌搜索發現這些以前的文件名稱,談論每個版本。因此,我沒有努力搜索的差距。 – Mike

+0

這就是我的想法。謝謝!任何指針如何獲得支持庫? – friederbluemle

1

你可以在SDK Manager中下載google play services for froyo,它可以和SDK8一起使用,但是要獲得特定的版本是不可能的。AFAIK。目前的谷歌播放服務與10及以上工作

+0

但是,我需要使用支持庫,我想避免。 – Jacob

+2

爲什麼你需要使用支持庫?谷歌播放服務不需要支持庫 – tyczj

+0

一個不需要支持庫就可以使用Google Play服務庫的Froyo版本。但是它不能解決問題:模擬器映像版本爲3136130,但Froyo庫需要版本3265100. –

1

其中一個要求是把項目谷歌播放services_lib版本低於/等於仿真器級別。

google-play-services_lib與模擬器版本無關。

問題是,如何下載比android sdk manager下載的版本更舊的google-play-services_lib?

據我所知,有沒有辦法做到這一點。此外,正如已經指出的那樣,這不是必需的。

然後如果你的設備被打碎或任何你沒有能力來測試你的程序

這使得沒有任何意義。 google-play-services_lib。這不是Google Play服務本身,而是用於利用Google Play服務的客戶端庫。

但後來我需要使用支持庫,我想如何避免

正如已經指出的那樣,Android的支持包不依賴於播放服務SDK。播放服務SDK可以使用 Android的支持包(例如,SupportMapFragment)的部分,但播放服務SDK不要求 Android的支持包。

+0

有兩個原因可能需要老版本的Google Play服務SDK:進行全面的應用測試,並且因爲Android 4.2.2的模擬器圖像具有舊版本(3136130),並且不可升級。 –

+0

@JayLieske:您指的是Google Play服務,而不是Google Play服務SDK(即「google-play-services_lib」)。 – CommonsWare

+0

不,我需要較舊的SDK(庫項目),以便我的應用在啓動時不會因此錯誤而失敗: Google Play服務已過時。需要4030500,但找到了3136130 –

14

接受的答案太麻煩了。 Google實際上在SDK管理器中分發了舊版本。
在「Extras」下面有「Google Repository」。
在存儲庫中,GPS庫返回到版本3.1.36。
它們是AAR格式,它只是構建項目的一個zip。
將名稱更改爲* .zip,將其解壓縮,裏面是一個classes.jar,它是所有gps類的jar。
如果您不需要任何資源,則可以將jar文件添加到類路徑中。完成。

ls -l /Applications/Programming/adt-bundle-mac-x86_64-20140702/sdk/extras/google/m2repository/com/google/android/gms/play-services/ 
total 24 
drwxr-xr-x+ 8 Norrin staff 272 Jan 13 01:08 3.1.36 
drwxr-xr-x+ 8 Norrin staff 272 Jan 13 01:08 3.1.59 
drwxr-xr-x+ 8 Norrin staff 272 Jan 13 01:08 3.2.25 
drwxr-xr-x+ 8 Norrin staff 272 Jan 13 01:08 3.2.65 
drwxr-xr-x+ 11 Norrin staff 374 Feb 10 20:09 4.0.30 
drwxr-xr-x+ 8 Norrin staff 272 Jan 13 01:08 4.1.32 
drwxr-xr-x+ 8 Norrin staff 272 Jan 13 01:08 4.2.42 
drwxr-xr-x+ 8 Norrin staff 272 Jan 13 01:08 4.3.23 
drwxr-xr-x+ 8 Norrin staff 272 Jan 13 01:08 4.4.52 
drwxr-xr-x+ 8 Norrin staff 272 Jan 13 01:08 5.0.89 
drwxr-xr-x+ 8 Norrin staff 272 Jan 13 01:08 6.1.11 
drwxr-xr-x+ 8 Norrin staff 272 Jan 13 01:08 6.1.71 
drwxr-xr-x+ 8 Norrin staff 272 Feb 4 13:43 6.5.87 
-rw-r--r--+ 1 Norrin staff 703 Jan 13 01:08 maven-metadata.xml 
-rw-r--r--+ 1 Norrin staff 32 Jan 13 01:08 maven-metadata.xml.md5 
-rw-r--r--+ 1 Norrin staff 40 Jan 13 01:08 maven-metadata.xml.sha1 
+0

我們可以用unzip命令, '解壓aar_file_name.aar -d unzip_folder_name' –

+5

Hi..Am試圖跟隨你的腳步,但是當我把它解壓我只看到AndroidManifest.xml中和R.txt ..我沒有看到任何classes.jar – Karthik

+0

@Karthik您需要解壓縮每一個人「子模塊」你從谷歌Play使用的服務。例如。 '發揮服務定位/ 10.0.1 /播放服務,位置10.0.1.aar'定位服務。 – Pellet