Как включить зависимости в мою библиотеку Android

Я пишу Android SDK, и теперь я хочу его распространять, но у меня проблемы с его зависимостями. Я использую Gradle и Android Studio.

Мой sdk зависит от volley и gson, и я добавляю их как банки в свой sdk. Всякий раз, когда я пытаюсь создать aar или jar для использования в отдельном клиентском приложении, я всегда получаю сбой, когда мой SDK пытается сослаться на залп, поскольку он не был включен ни в aar, ни в jar. Любые идеи о том, как я должен это делать? Я без особого успеха пытался создать толстые банки.

Я также пытался использовать удаленные зависимости, как показано ниже, но даже после сборки gradle в клиентском приложении ни volley, ни gson по-прежнему не включены. В настоящее время это то, что у меня есть в моем sdk build.gradle.

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.mcxiaoke.volley:library-aar:1.0.0'
    compile 'com.google.code.gson:gson:2.3'
}

затем в клиентской сборке gradle у меня есть

repositories {
    flatDir {
        dirs 'libs'
    }
}


dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile(name:'mysdk-1.0.0', ext:'aar')
}

Я использую ./gradlew clean build для создания aar и jar моего sdk. Может ли кто-нибудь сказать мне, как правильно включить зависимости в мою собственную библиотеку?


person glogic    schedule 02.09.2014    source источник
comment
Это очень краткий и ясный вопрос. Он отражает именно то, что я хотел спросить, но не пришлось, потому что я нашел ваш! Престижность.   -  person Michael Krause    schedule 08.01.2016
comment
Как вы это решили? Принятый ответ не сработал для меня.   -  person gaurav jain    schedule 26.02.2016


Ответы (2)


В вашем клиенте измените блок зависимостей следующим образом:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile(name:'mysdk-1.0.0', ext:'aar') {
        transitive = true
    }
}

Это также должно подтянуть ваши транзитивные зависимости.

person joeblubaugh    schedule 24.10.2014
comment
Где мне вызвать эту компиляцию (имя: доб:)? Я пытаюсь вызвать его в build.gradle моего клиента, и он выдает ошибку на mysdk-1.0.0. Я думал, что mysdk-1.0.0 — это просто метка, которая будет присвоена полученному jar/aar. Что я должен делать? - person user2498079; 25.02.2015
comment
Это не работает для меня. Есть ли в файлах AAR информация о зависимостях? Разве файл POM не требуется? - person treesAreEverywhere; 17.07.2015

Если вы хотите включить транзитивные зависимости вашей библиотеки в клиентское приложение, вам необходимо создать соответствующий пакет, совместимый с maven, который содержит файл pom.xml. Этот pom будет описывать зависимости вашей библиотеки, чтобы клиент мог транзитивно извлекать эти зависимости, когда они включают вашу библиотеку.

См. это руководство: http://blog.blundell-apps.com/locally-release-an-android-library-for-jcenter-or-maven-central-inclusion/

Вам не нужно никуда загружать артефакт во время разработки, просто используйте локальный репозиторий maven в качестве цели и используйте mavenLocal() в качестве репозитория для своего клиентского приложения. Таким образом, вы сможете ссылаться на свою библиотеку как на стандартную зависимость maven, используя
compile 'com.mysdk:mysdk:1.0.0'

person Balazs Banyai    schedule 09.09.2015
comment
Мертвая ссылка, теперь это http://blog.blundellapps.co.uk/locally-release-an-android-library-for-jcenter-or-maven-central-inclusion/ - person ocramot; 11.02.2018