Google使用 Play Service API 的说明(例如)说:
将 /extras/google/google_play_services/libproject/google-play-services_lib 库项目复制到您维护 Android 应用项目的源代码树中。
注意:您应该引用复制到源代码树的库的副本——您不应该引用 Android SDK 目录中的库。
这对我来说似乎很难看 - 为什么不从 SDK 目录中引用它呢?这有什么技术原因吗?还是您可以明确控制它何时升级?
Google使用 Play Service API 的说明(例如)说:
将 /extras/google/google_play_services/libproject/google-play-services_lib 库项目复制到您维护 Android 应用项目的源代码树中。
注意:您应该引用复制到源代码树的库的副本——您不应该引用 Android SDK 目录中的库。
这对我来说似乎很难看 - 为什么不从 SDK 目录中引用它呢?这有什么技术原因吗?还是您可以明确控制它何时升级?
需要指出的是,这完全是Eclipse的局限,确实丑陋。
问题是这个库除了源代码之外还包含资源。Eclipse 只能处理打包为 jar 文件的库,这些库对于 Android 开发来说是不能包含资源的。
因此,为了将库的资源编译到应用程序中,必须将库的源代码与资源一起添加到您的项目中。
如果您将构建移至 Maven,并使用“理解”Maven 的 IDE,那么您可以将包含资源的库编译为“apklib”,并将其视为外部库,其方式类似于 jar 文件。
新的基于 Gradle 的构建系统基于 Maven 原语构建,但为此使用了不同的格式“aar”。希望它最终也将支持 apklib,以便 Maven 构建和 Gradle 构建可以互操作。
我刚刚完成了将 Android 应用程序转换为 Maven 构建的练习,包括使用一些 apklib。我可以告诉你,带有 m2eclipse 插件的 Eclipse 不能正确处理 apklibs。IntelliJ 和新的 Google Android Studio(基于 IntelliJ)都可以毫无问题地处理 apklib。
这与“播放服务库”无关。就像项目使用的任何其他库一样,该库应该从项目的源代码树中引用。
在这种情况下,外部库位于 Android SDK 目录中,从那里引用也不是一个好的做法。所以是的,它可以称为“技术原因”。
不应从项目的源代码树以外的任何地方引用已使用的库(在本例中为 Play Services 库)。