Google Play 服务库是否与我的应用一起编译?

Is the Google Play Services Lib compiled with my app?

我对 Google Play 服务如何按设备 compiled/used 感到有点困惑。 我了解到 Google Play 服务是通过 Play 商店在设备上更新的。 我还读到,由于 Google Play Services 库被编译到他们的应用程序中,人们的应用程序的大小不断增加。 这两点对我来说似乎是矛盾的,所以也许我误会了什么。 所以: 1:google 播放服务功能 运行 是在应用程序外部吗? 2: Google Play Services 真的编译成应用程序了吗? 3:如果以上都成立,使用哪个版本? 4:如果我有一个使用 GPS 的 lib jar 并且主应用程序也使用 GPS,GPS 会被包含两次吗?

感谢您提供任何可以使情况更加清晰的信息。

Google Play 服务是一个系统应用程序,安装在每个 phone 的 Play 商店上。它处理与 Google 的服务器的通信,并在所有需要访问其所含服务的应用程序之间协调请求、处理缓存等。

您的应用程序中包含的是 Google Play 服务库,它处理您的应用程序连接到 Google Play 服务应用程序,通过 Google 转发来自您的应用程序的请求Play Services 应用程序(并最终在 Google 上满足请求)。

因此流程是:

your app -> Google Play Services library -> Google Play Services app -> Google

与任何库一样,最终的 APK 中只存在一个版本。

1: Is google play services functionality run externally from outside of apps?

呼叫来自您的应用程序,并且在您的应用程序名称中 运行(权限明智)。 然而,呼叫是由 Google 播放服务包和执行的代码也包含在播放服务中。

2: Is the Google Play Services actually compiled into apps?

、Google Play 服务单独安装在您的设备上。 不过,Play 服务接口已编译到您的应用程序中。

3: If both above are true which version is used?

始终使用来自 "Google Play services" 应用程序的代码。 并且它主要向后兼容(因此旧界面可以安全地使用更新的 Play 服务)。

4: If I have a lib jar that uses GPS and the main App also uses GPS will GPS be included twice?

如果这些 .jar 的大小不同(意味着它们是不同的版本),编译器应该警告您并中止。如果两者相同,则项目编译并且GPS 接口仅包含一次。这没关系,因为您不能有多个 类 具有相同的全名。