Подтвердить что ты не робот

Невозможно изменить зависимости конфигурации (после включения моментального запуска)

Я только что включил instant run в своем проекте студии Android. (Следуйте инструкциям здесь)

Мой проект содержит подмодули git, и как-то они больше не компилируются.

Это ошибка, которую я получаю:

Ошибка: (8, 0) Невозможно изменить зависимости конфигурации ': libraries: my_library: classpath' после того, как он был разрешен.

Любая идея, что там может быть неправильно?

Верхний уровень build.gradle:

buildscript {
repositories {
    mavenCentral()
    jcenter()
    maven { url 'https://maven.fabric.io/public' }
}

dependencies {
    classpath 'com.android.tools.build:gradle:2.0.0-alpha1'
    classpath 'com.novoda:bintray-release:0.2.7'
    classpath 'io.fabric.tools:gradle:1.+'
}}

Модуль build.gradle:

apply plugin: 'android'
apply plugin: 'io.fabric'

android {

    defaultConfig {
       versionCode 4850
       versionName '4850'
       compileSdkVersion 23
       buildToolsVersion '23.0.1'
    }

    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/MANIFEST.MF'
        exclude 'META-INF/NOTICE'
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    useLibrary 'org.apache.http.legacy'
}

repositories {
    mavenCentral()
    jcenter()
}


dependencies {
    [skip]
    compile project(':libraries:my_library:sdk')
}

Библиотека build.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 23
    buildToolsVersion '23.0.2'

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 23
    }

    lintOptions {
        abortOnError false
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile fileTree(include: '*.jar', dir: 'libs')
    compile 'com.android.support:support-v4:23.1.0'
    compile 'com.android.support:appcompat-v7:23.1.0'

    testCompile 'junit:junit:4.12'

}
4b9b3361

Ответ 1

У меня была та же проблема. Я сравнил его с (рабочим) образцом проекта от @RaGe и обнаружил незначительную разницу.

Папка субпроекта должна начинаться с буквы верхнего регистра.

Вот изменение, которое я сделал на примере @RaGes, чтобы разбить его и заставить его снова работать.

Сломанная структура:

android-multi-project-sample
    + .gralde
    + .idea
    + app
    + build
    + gradle
    + myApplication2
    - .gitignore
    - android-multi-project-sample.iml
    - build.gradle
    - gradle.properties
    - gradlew
    - gradlew.bat
    - local.properties
    - settings.gradle

приводит к следующей ошибке:

Error:(8, 0) Cannot change dependencies of configuration ':myApplication2:classpath' after it has been resolved.

Рабочая структура (с субпроектом верхнего регистра)

android-multi-project-sample
    + .gralde
    + .idea
    + app
    + build
    + gradle
    + MyApplication2     // upper case!!!!!!
    - .gitignore
    - android-multi-project-sample.iml
    - build.gradle
    - gradle.properties
    - gradlew
    - gradlew.bat
    - local.properties
    - settings.gradle

также должен быть изменен верхний уровень settings.gradle:

+ include ':app', ':MyApplication2:mylibrary'
- include ':app', ':myApplication2:mylibrary'

и app/build.gradle должны изменить этот

+ compile project(':MyApplication2:mylibrary')
- compile project(':myApplication2:mylibrary')

Все компилируется

Будьте осторожны! Git по умолчанию не чувствителен к регистру. Используйте

git mv -f myApplication2 temp
git mv -f temp MyApplication2

чтобы переименовать папку.

Ответ 2

gradle считывает и выполняет все build.gradle файлы во всех папках входящих модулей. Как показывает ошибка, он также пытается выполнить корневую сборку script :libraries:my_library.

Вы должны изменить свой settings.gradle и включить проект библиотеки, установив его "projectDir":

include ':app'

// Give your library project any module name, i.e. ':sdk'
include ':sdk'
// Then set the project path of the library module
project(':sdk').projectDir = new File('libraries/my_library/sdk')

С помощью этого settings.gradle вы можете ссылаться на проект библиотеки как на gradle с помощью:

compile project(':sdk')

Ответ 3

У меня была та же проблема. Я разрешил его, удалив classpath в файле верхнего уровня build.gradle подмодуля.

dependencies { 
     // classpath 'com.android.tools.build:gradle:1.0.0'
}

Я не уверен, что это лучше всего, но это сработало для меня.

Ответ 4

Согласно официальной документации по мгновенному запуску.

Что произошло за кулисами, так это то, что мы обновили ваш проект build.Gradle, чтобы использовать последнюю версию плагина Android Gradle, который необходим для работы Instant Run. Мы также обновляем версию обертки Gradle до версии 2.8 и пытаемся обновить версию средств сборки во всех ваших модулях до последней версии (23.0.2). Это не требуется для Instant Run, но он будет использовать новую более быструю версию dex, которая поможет как мгновенному запуску, так и полной сборке быть немного быстрее.

Ниже приведен фрагмент приложения \build.gradle:

buildscript {
   repositories {
       jcenter()
   }

   dependencies {
       classpath 'com.android.tools.build:gradle:2.0.0-alpha1'
   }
}

Известные проблемы с помощью Instant Run

Использование Instant Run с отражением

Отражение может показывать неожиданные вещи, например:

  • Все классы публикуются.
  • Многие другие вещи также преданы гласности.

