如何在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库
要使用该库添加它作为依赖:
文件>项目结构>模块>依赖项
然后添加模块(android库)作为模块依赖。
运行你的项目。 它会工作。
我想知道为什么没有独立的jar项目的例子。
在eclipse中,我们只需在项目设置对话框中选中“Is Library”框。
在Android工作室中,我按照这个步骤获得了一个jar文件。
-
创build一个项目。
-
打开左侧项目菜单中的文件(app / build.gradle): Gradle脚本> build.gradle(模块:XXX)
-
修改一行:
apply plugin: 'com.android.application'
– >'apply plugin: com.android.library'
-
删除文件中的
applicationId "com.mycompany.testproject"
:applicationId "com.mycompany.testproject"
-
构build项目: 构build>重build项目
-
那么你可以得到aar文件: app> build> outputs> aar文件夹
-
将
aar
文件扩展名改为zip
-
解压缩,你可以在文件夹中看到
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您的应用程序所依赖的库的模块位于库的项目目录中。 如果你想用上面描述的项目结构来使用这个方法,你可以这样做:
- 为StickyListHeaders库创build一个Android Studio项目
- 为App2创build一个Android Studio项目
- 为App1创build一个Android Studio项目
- 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和重用一个库项目:
- 在打开的项目
file > new > new module
(并回答UI问题)
- 检查/或添加如果在文件settings.gradle :
include ':myLibrary'
-
检查/或添加,如果在文件build.gradle :
dependencies { ... compile project(':myLibrary') }
-
要在另一个项目中重复使用此库模块,请将其文件夹复制到项目中而不是步骤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
的模块
- 添加一个新的模块(例如:
Java Library
) -
确保你的
settings.gradle
看起来像这样(通常自动):include ':frigoshare', ':frigoShare-backend', ':dataformats'
-
确保( 手动 )需要使用库的模块的
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它。
添加你的库作为依赖
你可以把你的库作为一个依赖添加到另一个项目中,像这样:
- 使用文件>新build模块>导入.JAR / .AAR包>下一步>(select文件位置)>完成导入您的库AAR文件。 (不要导入代码,否则会在太多的地方编辑。)
-
在settings.gradle文件中,确保你的库名在那里。
include ':app', ':my-library-module'
-
在应用程序的build.gradle文件中,将编译行添加到依赖项部分:
dependencies { compile project(":my-library-module") }
- 系统会提示您使用gradle同步您的项目。 这样做。
而已。 你现在应该可以使用你的库了。
笔记
如果您想让您的图书馆可以轻松地提供给更多的读者,请考虑使用JitPac或JCenter 。
有两个最简单的方法,如果一个不工作,请尝试另一个。
- 在你的库的build.gradle文件里面添加依赖库里面的依赖关系,并把你的库粘贴到External Libraries中。
要么
- 只要去你的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。
因此,您的图书馆资源将被共享,而无需每次都复制源文件(这对我来说是一个异端!)
希望这可以帮助你。