Intereting Posts
Проблема ширины экрана TableLayout для Android Свойство Kotlin: «Тип параметра свойства должен использоваться в типе приемника» Как читать голосовые сообщения программно в Android Настройка альфы для рисования через xml ActionNext не работает с многострочным EditText в android Не удается использовать вкладки с Шерлоком «Начать развертывание до бета-тестирования» отключено в консоли разработчика Play Маркета SQLite, как получить все имена таблиц в базе данных? Как показать диалог прогресса, когда страница HTML загружена в WebView Применяет процессор в фоновом режиме, ничего не делая Как установить текущую временную метку для каждой строки вставки и обновления в андроиде realm .SQLiteException: рядом с ",": синтаксическая ошибка (код 1): при компиляции: Как получить быстрый файл Хеширующий алгоритм для больших файлов на мобильном устройстве Apkbuilder находит дубликат файла при добавлении powermock в проект тестирования Android Ошибка при создании подпроекта android при использовании команды android для работы с телефоном.

Конфликт Android Gradle Dependency с внутренней версией, предоставляемой Android

Возможный дубликат этого вопроса , хотя это не помогло мне.

Я ненавижу копировать / вставлять весь исходный код, но кажется, что в gradle нет никакого способа: (так как это третий день, который меня укомплектовывает, я кладу свои коды сюда и извиняюсь за то, что вы так много кода …

У меня есть три проекта в моем основном проекте. Поэтому мои настройки.gradle выглядят так:

include ':booking-sdk' include ':booking-app-lib' include ':booking-app' 

И мой основной build.gradle (в корне проекта) выглядит так:

 buildscript { repositories { jcenter() mavenCentral() maven { url 'http://download.crashlytics.com/maven' } } dependencies { classpath 'com.android.tools.build:gradle:1.1.0' classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.+' classpath 'com.github.jcandksolutions.gradle:android-unit-test:2.1.1' } } allprojects { repositories { jcenter() mavenCentral() maven { url 'http://download.crashlytics.com/maven' } maven { url 'https://zendesk.artifactoryonline.com/zendesk/repo' } } } ext { ANDROID_SUPPORT = 'com.android.support:support-v4:20.0.0' CRASHLYTICS = 'com.crashlytics.android:crashlytics:1.+' androidConfiguration = { compileSdkVersion 21 buildToolsVersion '21.1.2' defaultConfig { minSdkVersion 14 targetSdkVersion 21 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } packagingOptions { exclude 'values/com_crashlytics_export_strings.xml' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'LICENSE.txt' } lintOptions { abortOnError false absolutePaths false lintConfig file("lint.xml") } sourceSets { main { manifest.srcFile 'src/main/AndroidManifest.xml' java.srcDirs = ['src/main/java'] resources.srcDirs = ['src/main/resources'] aidl.srcDirs = ['src/main/java'] renderscript.srcDirs = ['src/main/java'] res.srcDirs = ['src/main/res'] assets.srcDirs = ['src/main/assets'] java { exclude 'com/booking_1/passenger/LibraryConfigurationConstants.java' exclude 'com/booking_2/passenger/ProductFlavorConstants.java' } } } signingConfigs { debug { storeFile file("$rootProject.projectDir/debug.keystore") storePassword "android" keyAlias "androiddebugkey" keyPassword "android" } release { storeFile file("$rootProject.projectDir/booking-androd-prod.keystore") storePassword System.getenv("PASSWORD") keyAlias System.getenv("ALIAS") keyPassword System.getenv("PASSWORD") } } } } 

Для выполнения модульного теста с помощью теста Robolectric и Instrument я следую проекту Decard-Gradle, который я тестировал и успешно работает.

booking-sdk – это проект, который содержит бизнес-логику приложения. Это выглядит так:

 -booking-sdk -/build -/src - booking_1 (flavour 1) - booking_2 (flavour 2) - main - test - build.gradle 

У меня есть одно имя пакета под /src/main/java и /src/test/java . Наконец, build.gradle для booking-sdk выглядит так:

 apply plugin: 'com.android.library' android androidConfiguration android { publishNonDefault true productFlavors { booking_1 { } booking_2 { } } } dependencies { repositories { mavenCentral() } compile ANDROID_SUPPORT compile CRASHLYTICS compile 'com.google.code.gson:gson:2.3' compile 'com.squareup.retrofit:retrofit:1.7.0' compile 'com.google.android.gms:play-services:6.5.87' compile 'com.squareup.okhttp:okhttp:2.1.0' compile 'com.squareup.okhttp:okhttp-urlconnection:2.1.0' compile 'com.squareup.picasso:picasso:2.4.0' compile 'com.squareup:otto:1.3.5' compile 'org.apache.commons:commons-lang3:3.3.2' compile files('src/main/libs/GeoPIP4J.jar') // Robolectric testCompile 'junit:junit:4.12' testCompile 'org.robolectric:robolectric:2.4' testCompile 'org.hamcrest:hamcrest-core:1.1' testCompile 'org.hamcrest:hamcrest-library:1.1' testCompile 'org.hamcrest:hamcrest-integration:1.1' // TODO: requires special build of robolectric right now. working on this... androidTestCompile('org.robolectric:robolectric:2.4') { exclude module: 'classworlds' exclude module: 'commons-logging' exclude module: 'httpclient' exclude module: 'maven-artifact' exclude module: 'maven-artifact-manager' exclude module: 'maven-error-diagnostics' exclude module: 'maven-model' exclude module: 'maven-project' exclude module: 'maven-settings' exclude module: 'plexus-container-default' exclude module: 'plexus-interpolation' exclude module: 'plexus-utils' exclude module: 'wagon-file' exclude module: 'wagon-http-lightweight' exclude module: 'wagon-provider-api' } } 

Когда я запускаю чистую команду, результат:

  ./gradlew :booking-sdk:clean WARNING: Dependency commons-logging:commons-logging:1.1.1 is ignored for booking_1DebugUnitTest as it may be conflicting with the internal version provided by Android. In case of problem, please repackage it with jarjar to change the class packages WARNING: Dependency org.apache.httpcomponents:httpclient:4.0.3 is ignored for booking_1DebugUnitTest as it may be conflicting with the internal version provided by Android. In case of problem, please repackage it with jarjar to change the class packages WARNING: Dependency commons-logging:commons-logging:1.1.1 is ignored for booking_1ReleaseUnitTest as it may be conflicting with the internal version provided by Android. In case of problem, please repackage it with jarjar to change the class packages WARNING: Dependency org.apache.httpcomponents:httpclient:4.0.3 is ignored for booking_1ReleaseUnitTest as it may be conflicting with the internal version provided by Android. In case of problem, please repackage it with jarjar to change the class packages WARNING: Dependency commons-logging:commons-logging:1.1.1 is ignored for booking_1DebugUnitTest as it may be conflicting with the internal version provided by Android. In case of problem, please repackage it with jarjar to change the class packages WARNING: Dependency org.apache.httpcomponents:httpclient:4.0.3 is ignored for booking_1DebugUnitTest as it may be conflicting with the internal version provided by Android. In case of problem, please repackage it with jarjar to change the class packages WARNING: Dependency commons-logging:commons-logging:1.1.1 is ignored for booking_1ReleaseUnitTest as it may be conflicting with the internal version provided by Android. In case of problem, please repackage it with jarjar to change the class packages WARNING: Dependency org.apache.httpcomponents:httpclient:4.0.3 is ignored for booking_1ReleaseUnitTest as it may be conflicting with the internal version provided by Android. In case of problem, please repackage it with jarjar to change the class packages :booking-sdk:clean BUILD SUCCESSFUL Total time: 4.83 secs 

Ошибка при запуске ./gradlew :passenger-sdk:check код, чтобы увидеть результат тестирования устройства. Сначала я получаю выше выходы, а затем много ошибок:

 ... :booking-sdk:compileBookingDebugUnitTestJava /Users/admin/Desktop/android/booking/booking-sdk/src/test/java/com/booking/passenger/db/dao/BookingDAOTest.java:3: error: package com.booking.passenger.db.providers does not exist import com.booking.passenger.db.providers.BookingContentProvider; 

В основном это говорит о том, что все мои импорты не существуют, пока они существуют, и у меня нет ошибок в моем кодовом файле, а все импортные данные распознаются классом.

Любая идея будет оценена по достоинству. Благодарю.

Хорошо, Geadle f * king horrible, хотя это мощный инструмент.

Для вашей справки, если вы попадаете в такую ​​же проблему, это мой опыт. Поскольку я не уверен, что мои выводы абсолютно правильны, пожалуйста, исправьте меня, если я ошибаюсь.

  • Я обнаружил, что поставить тестовую папку в библиотечные проекты невозможно. Я хотел иметь src/test/java для всех библиотек проектов и запускать свои тестовые примеры, например ./gradlew :booking-sdk:test . Однако, переместив этот пакет в основное приложение (в моем случае booking-app ), а также перемещая связанные файлы из build.gradle booking-sdk чтобы создать.gradle booking-app я мог видеть результаты теста.
  • Я обнаружил, что модули exclude из зависимостей не работают. Решение, которое я нашел, использует конфигурацию.

Как это:

 configurations { all*.exclude module: 'classworlds' all*.exclude module: 'commons-logging' all*.exclude module: 'httpclient' all*.exclude module: 'maven-artifact' all*.exclude module: 'maven-artifact-manager' all*.exclude module: 'maven-error-diagnostics' all*.exclude module: 'maven-model' all*.exclude module: 'maven-project' all*.exclude module: 'maven-settings' all*.exclude module: 'plexus-container-default' all*.exclude module: 'plexus-interpolation' all*.exclude module: 'plexus-utils' all*.exclude module: 'wagon-file' all*.exclude module: 'wagon-http-lightweight' all*.exclude module: 'wagon-provider-api' } 

Надеюсь, поможет.