多个Android应用程序取决于带有gradle的Android库

多个Android应用程序取决于带有gradle的Android库,android,gradle,android-gradle-plugin,build.gradle,Android,Gradle,Android Gradle Plugin,Build.gradle,我仍在学习gradle,但从我所读到的,我想知道这是否可能 我有多个android应用程序(app1、app2、app3),这取决于android库(L)。android库(L)将依赖于像volley这样的外部库,而应用程序将依赖于像毕加索这样的外部库 我不希望每个应用程序都有多个库和截取副本。下面是我所想的文件夹/渐变结构: app1/ settings.gradle build.gradle src/ com/ test/ app2/ app3/ library/

我仍在学习gradle,但从我所读到的,我想知道这是否可能

我有多个android应用程序(app1、app2、app3),这取决于android库(L)。android库(L)将依赖于像volley这样的外部库,而应用程序将依赖于像毕加索这样的外部库

我不希望每个应用程序都有多个库和截取副本。下面是我所想的文件夹/渐变结构:

app1/
  settings.gradle
  build.gradle
  src/
    com/
    test/
app2/
app3/
library/
  settings.gradle
  build.gradle
  src/
    com/
    test/
external/
  volley/
  picasso/
但我不确定app1的build.gradle文件是什么样子,因为项目依赖项(库)似乎需要位于app1文件夹中

buildscript {
    repositories {
        mavenCentral()
    }

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

apply plugin: 'android'

dependencies {
    compile files('libs/android-support-v4.jar')
    compile project(':library')
}

android {
    buildToolsVersion "17.0"
    compileSdkVersion 18

     sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aild.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')
    }
} 

对于我来说,使用gradle构建项目的最佳方式是什么?

您可以使用以下结构:

app1/
  build.gradle
app2/
app3/
library/
  src/
     main
  libs
  build.gradle

settings.gradle
在settings.gradle中

include ':library' ,':app1' , ':app2', ':app3'
在app1/build.gradle中

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19            
    }
}

dependencies {
   //Library
   compile project(':library')
   // Support Libraries
   compile 'com.android.support:support-v4:19.0.0'
   //OkHttp
   compile 'com.squareup.okhttp:okhttp:1.2.1'
   //Picasso
    compile 'com.squareup.picasso:picasso:2.1.1'
}
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
}
apply plugin: 'android-library'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19

    }
}

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}
在library/build.gradle中

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19            
    }
}

dependencies {
   //Library
   compile project(':library')
   // Support Libraries
   compile 'com.android.support:support-v4:19.0.0'
   //OkHttp
   compile 'com.squareup.okhttp:okhttp:1.2.1'
   //Picasso
    compile 'com.squareup.picasso:picasso:2.1.1'
}
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
}
apply plugin: 'android-library'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19

    }
}

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}
借助maven(如毕加索)的aar,Gradle将检测到同一依赖关系的多个实例,并为您管理事情。 用jar(截击)你必须注意。不能再添加两次。
如果您的库项目依赖于jar,那么APK项目将继承此依赖项。

您对settings.gradle感到困惑。它应该位于多模块文件夹结构的根目录下

所以你有两个选择:

  • 创建一个多模块设置,其中有4个模块(库、app1、app2、app3)。在这种情况下,您将始终在studio中打开所有4个项目,您将能够同时为应用程序构建所有项目,并且它们将使用相同版本的库。这可能意味着您需要在同一时间开发每个应用程序,也可能在同一时间发布(取决于库项目的开发周期)

  • 创建4个独立的项目。在这种情况下,您将单独开发库,并使用所需的任何版本控制将其发布到(内部)存储库中。然后,每个应用程序都可以依赖于库的不同版本


choice#1将是gradle示例的一个极好的补充——它是一个可能随时都会出现的用例!非常感谢。这正是我需要的建议。在这个结构中,root的build.gradle看起来会是什么样子,这样Android Studio仍然可以工作?回答了我自己关于root的build.gradle的问题。最好的用法是将app/build.gradle和library/build.gradle通用的
buildscript{}
放在root的build.gradle中。