在Android中,play-services-base与-basement依赖项(AAR)有什么区别?

10

我找到了一个名为GoogleDependencyFlurryPlugin.xml的xml文件。

<dependencies>
<dependency><groupId>com.google.android.gms</groupId><artifactId>play-services-base</artifactId><version>8.4+</version></dependency>
<dependency><groupId>com.google.android.gms</groupId><artifactId>play-services-basement</artifactId><version>8.4+</version></dependency>
</dependencies>

而且还有一个名为GoogleDependencyPlayGameServicesPlugin.xml的xml文件

<dependencies>
<dependency><groupId>com.google.android.gms</groupId><artifactId>play-services-games</artifactId><version>8.4+</version></dependency>
<dependency><groupId>com.google.android.gms</groupId><artifactId>play-services-plus</artifactId><version>8.4+</version></dependency>
</dependencies>

现在,有一段时间前的原始文件中只有 唯一 的内容:

play-services-base > OR < play-services-basement

这似乎引起了一个巨大的问题。AndroidJavaException:java.lang.NoSuchMethodError: 在设备上运行时出现。

Android 专家们,如果您拥有“ base”,您必须拥有“ basement” ...或者反之亦然吗?

确实,关于 play-services-games 或 play-services-plus,也许这两个服务中的一个或两个在某种程度上依赖(或矛盾于)base/basement?


如果您在编译后的Android Studio中查看app/build目录,您会注意到basement有额外的类,而base没有。也就是说,它有一个名为zze.class的类,其中包含GooglePlayServicesUtil的扩展。 - IgorGanapolsky
1个回答

17
play-services-basementplay-services-base的一个依赖项。它在Google Play服务8.1.0版本中引入,旨在帮助减小其他库的大小,如play-services-adsplay-services-analytics
当您添加play-services-base时,也会自动添加play-services-basement,因此不需要添加显式依赖项。
您可以检查本地Google存储库中每个库的依赖关系。
例如,对于库play-services-games,请打开位于此处的pom文件:
extras/google/m2repository/com/google/android/gms/play-services-games/8.4.0/play-services-games-8.4.0.pom

这是文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.google.android.gms</groupId>
  <artifactId>play-services-games</artifactId>
  <version>8.4.0</version>
  <packaging>aar</packaging>
  <dependencies>
    <dependency>
      <groupId>com.google.android.gms</groupId>
      <artifactId>play-services-base</artifactId>
      <version>8.4.0</version>
      <scope>compile</scope>
      <type>aar</type>
    </dependency>
    <dependency>
      <groupId>com.google.android.gms</groupId>
      <artifactId>play-services-drive</artifactId>
      <version>8.4.0</version>
      <scope>compile</scope>
      <type>aar</type>
    </dependency>
  </dependencies>
</project>

正如您所看到的,play-services-games 依赖于 play-services-baseplay-services-drive


非常感谢您提供这个出色的答案!实际上,关于第一个文件,由于它已经包含了play-services-base,因此添加play-services-basement是没有意义的 - 我理解得没错吧?谢谢! - Fattie
明白了,谢谢。关于另一个问题,因为它使用play-services-games,您是指我必须包括play-services-base和play-services-drive吗?还是我误解了您的意思?谢谢... - Fattie
您不需要显式添加 play-services-baseplay-services-drive,因为它们是 play-services-games 的依赖项,所以会自动添加。 - Mattia Maestrini
1
该列表仅标识映射公共API的依赖项。有许多不同的依赖关系。您可以在此处找到位于本地Google存储库中的所有可用依赖项:<android-sdk>/extras/google/m2repository/com/google/android/gms/ - Mattia Maestrini
2
如果你是谷歌,而且你已经到达了“基础”,那么你显然只能通过去到“地下室”来进一步深入 :) - Thomas Keller
显示剩余2条评论

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