Сборка Android не удалась с артефактом - отсутствуют зависимости - PullRequest
0 голосов
/ 02 мая 2018

В моем проекте Android есть субмодуль, который находится в git & artifactory. В зависимости gradle подмодуля они включены.

kapt 'com.google.dagger:dagger-compiler:2.15'
implementation 'com.google.maps.android:android-maps-utils:0.5'
implementation 'com.airbnb.android:lottie:2.5.3'

Локальная версия сборки релиза (когда подмодуль извлекается из git) собирается нормально. Но сборка удаленного выпуска (где подмодуль извлекается из артефакта) не работает.

Дистанционная версия:

release {
    debuggable false
    minifyEnabled true
    useProguard true
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    signingConfig signingConfigs.release
    multiDexKeepProguard file('multidex.pro')
}

Ошибка в том, что на некоторые библиотечные файлы нельзя ссылаться.

не удается найти кинжал суперкласса или интерфейса .internal.Factory Предупреждение: _ProvideFakeTrackerFactory: не удается найти суперкласс или интерфейс dagger.internal.Factory Предупреждение: _ProvidePropMapPresenterFactory: не удается найти суперкласс или интерфейс dagger.internal.Factory Предупреждение:: не может найти указанный классовый кинжал. P rovides Предупреждение:: не может найти указанный класс кинжал .Модуль Предупреждение: .FirebaseTracker: не удается найти указанный класс Предупреждение com.google.firebase.analytics.FirebaseAnalytics: .FirebaseTracker $ subscribeToScreenEvents $ 1: не могу найти указанный класс com.google.firebase.analytics.FirebaseAnalytics Предупреждение:.: не удается найти указанный класс com.airbnb.lottie.LottieAnimationView Предупреждение: .DetailFragment_MembersInjector: не может найти ссылку Класс dagger.MembersInjector Предупреждение: .map.DaggerPropMapComponent $ Builder: не могу найти ссылка на класс dagger.internal.Preconditions Предупреждение: .MapFragment: не удается найти указанный класс com.google.android.gms.location.LocationServices Предупреждение. .MapFragment: не удается найти указанный класс com.google.android.gms.location.FusedLocationProviderApi

Так как эти библиотечные файлы уже находятся в зависимостях подмодуля подмодуля, как я могу успешно собрать их без повторного выделения этих библиотек в подзарядке приложения?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Попробуйте использовать это gradle artifactory plugin, Я надеюсь, что это поможет вам. см. Ссылку

Плагин Gradle Artifactory позволяет развертывать артефакты сборки и информацию о сборке в Artifactory, а также разрешать зависимости сборки из Artifactory.

Фрагмент сценария сборки для использования во всех версиях Gradle

    buildscript {
      repositories {
        jcenter()
      }
      dependencies {
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:latest.release"
      }
    }
    apply plugin: "com.jfrog.artifactory"

Фрагмент сценария сборки для использования в Gradle 2.1 и выше

    plugins {
      id "com.jfrog.artifactory" version "latest.release"
    }

Для получения дополнительной помощи вы можете обратиться по ссылке.

0 голосов
/ 08 мая 2018

Вы говорите о переходных зависимостях. Это распространенная ошибка компиляции для многих инженеров.

Помните, что любые указатели репозитория, объявленные в дочерних подмодулях, должны также быть объявлены в родительском приложении. URL репозитория не включены в родительские модули. Поэтому, если у вас есть собственный репозиторий maven, к которому вы обращаетесь из дочернего модуля, вам нужно будет продублировать этот URL в родительском приложении.

Кроме того, если дочерний модуль имеет зависимости, они известны как переходные зависимости или «зависимости моих зависимостей». Они не включаются в окончательно скомпилированный файл APK или AAR. Они исключены по умолчанию. Это нормальное поведение по умолчанию.

Конечно, вы можете создать файл FAT-JAR или FAT-AAR для включения транзитивных зависимостей, но обычно это плохая практика, и я бы не рекомендовал это.

Если вы генерируете правильные файлы Maven, вы можете просто добавить в строку:

myDependencyNamespaceinGradle { переходный = верно }

этот флаг говорит ему включить зависимости этого зависимого. ВАЖНЫЙ* Это работает, только если у вас есть правильные структурированные файлы maven в дочернем и репозитории хоста maven, чтобы знать, какие дочерние зависимости нужно включить.

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

при условии моей зависимости вместо скомпилировать мою зависимость.

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

Другим важным фактором является обеспечение правильной настройки файла proguard, чтобы не удалять аннотации и код на основе отражений. Кинжал должен иметь страховку в этих файлах, чтобы их нельзя было удалить во время минимизации. Пожалуйста, подтвердите это путем отключения минификации и proguard при выпуске. Если он работает нормально, значит, ваша проблема связана с файлом proguard, если проблема все еще существует, скорее всего, это ваше управление переходными зависимостями.

Надеюсь, это поможет, пожалуйста, дайте мне знать, если вам нужна дополнительная ясность.

...