Несколько приложений для Android в зависимости от библиотеки Android с градиентом

Я все еще изучаю градиент, но из того, что я прочитал, мне интересно, возможно ли это.

У меня есть несколько приложений для Android (app1, app2, app3), которые зависят от библиотеки Android (L). Библиотека андроида (L) будет зависеть от внешних библиотек, таких как volley, и приложения будут зависеть от внешних библиотек, таких как picasso.

Я не хочу, чтобы несколько копий библиотеки и залпа для каждого приложения. Вот что я думал о том, что структура папки / градиента будет выглядеть так:

app1/ settings.gradle build.gradle src/ com/ test/ app2/ app3/ library/ settings.gradle build.gradle src/ com/ test/ external/ volley/ picasso/ 

Но я не уверен, что мой файл build.gradle для app1 будет выглядеть, поскольку зависимости проекта (библиотека) кажется, что он должен находиться внутри папки 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 

В настройках.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' } 

В библиотеке / build.gradle

 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') } 

С aar от maven (как picasso), Gradle будет обнаруживать несколько экземпляров одной и той же зависимости и управлять вещами для вас. С банкой (как волейбол) вы должны обратить внимание. Вы не можете добавить его дважды. Если ваш проект библиотеки имеет зависимость от jar, тогда проект APK наследует эту зависимость.

Вы смущены настройками.gradle. Он должен быть в корне вашей многомодульной структуры папок.

Таким образом, у вас есть два варианта:

  • Создайте единую мультимодульную установку, в которой у вас есть 4 модуля (библиотека, приложение 1, приложение 2, приложение 3). В этом случае вы всегда будете открывать все 4 проекта в студии, вы сможете одновременно создавать все для приложений, и все они будут использовать одну и ту же версию библиотеки. Вероятно, это означает, что вам нужно, чтобы каждое приложение разрабатывалось одновременно и, возможно, выпускалось в одно и то же время (в зависимости от цикла разработки проекта библиотеки)

  • Создайте 4 независимых проекта. В этом случае вы разрабатываете библиотеку отдельно и публикуете ее во внутреннем репозитории, используя любое нужное вам управление версиями. Тогда каждое приложение может зависеть от другой версии библиотеки.