如何在Android Studio中创建库项目以及使用该库项目的应用程序项目


164

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

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

我去了Project Structure-> Modules-> My App项目,并向lib项目添加了一个依赖项。现在,在应用程序项目中使用IntelliJ时,可以识别lib项目中的类,但是当我运行应用程序项目时,会出现类似以下错误:

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

1
我正在使用Android库来构建应用的免费/付费版本。新的Gradle构建系统使这种方法在Build Variants概念中过时了。现在,您可以使用同一代码自动构建不同的签名APK。我希望我早点知道。
theczechsensation 2013年

1
@theczechsensation-您能详细说明吗?上传完整版APK之后,我尝试上传免费版APK,但使用了相同的软件包名称。Google Play商店(GPS)向我发送了一条消息,说我已经使用了该套件名称。您所说的gradle表示我不需要两个单独的程序包中的两个单独的应用程序吗?
DSlomer64

这是一个完美的答案stackoverflow.com/a/31366602/1118772。Aqib Mumtaz在回答中提到了,但是终于到了。您可以选择这样做,而不是在其他方式上浪费时间。 philosophicalhacker.com/2014/10/02/...
Noundla桑迪普

有趣的线程添加库,带有图片说明。
2015年

Answers:


111

要创建一个库:

文件>新模块

选择Android库

解放

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

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

深度

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

添加模块

运行您的项目。它工作。


194
这将在项目中创建模块的文件。如果您希望模块在项目外部,以便可以与其他应用程序一起使用,该怎么办?
rrbrambley

2
@rrbrambley:我找到了一种在多个项目中重用模块的方法。我使用Windows的名为winbolic link的应用程序创建了(NTFS Junction)文件夹链接。当我有一个要在多个项目中重用的模块时,我会在每个要使用它的项目目录中创建一个指向要重用项目的文件夹链接。之后,我添加了模块依赖关系(在Andr。Studio中)。现在,我可以在保持同步的同时使用/编辑每个项目中的模块。不知道这是否是正确的方法,但目前看来效果很好!这比本地Maven仓库更好。
彼得

1
不幸的是,自2014年7月起,不再有像屏幕快照中所示的项目设置。我必须按照下面的GrkEngineer的答案去编辑.grade文件。
2014年

24
这应了下来投票,因为这从现有项目中创建一个模块
乔纳森

2
如果要在其他项目中使用相同的库,则必须将库模块复制到该项目,并手动配置settings.gradle和主模块的build.gradle。
hanoo

114

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

在Eclipse中,我们只需在项目设置对话框中选中“是库”框。
在Android Studio中,我按照以下步骤操作,并得到了一个jar文件。

  1. 创建一个项目。

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

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

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

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

  6. 那么您可以获取aar文件:app> build> output> aar文件夹

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

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

无论如何,我不知道为什么Google在Android Studio中使jar创建如此麻烦。


1
我可以在Android Studio 2.2.2 dec上使用。2016.
Herman

95

Google的Gradle插件推荐的配置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项目中构建模块。

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

在此处输入图片说明

必须输入以下代码settings.gradle

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

如果正确完成此操作,则会注意到项目引用的模块将显示在项目导航器中,即使这些模块在项目目录外部也是如此:

在此处输入图片说明

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

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

不幸的是,很难找到建立多个项目的另一种方式。显然,您不会从Google指南中了解到这一点,并且目前无法使用Android Studio的用户界面以这种方式配置您的项目。


4
这是完美的答案。谢谢。
Noundla Sandeep

1
好的答案,但是如果链接断开,您应该将帖子中的相关内容复制到您的答案中。
Greyson Parrelli,2015年

2
注意:对于gradle中的字符串求值,您必须使用双引号(“)。对我来说,这是“保存一天”。与
Solata 2015年

1
我们如何从应用程序代码中引用库代码?按照设置说明进行操作后,应用程序代码仍然无法引用库代码中的程序包。是否需要执行额外的步骤?
CEGRD

2
@CEGRD您需要转到文件>项目结构,然后单击正在处理的模块的名称。然后转到依赖项标签>在下拉菜单中单击“ +”,然后单击“模块依赖项”。然后,您应该能够将library1模块添加到当前项目中。
OliasailO 2016年

45

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

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

settings.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应该会更新。


是build.gradle中定义的插件唯一的区别吗?即您可以通过更改这一行来将现有模块更改为Android库吗?
恩里科

22
一天,我们将单击导入按钮,库将开始工作,然后开始在编辑器中键入代码。
史蒂夫M

6
这种方法似乎将库包含在实际项目中。OP想要知道的是如何创建一个单独的Android库项目,该项目位于其自己的项目/空间中,并且仅以lib形式包含在主应用程序项目中
Jonathan

@SteveM这是我整个职业生涯中的问题。我只是没有任何设计就开始编码。然后花费数小时进行调试和重构。
Rajkiran,2015年

13

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

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


12

对我来说,创建重用库项目的最简单方法是:

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

在此处输入图片说明

  1. 检查/或添加是否在文件settings.gradle中include ':myLibrary'
  2. 检查/或添加是否在文件build.gradle中

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

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

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

apply plugin: 'com.android.application'

android {...}

apply plugin: 'com.android.library'

android {...}

这里更多


如果通过更改插件分配将现有的应用程序模块更改为库模块,则还必须从gradle文件中删除“ applicationId“ com ....”行。
TDG

“警告:配置'compile'已过时,已被'implementation'和'api'取代。”
slhck

9

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

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

要引用此模块,您应该:

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

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

     include ':app', ':myandroidlib'
     project(':myandroidlib').projectDir = new File(PATH_TO_YOUR_MODULE)
    

例如project(':library').projectDir = new File('../library'),where library文件夹名称与android项目的文件夹平行。
某处某人

5

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


4

记录方式

根据Android Studio文档中提供的建议,这是推荐的方法。

创建一个库模块

创建一个新项目以放入您的库。单击文件>新建>新建模块> Android库>下一步>(选择名称)>完成。然后将所需的任何类和资源添加到库中。

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

将您的库添加为依赖项

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

  1. 使用文件>新建模块>导入.JAR / .AAR包>下一步>(选择文件位置)>完成导入库AAR文件。(不要导入代码,否则它将在太多地方都可以编辑。)
  2. 在settings.gradle文件中,确保您的库名称在那里。

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

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

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

笔记

如果要使广大读者可以轻松使用自己的库,请考虑使用JitPac或JCenter


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') }



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个版本:专业版和试用版,带有2个diffrent packageName,即上面的代码中的2个applicationId,因此我可以将两者都上传到Google Play。我仍然只是在“主要”部分进行编码,并使用getpackageName在版本之间切换。只需转到我给出的详细链接。


1

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

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

要么

  1. 只需转到app文件夹内的libs文件夹,然后将所有.jar(例如库文件)粘贴到那里,现在的窍门是现在进入settings.gradle文件,在“ include”之后添加以下行“ include':app:libs'”: app'“肯定会工作........... :)

1

就我而言,使用MAC OS X 10.11和Android 2.0,并完全按照Aqib Mumtaz的解释进行操作。

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

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

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

因此,我已经解决了这样的问题:

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

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

结果,您的库源代码将被共享,而无需每次都重复源文件(对我而言这是一个异端!)

希望对您有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.