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

我对渐进式构建系统和 IntelliJ 还是个新手。

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

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

Gradle: error: package com.myapp.lib1 does not exist
170295 次浏览

创建一个图书馆:

文件 > 新单元

选择 Android 库

Lib

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

文件 > 专案结构 > 模组 > 依赖项

dep

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

add module

运行你的项目。它 威尔的工作。

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

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

看看这个 关于多项目设置的链接

需要指出的是,请确保更新了 setings.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 应该更新。

有同样的问题,并用以下方法解决了它:

开始情况 :

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

Target : 希望添加一个名为 dataformats的模块

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

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

  3. 确保(手动操作)需要使用库的模块的 build.gradle文件具有以下依赖项:

    附属事项{ ... 编译项目(“ : dataformat”) }

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

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

或者

  1. 只要去你的库文件夹里的应用程序文件夹和粘贴所有你的。现在的技巧是,现在进入 setings.gradle 文件,在“ include’: app’”之后添加一行“ include’: app: libs’”,它肯定会起作用... ... ... :)

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

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

在 Eclipse 中,我们只需在项目设置对话框中选中“ Is Library”框。
在 Android 工作室中,我按照以下步骤得到了一个 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. 然后你可以得到一个文件: App > build > output > aar 文件夹

  7. aar文件扩展名改为 zip

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

无论如何,我不知道为什么谷歌使罐子创建这么麻烦在安卓工作室。

对于我来说,最简单的方法 创造重复使用一个图书馆项目:

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

enter image description here

  1. 检查/或添加文件 设置,等级: include ':myLibrary'中的 if
  2. 检查/或在文件 建造,分级中添加 if:

    附属事项{ ... 编译项目(’: myLibrary’) }

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

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

apply plugin: 'com.android.application'


android {...}

apply plugin: 'com.android.library'


android {...}

更多 给你

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

一个可供选择的安卓工作室多项目设置

另一种方式:

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

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

第四步是最难的部分,所以这是我将详细描述的唯一一步。您可以通过在 setings.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 来以这种方式配置你的项目。

你可以 增加一个新的模块到任何应用程序,就像 布伦德尔在他的答案上说的那样,然后从任何其他应用程序引用它。

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

要参考这个模组,你应该:

  • 在 build.gradle 文件中添加:

    dependencies {
    ...
    compile project(':myandroidlib')
    }
    
  • On settings.gradle file add the following:

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

正如上面的捷克轰动评论一样,我试图搜索 Gradle Build Varians,发现了这个链接: http://code.utsplus.com/Tutorials/using-Gradle-Build-variants--cms-25005”rel = “ nofollow”> http://code.tutsplus.com/tutorials/using-Gradle-Build-variants——cms-25005 这是一个非常简单的解决方案,我是这么做的: - 在构建中。-等级:

flavorDimensions "version"


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


}

然后我有我的应用程序的2个版本: 专业和试用2个不同的 packageName,这是2 applicationId 在上面的代码,所以我可以上传到谷歌播放。我仍然只是在“ main”部分编写代码,并使用 getpackageName 在版本之间切换。看看我给你的链接。

用途: Android 库在一个地方-跨多个项目共享 Http://raevilman.blogspot.com/2016/02/android-library-project-using-android.html

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

但是,每一次,我都有这样的信息: “ 配置项目“ : app”时出现问题。 > 无法计算模块 xxx: 未找到名称为“ default”的配置。”

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

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

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

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

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

因此,您的库源将被共享,而无需每次都重复源文件(这对我来说是一种异端邪说!)

希望这能帮到你。

文件方式

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

创建一个库模块

创建一个新项目,使您的库位于。按 文件 > 新建 > 新建模块 > Android 库 > 下一步 > (选择名称) > 完成。然后向库中添加任何您想要的类和资源。

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

将库作为依赖项添加

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

  1. File > New Module > Import. JAR/. AAR Package > Next > (select File location) > Finish导入库 AAR 文件(不要导入代码,否则它会在太多地方被编辑)
  2. 在 setings.gradle 文件中,确保您的库名称在其中。

    include ':app', ':my-library-module'
    
  3. In the app's build.gradle file, add the compile line to the dependencies section:

    dependencies {
    compile project(":my-library-module")
    }
    
  4. You will be prompted to sync your project with gradle. Do it.

That's it. You should be able to use your library now.

Notes

If you want to make your library easily available to a larger audience, consider using JitPac or JCenter.