2016-11-30 2 views
3

Поскольку мне нужно внести некоторые изменения в библиотеку Smack, я хочу добавить Smack как библиотеку в свой проект Android Studio. Я загрузить ZIP-файл с Smack Github repository, и сделал следующие шаги - как я нашел при поиске решенийДобавление библиотеки (Smack) в проект Android Studio

(1) Создана новая папка libs в моей корневой папке проекта и скопировал извлеченную и переименовала папка /Smack в libs. Так что теперь следующая структура:

root/libs/Smack/ 

(2) Я отредактировал мой settings.gradle в корневой папке для

include ':app' 
include ':libs:Smack' 

(3) Via File -> Project Structure -> Modules app -> Dependencies, я добавил :libs:Smack в качестве модуля зависимости

(4) Я добавил следующую строку к root/app/build.gradle

compile project(':libs:Smack') 

Согласно большинству источников, которые я нашел в Интернете, это должно быть так. Однако, я получил ошибку, что Gradle project sync failed. Более подробно я получаю:

/path-to-root/libs/Smack/build.gradle 
Error:(42, 0) Project with path ':smack-integration-test' could not be found in project ':libs:Smack'. 

Когда я смотрю в файл и линии он говорит project(':smack-integration-test'). Как-то это невозможно найти. Однако есть папка libs/Smack/smack-integration-test. Это выглядит довольно просто, но я, кажется, пропустил что-то важное здесь.

EDIT: Android-студия на самом деле поддерживает импорт Gradle проектов: File -> New -> New Module открывает диалоговое окно, в котором я выбираю Import Gradle Project где я должен выбрать исходный каталог, здесь, Смак. Это делает все правильные входящие заявления в settings.gradle.

Однако, нет, я получаю ошибку:

Error:(386, 0) Could not get unknown property 'clirr' for project ':smack-integration-test' of type org.gradle.api.Project. 

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

ответ

1

Я бы не добавил проект таким образом, вы можете оставить его отдельным проектом из структуры папок проекта, вы изменили бы его и построить это. Самый простой способ, чтобы скопировать файл (ы) сборки баночки в свой проект и включить его в Gradle:

Для баночки, создайте папку ЛИЭСА в проекте и скопировать туда файл, Gradle включая работу, как это:

compile fileTree(dir: 'libs', include: ['*.jar']) // for all of the jars in the libs folder 
compile files('libs/xyz.jar') // for a specific file 

в частности, для проекта Смак, вы можете сделать это с

gradle assemble 

в его корневой папке

выводе банка (ов) в каждом конкретном е старше, на пример для андроида я вижу:

smack-android\build\libs\

smack-android-extensions\build\libs\

+0

Я просмотрел его. Но создание JAR-файла из проекта Gradle кажется не совсем простым. Мне, возможно, придется идти этим путем, я просто надеялся получить быстрое решение, даже если оно грязное, поскольку оно предназначено только для тестирования. – Christian

+0

Я провел тест локально с помощью библиотеки Smack, и это довольно просто, если вы запустите команду gradle в своем корне, он построит все подпроекты. Оттуда вы можете выбрать подходящую для вас банку (ы) из папок сборки – petrumo

+0

Я принял ответ, так как сделал ход таким образом.Я смог создать изменяющиеся файлы jar и импортировать его в свой проект. Однако замените строки 'compile 'org.igniterealtime.smack: smack-android: 4.1.0'' соответствующими 'компиляционными файлами (' libs/... jar ')' строк, в которые были отправлены ошибки в моем исходном коде. Я предполагаю, что существуют разные версии. – Christian

0

не решение вашей проблемы, но, возможно, даже лучше обходной путь может быть следующим:

jitpack.io предоставляет вам возможность добавлять GitHub Хранилища в свой проект как Gradle зависимости, таким образом, что позволяет исключить процесс вручную добавляя банку. Как добиться этого лучше всего описано JitPack. Короче: Добавить JitPack Repository к вашему build.gradle:

repositories { 
     ... 
    maven { url 'https://jitpack.io' } 
    } 

Теперь вы можете добавить в GitHub Repo как Dependency:

dependencies { 
     compile 'com.github.igniterealtime:Smack:-SNAPSHOT' 
    } 

После обновления проекта вы должны быть в состоянии использовать API, как ожидалось.

+0

Смогу ли я изменить исходный код Smack? До сих пор я включаю Smack, добавляя что-то вроде 'compile 'org.igniterealtime.smack: smack-android: 4.1.0'' в зависимости от' build.gradle'. Это работает достаточно хорошо, но я не могу изменить исходный код. – Christian

+0

Нет - Smack будет добавлен в проект как банку – Lukas

+0

Редактирование исходного кода API, похоже, не является хорошей практикой - лично, я бы просто пошел с Kotlin и расширил API с помощью желаемых функций;) – Lukas

1

Я не уверен, что рекомендую создать многомодульную сборку из двух проектов. Вероятно, это не сработает, как ожидалось.Вероятно, вам нужно добавить большинство/все модули в smack settings.gradle к вашему собственному settings.gradle. Если вы действительно хотите это сделать, я предлагаю вам использовать prezi-pride, который управляет этим из командной строки.

Я не являюсь пользователем android, поэтому не знаю, какие версии Gradle поддерживают плагин android. Если Android поддерживает Gradle 3.1+, то вы можете использовать новый composite build support. Это, безусловно, самым чистым раствором, и я рекомендую этот подход

Другое решение заключается в создании проектов по отдельности и в проекте сделать

compile fileTree(dir: '../smack/project-1/build/lib', include: '*.jar') 
compile fileTree(dir: '../smack/project-2/build/lib', include: '*.jar') 
// etc 

Еще одним решением является publish the smack artifacts to maven local и ссылаться на них оттуда в проекте , Это, вероятно, будет вторым лучшим решением, если вы не сможете использовать составную сборку

+0

Я добавил все модули в свой 'settings.gradle', например' include ': libs: Smack: smack-integration-test'', а также добавил все в качестве зависимостей модулей (см. (3) в моем вопросе). Без изменений, с той же ошибкой. – Christian

+0

Как я уже сказал ... это может не сработать. Попробуйте (1) композитную сборку, (2) mavenLocal() или (3) prezi-pride –

+0

Я как-то решил мою первоначальную проблему, но наткнулся на следующую (см. Мое редактирование в оригинальном вопросе). Автоматический импорт действительно включил все включенные в 'settings.gradle', как вы сказали, только формат отличается от моей попытки. – Christian

Смежные вопросы