167

我是 gradle 构建系统和 IntelliJ 的新手。

那么如何创建一个Android库项目(例如com.myapp.lib1)和应用程序项目(例如com.myapp.app)并使构建系统在应用程序项目中包含com.myapp.lib1?

我去了项目结构-> 模块-> 我的应用程序项目并添加了对 lib 项目的依赖项。IntelliJ 现在可以在 app 项目中使用时识别 lib 项目中的类,但是当我运行 app 项目时,会出现如下错误:

Gradle: error: package com.myapp.lib1 does not exist
4

14 回答 14

116

我想知道为什么没有独立 jar 项目的例子。

在 Eclipse 中,我们只需在项目设置对话框中选中“Is Library”框。
在 Android Studio 中,我按照这个步骤得到了一个 jar 文件。

  1. 创建一个项目。

  2. 在左侧项目菜单中打开文件。(app/build.gradle): Gradle Scripts > build.gradle(Module: XXX)

  3. 换一行:apply plugin: 'com.android.application'->'apply plugin: com.android.library'

  4. 删除文件中的 applicationId:applicationId "com.mycompany.testproject"

  5. 构建项目:构建 > 重建项目

  6. 然后你可以得到 aar 文件:app > build > outputs > aar 文件夹

  7. aar文件扩展名更改为zip

  8. 解压,在文件夹中可以看到classes.jar。重命名并使用它!

无论如何,我不知道为什么 google 让 jar 创建在 android studio 中如此麻烦。

于 2015-05-18T05:40:41.970 回答
111

要创建库:

文件 > 新模块

选择 Android 库

库

要使用该库,请将其添加为依赖项:

文件 > 项目结构 > 模块 > 依赖项

部门

然后将模块(android 库)添加为模块依赖项。

添加模块

运行你的项目。它起作用的。

于 2013-05-17T20:26:07.443 回答
98

Google 的 Gradle Plugin 推荐的配置你的 gradle 文件以构建多个项目的方法有一些缺点如果你有多个项目依赖于一个库项目,这篇文章简要解释了 Google 的推荐配置,它的缺点,并推荐了一种不同的方式来配置你的 gradle 文件支持 Android Studio 中的多项目设置:

android studio 的另一种多项目设置

一种不同的方式:

事实证明,在 Android Studio 中管理多个项目有更好的方法。诀窍是为您的库创建单独的 Android Studio 项目,并告诉 gradle 您的应用所依赖的库的模块位于库的项目目录中。如果您想将此方法与我上面描述的项目结构一起使用,您可以执行以下操作:

  1. 为 StickyListHeaders 库创建一个 Android Studio 项目
  2. 为 App2 创建一个 Android Studio 项目
  3. 为 App1 创建一个 Android Studio 项目
  4. 配置 App1 和 App2 以在 StickyListHeaders 项目中构建模块。

第 4 步是困难的部分,所以这是我将详细描述的唯一一步。您可以通过在 settings.gradle 文件中添加项目语句并在该项目语句返回的 ProjectDescriptor 对象上设置 projectDir 属性来引用项目目录外部的模块:

在此处输入图像描述

必须输入的代码settings.gradle

include ':library1'
project(':library1').projectDir = new File('../StickyListHeader/library1')

如果您正确地完成了此操作,您会注意到项目引用的模块将显示在项目导航器中,即使这些模块位于项目目录之外:

在此处输入图像描述

这使您可以同时处理库代码和应用程​​序代码。当您以这种方式在外部引用模块时,版本控制集成也可以正常工作。您可以提交和推送您的修改到库代码,就像您可以提交和推送修改到您的应用程序代码一样。

这种设置多个项目的方式避免了困扰谷歌推荐配置的困难。因为我们引用了项目目录之外的模块,所以我们不必为依赖它的每个应用程序制作库模块的额外副本,并且我们可以对库进行版本控制,而无需任何类型的 git submodule 废话。

不幸的是,这种设置多个项目的其他方式很难找到。显然,您不会通过查看 Google 的指南来了解它,并且此时,无法使用 Android Studio 的 UI 以这种方式配置您的项目。

于 2015-07-12T10:05:57.730 回答
45

查看有关多项目设置的链接

需要指出的一些事情,请确保您已更新 settings.gradle 以引用应用程序和库模块。

设置.gradle:include ':app', ':libraries:lib1', ':libraries:lib2'

还要确保应用程序的 build.gradle 具有以下内容:

dependencies {
     compile project(':libraries:lib1')
}

您应该具有以下结构:

 MyProject/
  | settings.gradle
  + app/
    | build.gradle
  + libraries/
    + lib1/
       | build.gradle
    + lib2/
       | build.gradle

应用程序的 build.gradle 应该使用com.android.application插件,而任何库的 build.gradle 都应该使用com.android.library插件。

如果您能够使用此设置从命令行构建,Android Studio IDE 应该会更新。

于 2013-05-21T08:07:35.277 回答
13

对于 Intellij IDEA(和 Android Studio),每个库都是一个模块。将 Android Studio 中的模块视为等同于 Eclipse 中的项目。Android Studio 中的项目是模块的集合。模块可以是可运行的应用程序或库模块。

因此,为了向您添加一个新的 android 库项目,您需要创建一个“Android 库”类型的模块。然后将此库模块添加到您的主模块(应用程序模块)的依赖项列表中。

于 2013-05-21T06:51:35.453 回答
12

我创建重用库项目的最简单方法:

  1. 在一个打开的项目上file > new > new module(并回答 UI 问题)

在此处输入图像描述

  1. 检查/或添加 if 在文件settings.gradleinclude ':myLibrary'
  2. 检查/或添加 if 在文件build.gradle 中

    dependencies { ... compile project(':myLibrary') }

  3. 要在另一个项目中重用此库模块,请将其文件夹复制到项目中而不是第 1 步,然后执行第 2 步和第 3 步。

