我是gradle构建系统和IntelliJ的新手 .
那么如何创建Android库项目(例如com.myapp.lib1)和应用程序项目(例如com.myapp.app)并使构建系统在应用程序项目中包含com.myapp.lib1?
我进入了项目结构 - >模块 - >我的应用程序项目,并为lib项目添加了一个依赖项 . IntelliJ现在可以在应用程序项目中使用lib项目识别类,但是当我运行应用程序项目时,会出现以下错误:
Gradle: error: package com.myapp.lib1 does not exist
14 回答
对于Intellij IDEA(和Android Studio),每个库都是一个模块 . 将Android Studio中的模块视为与Eclipse中的项目等效 . Android Studio中的项目是模块的集合 . 模块可以是可运行的应用程序或库模块 .
所以,为了添加一个新的android库项目,你需要创建一个类型为“Android库”的模块 . 然后将此库模块添加到主模块(应用程序模块)的依赖关系列表中 .
有同样的问题并通过以下方式解决:
Start situation :
Target :想要添加名为
dataformats
的模块添加新模块(例如:
Java Library
)确保
settings.gradle
看起来像这样(通常是自动的):include ':frigoshare', ':frigoShare-backend', ':dataformats'
build.gradle
文件具有以下依赖关系:dependencies { ... compile project(':dataformats') }
谷歌的Gradle插件推荐用于配置gradle文件以构建多个项目的方法有一些缺点如果你有多个项目取决于一个库项目,这篇文章简要介绍了谷歌推荐的配置,它的缺点,并推荐一种不同的方式来配置gradle文件到支持Android Studio中的多项目设置:
An alternative multiproject setup for android studio
A Different Way :
事实证明,在Android Studio中管理多个项目是一种更好的方法 . 诀窍是为您的库创建单独的Android Studio项目,并告诉gradle您的应用所依赖的库的模块位于库的项目目录中 . 如果您想将此方法与我上面描述的项目结构一起使用,您将执行以下操作:
为StickyListHeaders库创建一个Android Studio项目
为App2创建一个Android Studio项目
为App1创建一个Android Studio项目
配置App1和App2以在StickyListHeaders项目中构建模块 .
第四步是困难的部分,所以这是我将详细描述的唯一步骤 . 您可以通过在settings.gradle文件中添加项目语句并在项目语句返回的ProjectDescriptor对象上设置projectDir属性来引用项目目录外部的模块:
代码必须放在
settings.gradle
中:如果您已正确完成此操作,您会注意到项目引用的模块将显示在项目导航器中,即使这些模块位于项目目录的外部:
这允许您同时处理库代码和应用程序代码 . 当您以这种方式从外部引用模块时,版本控制集成也可以正常工作 . 您可以提交并推送对库代码的修改,就像您可以提交并推送对应用程序代码的修改一样 .
这种设置多个项目的方式避免了困扰Google推荐配置的困难 . 因为我们引用了一个位于项目目录之外的模块,所以我们不必为每个依赖它的应用程序创建库模块的额外副本,我们可以在没有任何git子模块废话的情况下对我们的库进行版本化 .
不幸的是,这种设置多个项目的另一种方式很难找到 . 显然,它不是你在查看Google指南时会想到的,而且在这一点上,使用Android Studio的UI无法以这种方式配置你的项目 .
文档方式
根据Android Studio文档中提供的建议,这是推荐的方法 .
创建库模块
创建一个新项目以使您的库进入 . 单击 File > New > New Module > Android Library > Next > (choose name) > Finish . 然后将您想要的任何类和资源添加到库中 .
构建模块时,将创建AAR文件 . 你可以在
project-name/module-name/build/outputs/aar/
找到它 .将您的库添加为依赖项
您可以将库作为依赖项添加到另一个项目,如下所示:
使用 File > New Module > Import .JAR/.AAR Package > Next > (choose file location) > Finish 导入库AAR文件 . (不要导入代码,否则它可以在很多地方编辑 . )
在settings.gradle文件中,确保您的库名称在那里 .
而已 . 你应该可以使用你的图书馆现在 .
注意事项
如果您想让您的图书馆更容易为更多的 Spectator 所用,consider using JitPac or JCenter .
对我来说最简单的方法 create 和 reuse 一个图书馆项目:
file > new > new module
上(并回答UI问题)检查/或在文件_317629中添加if:
include ':myLibrary'
检查/或在文件 build.gradle 中添加if:
dependencies { ... compile project(':myLibrary') }
You can also create a new studio application project 通过将build.gradle文件中的插件分配更改为com.android.library,可以轻松地将现有应用程序模块更改为库模块 .
至
更多here
要创建库:
文件>新模块
选择Android库
要使用库,请将其添加为依赖项:
文件>项目结构>模块>依赖项
然后添加模块(android库)作为模块依赖项 .
运行您的项目 . 它 will 工作 .
如果一个不起作用,有两个最简单的方法请尝试另一个 .
要么
我想知道为什么没有独立jar项目的例子 .
在eclipse中,我们只需在项目设置对话框中查看"Is Library"框 .
在Android studio中,我按照这个步骤获得了一个jar文件 .
创建一个项目 .
左侧项目菜单中的打开文件 . (app / build.gradle):Gradle Scripts> build.gradle(Module:XXX)
更改一行:
apply plugin: 'com.android.application'
- >'apply plugin: com.android.library'
删除文件中的applicationId:
applicationId "com.mycompany.testproject"
build project:Build> Rebuild Project
然后你可以获得aar文件:app> build> outputs> aar文件夹
将
aar
文件扩展名更改为zip
解压缩,你可以在文件夹中看到
classes.jar
. 重命名并使用它!无论如何,我不知道为什么google让jar创建在android studio中如此麻烦 .
您可以 add a new module 到任何应用程序 Blundell 在他的答案中说,然后从任何其他应用程序引用它 .
如果要将模块移动到计算机上的任何位置,只需移动模块文件夹(模块完全独立),然后您必须引用该模块 .
要参考此模块,您应该:
就我而言,使用MAC OS X 10.11和Android 2.0,并完全按照Aqib Mumtaz所解释的那样做 .
但是,每次都有这样的消息:“配置项目':app'时出现问题 . >无法评估模块xxx:找不到名称为'default'的配置 . ”
我发现此消息的原因是Android 2.0不允许直接创建库 . 所以,我已经决定首先创建一个app projet,然后修改build.gradle,以便将其转换为库 .
此解决方案不起作用,因为库项目与应用程序项目非常不同 .
所以,我已经解决了我的问题:
首先创建一个标准应用程序(如果需要);
然后选择'File/Create Module'
转到查找程序并移动在框架目录中新创建的模块的文件夹
然后继续Aqib Mumtaz提出的解决方案 .
因此,您的库源将被共享,而无需每次都复制源文件(对我来说这是一个异端!)
希望这对你有所帮助 .
看看link about multi project setups .
有些事情需要指出,请确保更新settings.gradle以引用应用程序和库模块 .
settings.gradle:
include ':app', ':libraries:lib1', ':libraries:lib2'
还要确保应用程序的build.gradle具有以下内容:
您应该具有以下结构:
应用程序的build.gradle应使用
com.android.application
插件,而任何库的build.gradle应使用com.android.library
插件 .如果您能够使用此设置从命令行构建,则应更新Android Studio IDE .
目的:单个地方的Android库 - 分享多个项目http://raevilman.blogspot.com/2016/02/android-library-project-using-android.html
不要忘记在
build.gradle
中使用apply plugin: 'com.android.library'
而不是申请插件:'com.android.application'
正如上面的捷克语评论我尝试搜索Gradle Build Varians并找到了这个链接:http://code.tutsplus.com/tutorials/using-gradle-build-variants--cms-25005这是一个非常简单的解决方案 . 这就是我所做的: - 在build.gradle中:
然后我还有2个版本的我的应用程序:pro和试用2个不同的packageName,这是上面代码中的2个applicationId,所以我可以将它们上传到Google Play . 我仍然只是在“main”部分编写代码并使用getpackageName进行切换介于版本之间 . 只需转到我提供的链接以获取详细信息 .