2013-12-14 5 views
2

У меня есть проект Android, и я хочу создать суббиблиотеку (просто еще один проект Android) в качестве библиотеки для этого.Android Studio: Config Gradle файл для проекта библиотеки

Вот моя структура:

Project/ 
     settings.gradle 
     build.gradle 
     /ProjectA 
     /ProjectA/build.gradle 
     /ProjectA/libs 
     /ProjectA/libs/ProjectB 
     /ProjectA/libs/ProjectB/build.gradle 

ProjectA мой основной проект. Я делаю следующее. В setting.gradle. Я добавляю:

include ':ProjectA' 
include ':ProjectA:libs:ProjectB' 

после этого. Я скопировать всю информацию ProjectA/build.gradle в ProjectB/build.gradle содержание файла:

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

repositories { 
    mavenCentral() 
} 

android { 
    compileSdkVersion 18 
    buildToolsVersion "18.1.1" 

    defaultConfig { 
     minSdkVersion 9 
     targetSdkVersion 18 
    } 

    buildTypes { 
     debug { 
      packageNameSuffix ".debug" 
     } 
    } 
} 

После этого, я меняю ProjectA/build.gradle. Добавьте эту строку: compile projects(:libs:projectB) к зависимостям. После этого я получаю сообщение об ошибке:

Project with path ':libs:ProjectB' could not be found in project ':ProjectA' 

Пожалуйста, помогите мне настроить конфигурацию для проекта с несколькими проектами в Android Studio.

Спасибо :)

ответ

0

У меня есть решение для моей проблемы. К сожалению, я не вижу полного учебника по моей проблеме. И по многим ошибкам я могу попробовать это вручную. Я пробовал: вот мой короткий учебник. Надежда поможет кому-то здесь.

Краткое описание: Я добавлю в проект проект библиотеки SlidingMenu. Эта библиотека является особенным, потому что:

  1. это Затмение типа проекта (означает: имеет разница слайд по сравнению с андроид проекта создания на Android Studio или IntelliJ IDEA), так что вы должны иметь шаг конфигурации по рука. Если это обычная библиотека , создайте Android Studio, вы можете удалить отображение вручную, нажав ниже Gradle file.

  2. В нем используется библиотека поддержки v4. Часто ваше приложение также использует эту библиотеку. Итак, если вы скомпилируете оба одинаковых двух libries в одном проекте. Вы встретите ошибку . Итак, есть способ: использовать Android Repository для синхронизации. Вы не встретите исключения, что две одинаковые библиотеки в одном проекте.

Вы создаете папку ЛИЭС внутри вашего приложения. После этого скопируйте всю библиотеку проекта в эту папку.Например, я использую SlidingMenu. После этого вы создаете gradle.build со следующим контентом. (Я добавил некоторые комментарии, для облегчения следовать)

// SlidingMenu is an Eclipse project. so its structure is different. and must config by hand. 

// script to decide which gradle version will use for maven 
buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.6.+' 
    } 
} 

// because this is a android library. we change : apply plugin: 'android' to 
apply plugin: 'android-library' 

// Base Project includes "Support Library v4 jar to its project 
// 1. If Not Compile it : this library project cannot compile because missing libraries 
// 2. Cannot delete jar file in libs folder. Because its code depend on this libs. Delete jar file turn out that cannot see class file 
// 3. My Solution : Use Gradle Repository. By use Gradle Repository, this library will be synchronized between two projects. 
// So, just one instance could be used for both project. 
dependencies { 
    compile 'com.android.support:support-v4:19.0.0' 
} 

android { 
    compileSdkVersion 18 
    buildToolsVersion "18.1.1" 

    // Mapping phrase : use if this library is Eclipse-base project 
    // modify link because this project is from Eclipse Project 
    // not from normal gradle Project. So project structure is different. Cannot make default 
    // Config by hand, get Gradle knows which part for each type of directory 
    sourceSets { 
     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['src'] 
      resources.srcDirs = ['src'] 
      aidl.srcDirs = ['src'] 
      renderscript.srcDirs = ['src'] 
      res.srcDirs = ['res'] 
      assets.srcDirs = ['assets'] 
     } 

     // Move the tests to tests/java, tests/res, etc... 
     instrumentTest.setRoot('tests') 

     debug.setRoot('build-types/debug') 
     release.setRoot('build-types/release') 
    } 
} 

Вот главный Gradle файл:

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

// this is main project : so we use apply plugin : 'android' 
apply plugin: 'android' 

repositories { 
    mavenCentral() 
} 

android { 
    compileSdkVersion 18 
    buildToolsVersion "18.1.1" 

    defaultConfig { 
     minSdkVersion 9 
     targetSdkVersion 18 
    } 
} 

dependencies { 
    compile 'com.android.support:appcompat-v7:19.0.0' 
    compile 'com.android.support:support-v4:18.0.0' 

    // compile project SlidingMenu 
    compile project(':Hop Am Chuan:libs:SlidingMenu') 

    // add this line just for demonstration. you can use or remove it. 
    // compile files('libs/google-gson-2.2.4/gson-2.2.4.jar') 

} 

Надеется, что это поможет :)

1

Любой из них будет работать:

compile project(':ProjectA:libs:ProjectB') 

или

compile project('libs:ProjectB') 

Ведущее двоеточие как слэш на путь файловой системы: она делает его абсолютным путь, начиная с корня проекта. Без ведущего двоеточия это относительно корня модуля.

Сказав это, ваша структура проекта сложна. Должен ли ProjectB действительно содержаться в ProjectA? Будет ли это лучше работать?

Project/ 
    settings.gradle 
    build.gradle 
    /ProjectA 
    /ProjectA/build.gradle 
    /ProjectB 
    /ProjectB/build.gradle 
Смежные вопросы