Ограничения с профилированием производительности

Мы предлагаем временно отключить Instant Run при профилировании вашего приложения для отладки.

При использовании Instant Run очень незначительное влияние на производительность и немного большее влияние при переопределении методов.

Увеличение методов приложений

Instant Run добавляет некоторые методы-140 плюс три раза больше количества классов в вашем приложении и его локальных зависимостях. Если приложение ранее было чуть ниже предела dex, включение Instant Run может подтолкнуть ваше приложение к пределу dex. Узнайте, как это исправить, оптимизируя сборки разработки Multi dex.

Другие известные проблемы

  • Периодические проблемы могут возникать, когда среда IDE теряет соединение с приложением, что приведет к полной перестройке.
  • Совместимость сторонних разработчиков Gradle еще не протестирована, особенно те, которые не были обновлены для использования нового API преобразований.
  • Связывание данных в настоящее время нарушено в этой сборке (возможность восстановления).

, поэтому, если вы столкнулись с этой проблемой, вы можете отключить мгновенный запуск

перейдите в Настройки → Сборка, выполнение, развертывание → Мгновенный запуск и снимите флажок Включить мгновенный запуск....

Лучшее понимание мгновенного запуска go здесь

Ответ 5

Извлеките свои зависимости из своего верхнего уровня сборки gradle. Поскольку вы создаете classpath с вашим верхним уровнем gradle, а затем пытаетесь перезаписать его другим вашим build.gradles

From:

buildscript {
repositories {
    mavenCentral()
    jcenter()
    maven { url 'https://maven.fabric.io/public' }
}

dependencies {
    classpath 'com.android.tools.build:gradle:2.0.0-alpha6'
    classpath 'com.novoda:bintray-release:0.2.7'
    classpath 'io.fabric.tools:gradle:1.+'
}}

To: Примечание. Я не добавлял эту прокомментированную строку, Android-Studio делает это автоматически

buildscript {
    repositories {
        jcenter()
    }   
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0-alpha6'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

Вы должны иметь возможность добавлять любые необходимые хранилища Maven в свои отдельные градиенты приложений, поскольку они должны быть конкретными, и jcenter будет охватывать многие из них, в качестве @AndroidMechanic, и @Hi Я Frogatto пытались сказать в предыдущих ответах и ​​комментариях.  Посмотрите здесь Bintray - JCenter

Другое дело, я не понимаю, почему вы управляете вашими библиотеками, создавая gradle в своем проекте как часть вашего проекта. Вы должны ссылаться на свою библиотеку из своего проекта с помощью приложения build.gradle. Вы обрабатываете библиотеку gradle как приложение gradle.

dependencies {
    compile fileTree(include: '*.jar', dir: 'libs')
    compile 'com.android.support:support-v4:23.1.0'
    compile 'com.android.support:appcompat-v7:23.1.0'

    testCompile 'junit:junit:4.12'

}

Внесите эти изменения, затем просмотрите, что дублирует, и вы можете управлять этим оттуда.

Кроме того, я рекомендую вручную синхронизировать проект с файлами gradle при внесении изменений. Я ни на что не рассчитывал, важно сделать шаг за шагом и проанализировать происходящее, особенно когда оно не будет компилироваться. Это мое мнение только и один способ программирования в андроиде.

Если мгновенный запуск создает хаос с конкретным проектом, я отключу его для этого проекта. Он включен по умолчанию, и у меня не было никаких проблем с ним. Повреждение сборки может быть результатом нечетких град в вашем проекте.

также:

В свойствах оболочки gradle для classpath 'com.android.tools.build:gradle:2.0.0-alpha6' требуется класс 2.10:

distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip

Смотрите последние новости  Сайт проекта Android Tools

Или вы можете установить предыдущую версию Android Studio и использовать предыдущую рабочую версию вашего проекта.

Если у вас несколько файлов git, я предлагаю удалить лишние из них, сохраните только те, которые вы используете для контроля версий.

Ответ 6

classpath 'com.android.tools.build: gradle:2.0.0-alpha1'

попробуйте изменить его на

 classpath 'com.android.tools.build:gradle:2.0.0-alpha6'

alpha1 кажется устаревшим с сегодняшнего дня (?) и больше не компилируется. Также вам нужно будет обновить свой gradle до последних 2.10 для работы с альфа6

Ответ 7

Две вещи, которые вы можете попробовать

Измените свой плагин на "android"

С помощью новых инструментов gradle вам необходимо указать правильный плагин для вашего модуля gradle, а также файл библиотеки gradle. Если вы внимательно посмотрите, ваш файл библиотеки gradle верен: '

apply plugin: 'com.android.library'

Измените модуль gradle:

apply plugin: "android" -> apply plugin: 'com.android.application'
Классы

org.apache теперь отпечатаны

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

useLibrary 'org.apache.http.legacy'

См. Устаревший список.

Ответ 8

Проект библиотеки build.gradle вызывает ошибку конфигурации (из-за некоторой неясной причины). Для меня этого было достаточно, чтобы добавить проект библиотеки (который является подмодулем git) в settings.gradle вместо добавления модуля проекта библиотеки.

Вместо: include ':libraries:my_library:sdk'

попробуйте включить как подпроект библиотеки, так и модуль подпроекта: include ':libraries:my_library' include ':libraries:my_library:sdk'