无法弄清楚如何设置 gradle 构建嵌套项目

can't figure out how to set up gradle build with nested projects

两天以来,我一直在努力弄清楚如何编译以下内容。

我有一个名为 "Margin" 的 android 工作室项目,它将使用库 "hbci4java",后者又使用项目 "cryptalgs4java"。

目录结构如下:

Margin
+-# app
| +-# build
| +-# libs
| | +-# hbci4java
| |   +-# src
| |   | +-# org/kapott/hbci
| |   | | +-# manager
| |   | | | +-- HBCIHandler.java
| |   | | | +-- ...
| |   | | +-- ...
| |   | +-- ...
| |   |
| |   +-# thirdparty
| |   | +-# cryptalgs4java
| |   |   +-# src
| |   |   +-- build.gradle
| |   |   +-- ...(other files)
| |   |
| |   +-- build.gradle
| |   +-- settings.gradle
| |
| +-# src
| | +-+ main
| | | +-# java
| | | | +-# de/bvs/margin
| | | |   +-# activities
| | | |   |  +-- MainActivity.java
| | | |   |  +-- ...
| | | |   + ...
| | | |
| | | +-- ...
| | +-- ...
| |
| +-- build.gradle
| +-- ...
|
+-# build
+-# gradle
+-- build.gradle
+-- gradle.properties
+-- settings.gradle
+-- ...

包含 MainActivity 的应用程序在我添加 libs 目录结构之前编译得很好,它仍然如此,只要我不告诉 android studio 关于此目录的任何信息。 但是,我想在我的项目中使用 hbci4java 项目。比方说,我想在我的 Mainactivity 中创建一个 HBCIHandler 对象。

我知道,我必须告诉构建系统,它应该使用 hbci4java 库。但我对不同的 gradle 文件不知所措:

我知道 Margin/app/libs/hbci4java/thirdparty/cryptalgs4java/buid.gradle 单独使用时用于构建 cryptalgs4java。 它包含以下内容:

apply plugin: 'java'

repositories {
  mavenCentral()
}

sourceCompatibility = 1.5
compileJava.options.encoding = 'ISO-8859-1'

version = '2.5.13-SNAPSHOT'

sourceSets{
    main {
        java {
            srcDir 'src/java'
        }
        output.classesDir 'classes'
    }
}

另外 Margin/app/libs/hbci4java/build.gradle 和 Margin/app/libs/hbci4java/settings.gradle 对我来说似乎很清楚,当刚刚构建 hbci4java 项目时:

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile project(':thirdparty/cryptalgs4java')
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

sourceCompatibility = 1.5
compileJava.options.encoding = 'ISO-8859-1'
compileTestJava.options.encoding = 'ISO-8859-1'

version = '2.5.13-SNAPSHOT'

sourceSets{
    main {
        java {
            srcDir 'src'
        }
        output.classesDir 'classes'
    }

    test {
        java {
            srcDirs 'test'
        }
    }
}

设置:

include 'thirdparty/cryptalgs4java'

但我完全不确定 android 项目的构建是如何工作的,以及如何让它知道图书馆项目。

以下是其余 gradle 个文件的内容:

Margin/app/build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "de.bvs.margin.margin"
        minSdkVersion 19
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
}

Margin/build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

和Margin/settings.gradle:

include ':app'

我尝试了几个位置来放置 libs 文件夹,还尝试在不同的 gradle 文件中提及它,但到目前为止没有成功。

我希望,任何人都可以帮助我弄清楚如何使用库并让 android studio 知道它们。

最良好的祝愿, 斯蒂芬

在稍微调整了一下之后,我发现以下方法可以解决问题:

将以下行添加到 Margin/settings。gradle:

include ':app:libs:hbci4java', ':thirdparty/cryptalgs4java'
project(':thirdparty/cryptalgs4java').projectDir = new File('app/libs/hbci4java/thirdparty/cryptalgs4java')

添加

compile project(':app:libs:hbci4java')

到 Margin/app/build 中的依赖项部分。gradle

现在,gradle 可以重新同步,并且 android studio 将允许将项目 hbci4java 添加为 Margin 中的依赖项。