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

Two android projects sharing common module in same repository using gradle

我们正在创建一个应用程序(实际上是 2 个),该应用程序分为 2 个独立的项目,但共享相同的 GIT 存储库(git 根目录中的 2 个独立文件夹)。它是一个用于手持设备的应用程序,一个用于另一个平台的应用程序。但他们应该共享一些代码,例如 Utils、API 调用等

文件夹结构如下所示:

-GIT根目录
-- 项目(项目)
--- 应用 1(Android 申请)
--- 应用 2(Android 申请)
--- 通用(Android 库)

App1 和 App2 应该能够从普通方式访问代码,当然不能从其他方式访问代码。

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

你觉得这样可以吗? (也许我只是没有正确理解模块或类似的东西)

我是 Gradle 的新手,这让这更难..

您应该为此准备三个 git 存储库。 App1、App2 和 Common。

使用 gradle 共享库项目。

apply plugin: 'com.android.library'

您可以使用 android maven 插件在本地构建 aar 并使其可用于每个 child 应用程序。添加类路径 '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

在本地安装图书馆应用程序

Child 应用

现在 parent 应用程序可以作为依赖项包含在 child 应用程序中。添加对 build.gradle 的依赖。

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

每次您对图书馆应用程序进行更改时,您都必须重新安装它。然后,您必须在 children 应用程序中重新同步 gradle 文件。工具 -> Android -> 将项目与 Gradle 个文件

同步

如果所有三个项目都在同一个 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 库项目。在 Commonbuild.gradle 文件中添加行:

apply plugin: 'com.android.library'

将其他两个项目设置为 Android 应用程序,并将 Common 项目作为依赖项包含在内。

apply plugin: 'com.android.application'

dependencies {
    compile project(':Common')
    :
    :
}