6 回答
我将向您展示如何使用地图示例执行此操作。
假设您在 Android Studio 中导入了地图示例,并创建了相应的地图模块。
1.创建一个android库模块
您需要为 GMS 创建一个额外的库模块,其中包括地图示例需要从 Google API 编译您的地图模块的所有类。
图书馆项目位于:
$ANDROID_SDK/extras/google/google_play_services/libproject/google-play-services_lib
为此,请转到File
->Import module
并选择上述位置或库项目的位置。
然后在Create module from existing sources或Import module from external model之间使用正确的选项。就我而言,它来自现有来源。
Android Studio 检测到 src/res 目录,到目前为止一切顺利。
它还检测库目录,这将为您节省手动导入 lib/ 中可能拥有的任何 jar(在我的情况下就像 google-play-services.jar)。
[编辑:它实际上只为您节省了一半的时间,因为它创建了库但不将它们链接到您的模块依赖项中]
2. 更新你的主模块依赖——库模块
现在,棘手的部分是您只创建了模块,而不是作为依赖项链接到您的项目。
这样做,去File
-> Project structure
->Modules
选择你的主模块,在我的例子中是地图,然后转到dependencies
右侧的选项卡。单击+
和3. Module dependency
。
选择您的主模块所依赖的模块,然后单击确定。
3. 更新你的主模块依赖 - 罐子
现在由于无法解释的原因,我的地图模块中的活动仍然找不到 API 类。我还必须手动添加对模块配置的 google-play-services.jar 依赖项(如 2.,但选择Library而不是Module dependency);
这一点肯定可以用 gradle 自动化,但我还没有研究过。当您使用新的 IDE 时,使用的工具越少,就越容易跟踪配置错误。我建议一次只添加一个工具:)
以下步骤在 Android Studio 1.3.1 中对我有用
mylib1 在独立项目中。
在我需要 mylib1 的项目中
1) 编辑 settings.gradle 文件
include ':app'
include ':mylib1' ##New line
project(':mylib1').projectDir = new File('../../android_lib_repo/mylib1/app/') ##New line
其中../../android_lib_repo/mylib1是项目目录
其中../../android_lib_repo/mylib1/app/是模块目录
2) 编辑 build.gradle 文件
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'org.bouncycastle:bcprov-jdk16:1.46'
compile 'com.google.android.gms:play-services:6.5.87'
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:support-v4:21.0.3'
compile project(':mylib1') ##New line
}
在项目中导入“库”模块后(据我所知,您的工作区是项目,项目是 intellij / Android studio 中的模块),
- 前往
File -> Project structure -> Modules
或select the project and hit F4.-> Modules
- 选择您的“库”模块(在中间列中)并单击依赖项选项卡(在最右边的列中)
- 单击模块名称前的复选框(导出)。(核实)
- 现在,选择“您的”模块并单击左侧窗格中的 + 号并选择“3. Module Dependencies...”,选择您的“库”项目并单击“确定”。
- 现在编译你的模块。
如果您仍然在项目中看到错误说无法从“库”项目中找到类,请确保选中“库”模块依赖项中模块前面的“导出”复选框。希望有帮助:)
不建议通过 GUI 编辑库依赖项,因为这不会将这些更改写入您的 build.gradle 文件。所以你的项目不会从命令行构建。我们应该如下直接编辑 build.gradle 文件。
例如,给定以下结构:
我的项目/
- 应用程序/
- 图书馆/
- lib1/
- lib2/
我们可以确定 3 个项目。Gradle 将使用以下名称引用它们:
- :应用程序
- :图书馆:lib1
- :图书馆:lib2
:app 项目可能依赖于库,这是通过声明以下依赖项来完成的:
dependencies {
compile project(':libraries:lib1')
}
如果您使用的是在 Studio 中创建的项目或从 ADT 导出到 Gradle 的项目,则需要编辑 build.gradle 以更改依赖项。Project Structure 对话框中的 UI 仅影响 IDE 中的依赖项,但将使用 Gradle,它不会设置依赖项。
编辑 build.gradle 将使 Studio 重新加载它并更新两个地方的依赖关系。
有关依赖项和多模块设置的更多信息(如果您还添加一个模块作为依赖项),请阅读http://tools.android.com/tech-docs/new-build-system/user-guide #TOC-Dependencies-Android-Libraries-and-Multi-project-setup
对于任何可能只是发现这个的人。如果您需要访问库项目的资源(就像使用 ABS 一样),请确保将库项目/模块添加为“模块依赖项”而不是“库”。