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

时间:2013-05-17 04:16:09

标签: android-studio

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

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

我去了项目结构 - >模块 - >我的App项目并为lib项目添加了一个依赖项。 IntelliJ现在可以在app项目中识别lib项目中的类,但是当我运行app项目时,会出现以下错误:

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

14 个答案:

答案 0 :(得分:113)

创建库:

档案>新模块

选择Android库

Lib

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

档案>项目结构>模块>依赖

dep

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

add module

运行您的项目。 工作。

答案 1 :(得分:107)

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

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

  1. 创建一个项目。

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

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

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

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

  6. 然后你可以获得aar文件: app>构建>输出> aar文件夹

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

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

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

答案 2 :(得分:92)

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

An alternative multiproject setup for android studio

另一种方式:

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

  1. 为StickyListHeaders库创建一个Android Studio项目
  2. 为App2创建Android Studio项目
  3. 为App1创建Android Studio项目
  4. 配置App1和App2以在StickyListHeaders项目中构建模块。
  5. 第四步是困难的部分,所以这是我将详细描述的唯一步骤。您可以通过在settings.gradle文件中添加项目语句并在项目语句返回的ProjectDescriptor对象上设置projectDir属性来引用项目目录外部的模块:

    enter image description here

    代码必须放入settings.gradle

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

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

    enter image description here

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

    这种设置多个项目的方式避免了困扰Google推荐配置的困难。因为我们引用了一个位于项目目录之外的模块,所以我们不必为每个依赖它的应用程序创建库模块的额外副本,我们可以在没有任何git子模块废话的情况下对我们的库进行版本化。

    不幸的是,这种设置多个项目的另一种方式很难找到。显然,这不是你在查看Google指南时会想到的,而且在这一点上,使用Android Studio的UI无法以这种方式配置你的项目。

答案 3 :(得分:45)

查看此link about multi project setups

要注意的一些事项,请确保更新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

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

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

答案 4 :(得分:13)

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

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

答案 5 :(得分:12)

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

  1. 在已打开的项目file > new > new module上(并回答用户界面问题)
  2. enter image description here

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

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

    3. 要在其他项目中重复使用此库模块,请复制项目中的文件夹而不是步骤1,然后执行步骤2和3.

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

      apply plugin: 'com.android.application'
      
      android {...}
      

      apply plugin: 'com.android.library'
      
      android {...}
      

      更多here

答案 6 :(得分:9)

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

如果您想将模块移动到计算机上的任何位置,只需移动模块文件夹(模块完全独立),然后您必须参考该模块。

要参考此模块,您应该:

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

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

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

答案 7 :(得分:5)

请勿忘记在apply plugin: 'com.android.library'中使用build.gradle而不是申请插件:'com.android.application'

答案 8 :(得分:4)

Documentation Way

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

Create a library module

创建一个新项目以使您的图书馆进入。点击文件>新>新模块> Android库>下一个> (选择名称)>完成即可。然后将您想要的任何类和资源添加到库中。

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

Add your library as a dependency

您可以将库作为依赖项添加到另一个项目中:

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

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

    dependencies {
        compile project(":my-library-module")
    }
    
  4. 系统将提示您将项目与gradle同步。做吧。
  5. 就是这样。您现在应该可以使用您的图书馆了。

    注释

    如果您想让图书馆更容易为更多受众群体所用,consider using JitPac or JCenter

答案 9 :(得分: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') }

答案 10 :(得分:3)

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

答案 11 :(得分:2)

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

[stories removeObject:story];

[tableview beginUpdates];
NSIndexPath *indexpath = [tableview indexPathForCell:cell];
[tableview deleteRowsAtIndexPaths:@[indexpath] withRowAnimation:UITableViewRowAnimationTop];
[tableview endUpdates];

然后我还有2个版本的我的应用程序:pro和试用2个不同的packageName,这是上面代码中的2个applicationId所以我可以将它们上传到Google Play。我仍然只是在“main”部分编写代码并使用getpackageName在版本之间切换。请转到我提供的详细链接。

答案 12 :(得分:1)

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

  1. 在库的build.gradle文件中添加库内部依赖关系,并在外部库中粘贴您的库。
  2. OR

    1. 只需转到app文件夹中的libs文件夹并粘贴你所有的.jar例如库文件现在这里的技巧就是现在进入settings.gradle文件现在添加这一行" include':app :库'"在"包括':app'"它肯定会起作用........... :)。

答案 13 :(得分:1)

就我而言,使用MAC OS X 10.11和Android 2.0,并完全按照Aqib Mumtaz所解释的那样。

但是,每次都有这样的信息:" 配置项目':app'时出现问题。 >无法评估模块xxx:配置名称'默认'找不到。"

我发现此消息的原因是Android 2.0不允许直接创建库。所以,我已经决定首先创建一个app projet,然后修改build.gradle,以便将其转换为库。

此解决方案不起作用,因为图书馆项目与应用项目非常不同。

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

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

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

因此,您的图书馆资源将被共享,而不必每次都复制源文件(对我来说这是一个异端!)

希望这对你有所帮助。