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

Преимущества в Android для импорта библиотеки внутри и снаружи

Post ADT 17, не-Android-библиотеки должны быть включены либо в папки "libs" проекта, либо экспортированы через вкладку "Заказ и экспорт" в пути сборки. Какая разница (если есть) между импортом библиотеки извне:

External1

External2

И внутренне:

Internal2

Internal1

Есть ли преимущество в импорте библиотеки таким образом, что она включена в группу "Зависимости Android"?

4b9b3361

Ответ 1

Как вы добавляете внешние зависимости jar в свой путь построения проекта Android (внутренне или внешне) не имеют никакого отношения к фактическому процессу сборки (более конкретно, на этапе компиляции и dex), все, что он делает, это сказать процесс сборки, где искать для необходимых банок на этапе компиляции и dex.

Элемент Android Dependencies, показанный в окне Java Build Path - Libraries, представляет собой еще один абстрактный слой, который плагин ADT используется для управления/группировки зависимостей jar. где ваши внешние файлы jar (в вашем случае android-support-v4.jar) отображаются (внутри или снаружи Android Dependencies) в этом окне не имеют значения.

Поскольку r17, управление зависимостями значительно улучшилось, и рекомендуется использовать библиотеки libs/directory для всех jar-зависимостей (см. ваш внутренний путь), который рассматривается как подход к автоматизации (поскольку плагин ADT теперь становится более умным), см. Версия для ADT 17.0.0:

Новые функции построения

  • Добавлена ​​возможность автоматической настройки зависимостей JAR. Любые файлы .jar в папке /libs добавляются в конфигурацию сборки (подобно тому, как работает система сборки Ant). Кроме того, файлы .jar, необходимые для проектов библиотек, также автоматически добавляются к проектам, которые зависят от этих проектов библиотеки. (подробнее)

Однако, если вы предпочитаете, вы все равно можете использовать старый способ (см. внешний вид), который рассматривается как ручной подход (поскольку плагин ADT был глупым раньше), см. Последние изменения для выпуска r17:

Важно: если вы все еще ссылаетесь на библиотеки jar вручную вместо того, чтобы помещать их под libs/знать следующее:

  • Если проект является проектом библиотеки, эти библиотеки jar не будут автоматически видны проектам приложений. Вы действительно должны переместить их в libs/

  • Если проект является приложением, это может работать, но вы должны обязательно отмечать файлы jar как экспортированные.

Есть ли преимущество в импорте библиотеки таким образом, что она включена в группу "Зависимости Android"?

Автоматизация и руководство с точки зрения управления зависимостями, автоматизация всегда считается более безошибочной, чем руководство в мире информатики.

Ответ 2

Номер один, покажите остановку: "Не могу поверить, что они не проверяли это", недостатком размещения внешних банок в каталоге libs является то, что вы не можете установить для них местоположение javadocs, поскольку опция показывает как "Нет (не изменяемый)".

Следовательно, я все еще использую параметр Export в свойствах сборки

Ответ 4

Из Часто задаваемые вопросы Eclipse

Внутренний ресурс находится в каком-либо проекте в верстаке и поэтому управляется рабочим столом; как и другие ресурсы, эти ресурсы могут быть версией управляемой рабочей станцией. Внешний ресурс не является частью рабочего места и может использоваться только по ссылке. Например, JRE часто является внешним и очень большим, и нет необходимости связывать его с системой VCM.

Итак, достаточно просто, если вы хотите иметь возможность управлять JAR как часть проекта, подвергая его SCM и тому подобное, тогда относитесь к нему как к внутреннему ресурсу, иначе относитесь к нему как к внешнему ресурсу. Это не будет иметь никакого значения в APK, произведенном в конце, его просто затмение.

Если вы хотите избежать создания копии каждый раз, когда хотите использовать свою библиотеку, рассматривайте ее как внешний ресурс. Но могу ли я предложить вам посмотреть maven и плагин android maven, maven имеет немного кривой обучения (особенно, если вы привыкли к сценариям создания "make" или "ant" ), но это очень стоит усилий.