多个Android应用程序取决于带有gradle的Android库
我仍在学习gradle,但从我所读到的,我想知道这是否可能 我有多个android应用程序(app1、app2、app3),这取决于android库(L)。android库(L)将依赖于像volley这样的外部库,而应用程序将依赖于像毕加索这样的外部库 我不希望每个应用程序都有多个库和截取副本。下面是我所想的文件夹/渐变结构:多个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/
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个独立的项目。在这种情况下,您将单独开发库,并使用所需的任何版本控制将其发布到(内部)存储库中。然后,每个应用程序都可以依赖于库的不同版本
buildscript{}
放在root的build.gradle中。