将库(Smack)添加到Android Studio项目

时间:2016-11-30 08:59:58

标签: java android android-studio gradle android-gradle

由于我需要对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不够熟悉,我不知道这可能意味着什么,我的谷歌搜索也没有推进我。

3 个答案:

答案 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​​。