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

Компиляция, предоставление, APK - область зависимостей Android

При добавлении новых зависимостей в проект android, особенно в Android Studio в Dependencies, существуют три опции области Compile/Provided/APK.

Каковы последствия выбора каждого из них, когда мы должны их использовать? Кроме того, что говорит название.

EDIT:

"Правильно обрабатывайте" предоставленные "и" пакетные "области, чтобы делать то, что они должны делать." provided "и" package "не могут использоваться с Android-библиотеками и будут генерировать ошибку".. это от http://tools.android.com/tech-docs/new-build-system

4b9b3361

Ответ 1

  • provided - только зависимость от времени компиляции
  • package - зависимость от времени пакета
  • compile - время компиляции и времени пакета

provided обычно используется для библиотек на основе обработки аннотаций. Обычно эти библиотеки разделяются двумя артефактами - "аннотацией" и "компилятором". "компилятор" - это зависимость provided, потому что вам не нужно использовать его в приложении, только для компиляции; и "аннотация" - это зависимость compile - она ​​используется в коде приложения и поэтому компилируется. Или сгенерированный код может потребовать дополнительных зависимостей, пока ваше приложение не может. Например. Конфигурация зависимостей кинжалов:

compile 'com.squareup.dagger:dagger:1.2.2'
provided 'com.squareup.dagger:dagger-compiler:1.2.2'

Ответ 2

Эти свойства получены из maven областей.

Они просто указывают, как обрабатывать определенные зависимости на каждом этапе процесса сборки.

  • compile - подход по умолчанию, это просто означает, что все зависимости должны быть доступны во время компиляции. Зависимости компиляции доступны во всех классах проекта. Кроме того, эти зависимости распространяются на зависимые проекты. Во время выполнения обычно требуется зависимость времени компиляции.

  • package - объявляет дополнительную конфигурацию для создания приложения. Вы можете указать плагины, добавляющие дополнительные функции в процесс сборки.

  • provided - это означает, что среда выполнения содержит эти зависимости. Например, при просмотре внутренних объектов библиотеки android.jar вы увидите java.lang.RuntimeException: Stub! в каждом теле метода.

    Это имеет некоторые последствия:
    • Вы можете разрабатывать приложения Android локально, не имея полной среды Android.
    • Ваш APK вы должны запустить его на устройстве Android или эмуляторе, потому что они обеспечивают реализацию этих методов.
    • Ваши приложения, которые ссылаются на классы SDK, будут правильно построены, поскольку в jar представлены метаданные класса.
    • Если вы не используете какую-либо библиотеку, которая предоставляет артефакты (например, Robolectric), вы должны запускать тесты на своем эмуляторе/устройстве.

provided и package не могут использоваться с Android-библиотеками и будут генерировать ошибку.

Вот как выглядит sourceSet:

enter image description here

Дополнительная информация о системе сборки: https://www.youtube.com/watch?v=LCJAgPkpmR0

Удивительная статья о Gradle: http://www.sinking.in/blog/provided-scope-in-gradle/

Ответ 3

Ксавье говорит здесь о области APK.

в Android-плагине, эквивалент (вид) времени выполнения называется apk. Вы можете сделать

зависимости {    Файлы apk ('libs/foo.jar') }

и он будет только упакован, но не будет на пути к компиляции.