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

我是新来的gradle构build系统和IntelliJ。

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

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

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

创build一个库:

文件>新build模块

selectAndroid库

库

要使用该库添加它作为依赖:

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

DEP

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

添加模块

运行你的项目。 它工作。

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

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

  1. 创build一个项目。

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

  3. 修改一行: apply plugin: 'com.android.application' – > 'apply plugin: com.android.library'

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

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

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

  7. aar文件扩展名改为zip

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

无论如何,我不知道为什么谷歌在Android工作室使jar创build这么麻烦。

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

android studio的替代多项目设置

不同的方式:

事实certificate,有一个更好的方法来pipe理Android Studio中的多个项目。 诀窍是为您的库创build单独的Android Studio项目,并告诉gradle您的应用程序所依赖的库的模块位于库的项目目录中。 如果你想用上面描述的项目结构来使用这个方法,你可以这样做:

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

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

在这里输入图像描述

代码必须放在settings.gradle

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

如果你已经做到了这一点,你会发现项目引用的模块会显示在项目导航器中,即使这些模块在项目目录的外部:

在这里输入图像描述

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

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

不幸的是,这种build立多个项目的其他方式很难find。 很显然,从Google的指南中看不出什么东西,在这一点上,没有办法通过使用Android Studio的UI以这种方式来configuration您的项目。

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

有些事情要指出,确保你有你的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插件。

如果您可以使用此设置从命令行构build,则Android Studio IDE应该更新。

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

所以,为了添加一个新的android库项目,你需要创build一个types为“Android库”的模块。 然后将此库模块添加到主模块(应用程序模块)的依赖项列表中。

最简单的方法来创build重用一个库项目:

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

在这里输入图像描述

  1. 检查/或添加如果在文件settings.gradleinclude ':myLibrary'
  2. 检查/或添加,如果在文件build.gradle

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

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

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

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

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

这里更多

您可以添加一个新的模块到任何应用程序作为Blundell在他的答案说,然后从任何其他应用程序引用。

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

要引用这个模块,你应该:

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

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

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

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

有同样的问题,并以下列方式解决:

开局情况

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

正如上面的捷克评论我试图search关于Gradle的构buildVarians,我发现这个链接: http ://code.tutsplus.com/tutorials/using-gradle-build-variants–cms-25005这是一个非常简单的解决scheme。 这是我做的: – 在build.gradle:

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

然后我有两个版本的我的应用程序:亲和试用2 diffrent packageName这是在上面的代码中的2 applicationId,所以我可以上传到Google Play。 我仍然只是在“主”部分的代码,并使用getpackageName来切换到版本。 只要去我给的详细的链接。

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

文件的方式

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

创build一个库模块

创build一个新的项目,使你的图书馆英寸单击文件>新build>新build模块> Android库>下一步>(select名称)>完成 。 然后添加任何类和资源你想要你的图书馆。

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

添加你的库作为依赖

你可以把你的库作为一个依赖添加到另一个项目中,像这样:

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

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

     dependencies { compile project(":my-library-module") } 
  4. 系统会提示您使用gradle同步您的项目。 这样做。

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

笔记

如果您想让您的图书馆可以轻松地提供给更多的读者,请考虑使用JitPac或JCenter 。

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

  1. 在你的库的build.gradle文件里面添加依赖库里面的依赖关系,并把你的库粘贴到External Libraries中。

要么

  1. 只要去你的libs文件夹里面的应用程序文件夹,并粘贴所有.jar例如库文件那里现在的技巧是,现在进入settings.gradle文件现在添加此行“include”:app:libs“”之后“包括”:应用程序'“它肯定会工作……….. 🙂

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

但是,每一次,我都有这样的信息:“ configuration项目出现问题”:app'。>无法评估模块xxx:未find名称为“default”的configuration

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

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

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

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

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

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

希望这可以帮助你。