您还可以创建一个新的工作室应用程序项目 您可以通过将 build.gradle 文件中的插件分配更改为 com.android.library 轻松地将现有应用程序模块更改为库模块。

apply plugin: 'com.android.application'

android {...}

apply plugin: 'com.android.library'

android {...}

更多在这里

于 2015-06-27T04:05:24.187 回答
9

正如Blundell在他的回答中所说,您可以将新模块添加到任何应用程序中,然后从任何其他应用程序中引用它。

如果要将模块移动到计算机上的任何位置,只需移动模块文件夹(模块是完全独立的),那么您将不得不引用该模块。

要引用此模块,您应该:

  • 在应用程序的 build.gradle 文件中添加:

    dependencies {
    ...
    compile project(':myandroidlib')
    }
    
  • 在 settings.gradle 文件中添加以下内容:

     include ':app', ':myandroidlib'
     project(':myandroidlib').projectDir = new File(PATH_TO_YOUR_MODULE)
    
于 2015-07-14T23:16:12.440 回答
5

不要忘记apply plugin: 'com.android.library'在您的build.gradle而不是应用插件中使用:'com.android.application'

于 2015-05-14T21:50:45.530 回答
4

文档方式

根据 Android Studio 文档中给出的建议,这是推荐的方式。

创建库模块

创建一个新项目来制作您的库。单击File > New > New Module > Android Library > Next > (选择名称) > Finish。然后将您想要的任何类和资源添加到您的库中。

当您构建模块时,将创建一个 AAR 文件。你可以在project-name/module-name/build/outputs/aar/.

将您的库添加为依赖项

您可以将您的库作为依赖项添加到另一个项目,如下所示:

  1. 使用File > New Module > Import .JAR/.AAR Package > Next > (选择文件位置) > Finish导入您的库 AAR 文件。(不要导入代码,否则会在太多地方可编辑。)
  2. 在 settings.gradle 文件中,确保您的库名称在那里。

    include ':app', ':my-library-module'
    
  3. 在应用程序的 build.gradle 文件中,将编译行添加到依赖项部分:

    dependencies {
        compile project(":my-library-module")
    }
    
  4. 系统将提示您将项目与 gradle 同步。去做吧。

而已。您现在应该可以使用您的库了。

笔记

如果您想让您的库轻松地提供给更多的受众,请考虑使用 JitPac 或 JCenter

于 2017-01-25T11:00:12.190 回答
3

有同样的问题并通过以下方式解决:

开始情况

FrigoShare (root)
|-Modules:    frigoshare,   frigoShare-backend

目标:想要添加一个名为dataformats

  1. 添加一个新模块(例如Java Library:)
  2. 确保你settings.gradle看起来像这样(通常是自动的):

    include ':frigoshare', ':frigoShare-backend', ':dataformats'

  3. 确保(手动build.gradle需要使用您的库的模块的文件具有以下依赖关系:

    dependencies { ... compile project(':dataformats') }

于 2014-04-06T12:37:25.473 回答
3

目的:单一位置的 Android 库 - 跨多个项目共享 http://raevilman.blogspot.com/2016/02/android-library-project-using-android.html

于 2016-02-16T10:54:45.087 回答
2

正如上面的 czechsensation 评论,我尝试搜索 Gradle Build Varians 并找到了这个链接:http ://code.tutsplus.com/tutorials/using-gradle-build-variants--cms-25005 这是一个非常简单的解决方案。这就是我所做的: - 在 build.gradle 中:

flavorDimensions "version"

productFlavors {
    trial{
        applicationId "org.de_studio.recentappswitcher.trial"
        flavorDimension "version"
    }
    pro{
        applicationId "org.de_studio.recentappswitcher.pro"
        flavorDimension "version"
    }

}

然后我还有 2 个我的应用程序版本:pro 和 trial,有 2 个不同的 packageName,即上面代码中的 2 applicationId,所以我可以将两者都上传到 Google Play。我仍然只是在“main”部分编码并使用 getpackageName 在版本之间切换。只需转到我提供的链接以获取详细信息。

于 2016-01-12T13:23:48.760 回答
1

有两种最简单的方法,如果一种不起作用,请尝试另一种。

  1. 在您使用的库的 build.gradle 文件中的依赖项中添加库的依赖项,并将您的库粘贴到外部库中。

或者

  1. 只需转到 app 文件夹中的 libs 文件夹,然后将所有 .jar 例如库文件粘贴到那里现在这里的技巧是现在进入 settings.gradle 文件现在在“include”之后添加这一行“include ':app:libs'”:应用程序'“它肯定会工作............ :)
于 2015-04-22T07:55:43.330 回答
1

在我的例子中,使用 MAC OS X 10.11 和 Android 2.0,并且完全按照 Aqib Mumtaz 的解释。

但是,每次,我都会收到以下消息:“配置项目':app'时出现问题。>无法评估模块xxx:找不到名称为'default'的配置。”

我发现这个消息的原因是 Android 2.0 不允许直接创建库。因此,我决定首先创建一个应用程序项目,然后修改 build.gradle 以便将其转换为库。

此解决方案不起作用,因为库项目与应用程序项目非常不同。

所以,我已经这样解决了我的问题:

  • 首先创建一个标准应用程序(如果需要);
  • 然后选择“文件/创建模块”
  • 转到查找器并移动在您的框架目录中新创建的模块的文件夹

然后继续 Aqib Mumtaz 提出的解决方案。

结果,您的库源将被共享,而无需每次都复制源文件(这对我来说是异端邪说!)

希望这对您有所帮助。

于 2016-04-26T12:20:46.003 回答