如何下载旧版Google Play服务?

42

我将使用android google maps v2android emulator/android studio 0.4.0。其中一个要求是将项目中的google-play-services_lib 版本设置为低于或等于emulator级别。我的模拟器使用的是api lv 17。问题是如何下载比android sdk manager下载的版本更旧的google-play-services_lib


1
所有的Android设备都应该始终拥有最新版本的Play服务,因为它们会自动升级。不必使用较低版本进行测试。 - Nathan Walters
如果您的设备损坏或其他原因,您将无法测试程序。实际上,如果您正确设置模拟器和库映射,也可以工作。但这已经超出了主题范围。只需要知道是否可能下载其他版本。或者我对此有一些误解。 - Jacob
1
如果您的设备损坏到无法获取新的 Google Play 服务,那么您将无法更新具有较新版本 Google Play 服务的应用程序,因此这是一个无关紧要的问题。 - tyczj
我猜我的问题是,你为什么想要下载旧版本的 APK 文件呢? - Nathan Walters
问题点赞。就像@Jacob发布的那样,我需要在Android 4.2.2模拟器上运行我的应用程序,该模拟器具有Google Play服务的3136130版本。这意味着我需要相应版本的库项目。 - Jay Lieske
显示剩余5条评论
4个回答

90

我知道这是一个老问题,但我今天遇到了相同的问题(不是模拟器而是真实设备),并找到了解决方案。

我知道你可以添加代码来提示用户升级到最新版本(请参见@nathan-walters的评论),但由于某些复杂的原因,在我的情况下,我需要使用用户已经安装在他们的设备上的任何版本,并且更喜欢使用旧版客户端库(google-play-services_lib)进行编译/构建。

因此,进一步研究后,我解压了Android SDK Manager使用的xml,以查找和安装“额外”包,包括最新版本的Google Play服务。
如果您有兴趣,请从这里开始:https://dl-ssl.google.com/android/repository/addon.xml

对于当前版本(截至2014年11月10日),这将为您提供google-play-services_lib的库:

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

旧版本仍在谷歌服务器的同一位置(虽然它们随时可能消失),因此,如果您准备将当前安装的库移开并手动解压旧的zip文件,则可以安装旧版本。 我找到了以下内容:

同样的技术可以让你对不可升级的旧版Google Maps(Google Play Services)进行测试,这些版本已经硬编到旧版模拟器中。我没有测试所有这些版本是否与模拟器兼容,但已经成功地在基于Google APIs(API 19)的AVD模拟器上测试了Google Maps。

谷歌确实偶尔尝试更新模拟器。下面是一个问题跟踪线程,讨论客户端库和模拟器之间的版本不兼容问题以及谷歌各种尝试修复它们的方法:https://code.google.com/p/android/issues/detail?id=57880

[更新:]

@btrue 请参见下面的答案 现在有一个更好的答案比我的答案

前往:

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

在这里,您将找到包含以AAR格式发布的旧版本的目录 - 只需将其重命名为.zip以进行提取。


太棒了。我想同样的技巧可以用来下载旧版本的支持库吧?SDK管理器只显示最新版本。你是怎么找到以前的文件名的? - friederbluemle
@friederbluemle - 找到每个之前文件名的官方版本号(即4132530)有时是靠运气 - 我通过扫描许多网页/谷歌搜索关于每个发布版的页面来找到这些之前的文件名。因此,在我没有认真搜索的地方会存在间隙。 - Mike
这正是我想的。谢谢!你有获取支持库的任何指针吗? - friederbluemle
@friederbluemle - 从上面描述的addon.xml的内容来看,支持库具有更简单的命名方案:https://dl-ssl.google.com/android/repository/support_r21.0.2.zip 因此,只需尝试查找您想要的版本即可。 - Mike
谢谢,我试过了。不幸的是,看起来谷歌已经删除了旧版本,因为我得到了404错误。 - friederbluemle
@friederbluemle - 我不确定你要找的是哪个版本,但我刚刚尝试了一个旧版r19(https://dl-ssl.google.com/android/repository/support_r19.0.1.zip),它对我有效。我的第一次尝试是 https://dl-ssl.google.com/android/repository/support_r19.0.0.zip,但那并不存在。 - Mike

15

接受的答案太麻烦了。 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

我们可以使用解压命令,unzip aar_file_name.aar -d unzip_folder_name - Nhat Dinh
5
你好。我正在尝试按照你的步骤操作,但是在解压后,我只看到了 AndroidManifest.xml 和 R.txt 文件,没有看到任何 classes.jar 文件。 - Karthik
1
@Karthik 你需要解压每个你从Google Play服务中使用的“子模块”。例如,对于位置服务,play-services-location/10.0.1/play-services-location-10.0.1.aar - Pellet
XML文件怎么办?如果你的版本中缺少正确的.xml文件,你将会出现解压错误。 - Thracian

1
您可以在SDK管理器中下载适用于SDK 8及以上版本的“Froyo版谷歌Play服务”,但据我所知,无法获取特定版本。当前的谷歌Play服务适用于10及以上版本。

但是我需要使用支持库,而我想避免这种情况。 - Jacob
2
为什么需要使用支持库?Google Play服务不需要支持库。 - tyczj
不需要支持库即可使用Google Play服务库的Froyo版本。但是这并不能解决问题:模拟器映像的版本为3136130,但Froyo库需要版本3265100。 - Jay Lieske
你应该在实际设备上进行测试。模拟器测试并不是一个好的解决方案。 - tyczj

1
其中一个要求是在项目中添加版本低于/等于模拟器级别的google-play-services_lib。 google-play-services_lib与模拟器版本无关。
问题是,如何下载比Android SDK管理器下载的旧版本的google-play-services_lib?
据我所知,没有办法做到这一点。此外,正如已经指出的那样,这也不是必需的。
如果您的设备损坏或其他任何原因,您将无法测试程序
这完全没有意义。google-play-services_lib是一个库。它不是Google Play服务本身,而是用于利用Google Play服务的客户端库。
但是我需要使用支持库,我希望避免这样做。
如已经指出的那样,Android支持包与Play Services SDK没有关联。 Play Services SDK的部分可以使用Android支持包(例如SupportMapFragment),但Play Services SDK不需要Android支持包。

有两个原因为什么一个人可能想要旧版本的Google Play服务SDK:为了全面的应用程序测试,以及因为Android 4.2.2的模拟器映像具有较旧的版本(3136130)且无法升级。 - Jay Lieske
不,我需要旧的SDK(库项目),这样我的应用程序在启动时就不会出现以下错误:Google Play服务已过期。需要4030500但发现3136130。 - Jay Lieske
@JayLieske:在更新的模拟器镜像可用之前,你需要在支持Play服务的硬件上进行测试。Google不提供旧版的Play服务SDK,所以除非你能在盗版网站上找到一个(并且相信它没有被篡改等),否则你需要使用能够获取最新Play服务的设备。 - CommonsWare
3
让开发者去催促用户升级库文件符合谷歌公司的利益。而开发者则倾向于使用尽可能旧的版本,以避免打扰用户升级库文件。有人应该维护一个旧版本库。 - miguel
@CommonsWare使用https://github.com/commonsguy/cw-omnibus/tree/ef269a785353b9dc2704aee9f7bc3b16abf186cc/Push/GCMClient2并尝试GCM通知...如果我下载最新的GPS即8.1,它可以正常工作。设备内置GPS apk版本为6599000(6.5.9.9),为什么在6.5.9.9中失败了?所引用的GPS库版本为7571000。如果我将其设置为6599000,则会得到需要7571000的结果,因为GPS已过时。 - NitZRobotKoder
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接