2016-01-20 2 views
1

Я реализовал проект библиотеки под названием «близость» в Android Studio и создал «.aar». Этот арант я добавил в новый тестовый проект в качестве модуля, как указано здесь: https://stackoverflow.com/a/24894387/2791503 Кроме того, я включил модуль в зависимость от транзитивного флага, как это было предложено здесь: https://stackoverflow.com/a/25730092/2791503 Это может быть градиентом файла для новый TestProject:AAR Transitive Dependency Google Location Service

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    compile(project(':proximity')) { 
    transitive=true 
} 

Тем не менее, когда я запускаю приложение он говорит мне, что он не может найти класс Google Location API, который является зависимость моего модуля библиотеки.

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/api/GoogleApiClient$Builder;

Как я могу заставить gradle включить эти транзитивные зависимости моего библиотечного модуля?

EDIT: Вот Gradle файл сборки оригинального проекта библиотеки:

dependencies { 
    //integration tests 
    androidTestCompile 'com.android.support.test:runner:0.4.1' 
    // Set this dependency to use JUnit 4 rules 
    androidTestCompile 'com.android.support.test:rules:0.4.1' 
    // Set this dependency to build and run Espresso tests 
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1' 
    // Set this dependency to build and run UI Automator tests 
    androidTestCompile 'com.android.support.test.uiautomator:uiautomator- v18:2.1.2' 
    androidTestCompile 'com.android.support:support-annotations:23.1.1' 

    //local unit testing 
    testCompile 'junit:junit:4.1' 

    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    //estimote sdk 
    compile 'com.estimote:sdk:[email protected]' 
    //google location api(GPS) 
    compile 'com.google.android.gms:play-services-location:8.4.0' 
    //Google Guave Java Util 
    compile 'com.google.guava:guava:18.0' 
    //custom BeSpoon library for android 
    compile project(':bespoonlibrary') 
} 

И это как Gradle файл сборки выглядит после импорта библиотеки в качестве модуля, ссылающийся на AAR:

configurations.create("default") 
artifacts.add("default", file('app-release.aar')) 
+1

Локальные проекты библиотек Android обычно обеспечивают их зависимости автоматически. –

+0

звучит логично, но, к сожалению, это не работает для меня –

+0

Как вы определили зависимости библиотеки близости? –

ответ

0

Итак, я нашел решение, которое работает для меня, но все же это я не то, на что я надеялся ... так что дайте мне знать, есть ли у кого-то лучшее решение. В любом случае это может помочь кому-то: У меня есть две библиотеки, одна внешняя библиотека, сам проект библиотеки и один внутренний libaray, который является зависимостью внешней библиотеки. Кроме того, каждая библиотека имеет свои собственные зависимости, например, внутренняя библиотека ссылается на службу google-location-service.

Я пробовал gradlew assemble, который генерирует * .aar-файл внешней библиотеки. Но все, что было в ааре, было внешней библиотекой, но без внутренней библиотеки и всех других зависимостей. В этом обсуждении говорится, что до сих пор нет способа справиться с этим: How to export AAR including its dependencies?

Нет смысла использовать этот аран без всех зависимостей ... поэтому мне пришлось найти другой путь. В Android TestProject, где должна быть включена внешняя библиотека, нажмите File->Import Module->"Select the external library"->Finish, и все ваши зависимости там, включая внутреннюю библиотеку.

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