由于我需要对Smack库进行一些更改,我想将Smack作为库添加到我的Android Studio项目中。我从Smack Github repository下载了ZIP文件,并执行了以下步骤 - 正如我在搜索解决方案时发现的那样
(1)在我的项目根文件夹中创建了一个新文件夹libs
,并将提取和重命名的文件夹/Smack
复制到libs
。所以它现在是以下结构:
root/libs/Smack/
(2)我将根文件夹中的settings.gradle
编辑为
include ':app'
include ':libs:Smack'
(3)通过File -> Project Structure -> Modules app -> Dependencies
,我添加了:libs:Smack
作为模块依赖
(4)我已将以下行添加到root/app/build.gradle
compile project(':libs:Smack')
根据我在网上找到的大多数消息来源,这应该是它。但是,我收到Gradle project sync failed
的错误。我得到更详细的信息:
/path-to-root/libs/Smack/build.gradle
Error:(42, 0) Project with path ':smack-integration-test' could not be found in project ':libs:Smack'.
当我查看文件时,它会显示project(':smack-integration-test')
。不知何故,这是无法找到的。但是,有一个文件夹libs/Smack/smack-integration-test
。它看起来很简单,但我似乎错过了一些关键的东西。
编辑: Android Studio实际上支持导入Gradle项目:File -> New -> New Module
打开一个对话框窗口,我在其中选择Import Gradle Project
,我必须在此选择源目录,此处为Smack 。这样做会在settings.gradle
中生成所有正确的包含语句。
但是,我没有收到错误:
Error:(386, 0) Could not get unknown property 'clirr' for project ':smack-integration-test' of type org.gradle.api.Project.
由于我对Gradle不够熟悉,我不知道这可能意味着什么,我的谷歌搜索也没有推进我。
答案 0 :(得分:1)
我不确定我是否建议在这两个项目中创建多模块构建。这可能无法按预期工作。您可能需要将smack settings.gradle中的大多数/所有模块添加到您自己的settings.gradle
。如果你真的想这样做,我建议你使用prezi-pride从命令行管理它。
我不是Android用户,所以不确定哪个版本的Gradle android插件可以使用。如果android支持Gradle 3.1+,那么你可以使用新的composite build support。这是迄今为止最干净的解决方案,我推荐这种方法
另一种解决方案是单独构建项目并在项目中执行
compile fileTree(dir: '../smack/project-1/build/lib', include: '*.jar')
compile fileTree(dir: '../smack/project-2/build/lib', include: '*.jar')
// etc
另一个解决方案是publish the smack artifacts to maven local并在项目中从那里引用它们。如果您不能使用复合构建
,这可能是第二个最佳解决方案答案 1 :(得分:1)
我不会以这种方式添加项目,您可以将它作为项目文件夹结构中的单独项目,您可以修改它并构建它。最简单的方法是将构建jar文件复制到项目中并将其包含在gradle中:
对于jar,在项目中创建libs文件夹并将文件复制到那里,gradle包括这样的作品:
compile fileTree(dir: 'libs', include: ['*.jar']) // for all of the jars in the libs folder
compile files('libs/xyz.jar') // for a specific file
特别是对于Smack项目,您可以使用
来完成gradle assemble
在它的根文件夹
中ouput jar(s)在每个特定的文件夹中,每个例子对于android我看到:
咂嘴-机器人\构建\库\
咂嘴-机器人的扩展\建立\库\
答案 2 :(得分:0)
不是您的问题的解决方案,但可能更好的解决方法可能如下:
jitpack.io使您能够将GitHub存储库作为Gradle依赖项添加到项目中,从而允许您省略手动添加jar的过程。 如何实现这一点最好由JitPack本身描述。 简而言之: 将JitPack存储库添加到build.gradle:
repositories {
...
maven { url 'https://jitpack.io' }
}
您现在可以添加GitHub Repo作为依赖项:
dependencies {
compile 'com.github.igniterealtime:Smack:-SNAPSHOT'
}
刷新项目后,您应该能够按预期使用API。