两个android项目使用gradle在同一个存储库中共享公共模块

时间:2015-01-09 17:45:35

标签: android git gradle android-gradle

我们正在创建一个应用程序(实际上是2个),它分成两个独立的项目,但共享相同的GIT存储库(git root中的2个单独的文件夹)。它是一款适用于掌上电脑和一款适用于其他平台的应用但他们应该共享一些代码,如Utils,API调用等。

文件夹结构如下所示:

- GIT Root
- 项目(项目)
--- App 1(Android应用程序)
--- App 2(Android应用程序)
--- Common(Android库)

App1和App2应该能够从常见的代码中获取代码,当然不是其他方式。

尝试像上面这样做并使用Gradle,但它似乎不起作用。我知道为两个应用程序共享相同的git repo可能不是处理这种情况的最佳方式,但我在这里没有选择。

你认为这可能以某种方式做到吗? (也许我只是没有正确理解模块或类似的东西)

我是Gradle的新手,这使得这更难......

2 个答案:

答案 0 :(得分:6)

如果所有三个项目都在同一个Git存储库中,这并不难做到。以下是如何设置项目的框架:

App1 (Android application)
    |_ build.gradle
    |_ src
App2 (Android application)
    |_ build.gradle
    |_ src
Common (Android library)
    |_ build.gradle
    |_ src
settings.gradle
build.gradle

顶级build.gradle文件可以具有您将用于所有子项目的常用gradle设置

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}

确保settings.gradle文件包含您的所有项目:

include ':App1'
include ':App2'
include ':Common'

Common设置为Android库项目。在build.gradle的{​​{1}}文件中添加以下行:

Common

将其他两个项目设置为Android应用程序,并将apply plugin: 'com.android.library' 项目作为依赖项包含。

Common

答案 1 :(得分:3)

你应该有三个git回购。 App1,App2和Common。

使用gradle使库项目通用。

apply plugin: 'com.android.library'

您可以使用android maven插件在本地构建aar并使其可供每个子应用使用。添加classpath 'com.github.dcendents:android-maven-plugin:1.2'apply plugin: 'com.github.dcendents.android-maven'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
        classpath 'com.github.dcendents:android-maven-plugin:1.2'
    }
}

apply plugin: 'com.github.dcendents.android-maven'

定义库应用程序的组和版本

group = 'com.foo.example'
version = '1.0.0-SNAPSHOT'

使用./gradlew installDebug

在本地安装库应用程序

儿童应用

现在,父应用程序可以作为依赖项包含在子应用程序中。向build.gradle添加依赖项。

compile('com.foo.example:library:1.0.0-SNAPSHOT@aar') {transitive = true}

每次更改库应用程序时,都必须重新安装。然后,您必须重新同步您的子应用程序中的gradle文件。工具 - > Android - >使用Gradle文件同步项目