Невозможно построить: Как добавить Android Конфигурация сборки для нового модуля - PullRequest
4 голосов
/ 05 февраля 2020

Теперь я конвертирую свой код android в модульный архитектурный подход. Возникают проблемы при попытке добавить зависимость от модуля "app" из модуля "chat".

У меня есть следующая конфигурация сборки для модуля "app".

android {

lintOptions {
    checkReleaseBuilds false
    abortOnError false
}

signingConfigs {
    companydevconfig {
        keyAlias 'company'
        keyPassword '123456'
        storeFile file('../app/jksFils/company_dev.jks')
        storePassword '123456'
    }
    companyqaconfig {
        keyAlias 'company'
        keyPassword '123456'
        storeFile file('../app/jksFils/company_qa.jks')
        storePassword '123456'
    }
    companyprodconfig {
        keyAlias 'company'
        keyPassword '123456'
        storeFile file('../app/jksFils/release.keystore')
        storePassword '123456'
    }
}

compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
    applicationId "com.company.employee.dev"
    minSdkVersion 21
    targetSdkVersion 28
    versionCode 1
    versionName "1.13"
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}
aaptOptions {
    cruncherEnabled = false
}
testOptions {
    unitTests.returnDefaultValues = true
}
buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
        testCoverageEnabled true
    }

}

sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
}

dataBinding {
    enabled = true
}
packagingOptions {
    exclude 'META-INF/ASL2.0'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/rxjava.properties'
}
flavorDimensions "company"
productFlavors {
    dev {
        dimension "company"
        applicationId "com.company.employee.dev"
        versionCode 277
        versionName "2.0.0.16"
        signingConfig signingConfigs.companydevconfig

        buildConfigField 'String', 'BASEURL', '"https://dev.company.com"'
    }
    qa {
        dimension "company"
        applicationId "com.company.employee.qa"
        versionCode 225
        versionName "2.0.2.2"
        signingConfig signingConfigs.companyqaconfig

        buildConfigField 'String', 'BASEURL', '"https://qa.company.com"'

    }
    prod {
        dimension "company"
        applicationId "com.company.employee.prod"
        versionCode 38
        versionName "1.5.20"
        signingConfig signingConfigs.companyprodconfig

        buildConfigField 'String', 'BASEURL', '"https://cloud.company.com"'

    }
}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
testOptions {
    unitTests.returnDefaultValues = true
    unitTests.all {
        setIgnoreFailures(true)
        jacoco {
            includeNoLocationClasses = true
        }
    }
  }
}

Теперь я добавил новый модуль "чат". И он имеет следующий код в конфигурации сборки.

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
compileSdkVersion 29
buildToolsVersion "29.0.2"

defaultConfig {
    applicationId "com.company.employee.chat"
    minSdkVersion 21
    targetSdkVersion 29
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
    }
}
sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
}

dataBinding {
    enabled true
}

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

kotlinOptions {
    jvmTarget = "1.8"
}
}

dependencies {
implementation project(':app')

implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

Когда я пытаюсь собрать, я получаю следующую ошибку.

ERROR: Unable to resolve dependency for ':chat@debug/compileClasspath': Could not 
resolve project :app.
Show Details
Affected Modules: chat


ERROR: Unable to resolve dependency for ':chat@debugAndroidTest/compileClasspath': Could not 
resolve project :app.
Show Details
Affected Modules: chat


ERROR: Unable to resolve dependency for ':chat@debugUnitTest/compileClasspath': Could not 
resolve project :app.
Show Details
Affected Modules: chat


ERROR: Unable to resolve dependency for ':chat@release/compileClasspath': Could not resolve 
project :app.
Show Details
Affected Modules: chat


ERROR: Unable to resolve dependency for ':chat@releaseUnitTest/compileClasspath': Could not 
resolve project :app.
Show Details
Affected Modules: chat

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

Вот некоторые вещи, которые следует учитывать

  1. Существуют различия между App Module и Library Module.

Библиотечный модуль соответствует .aar/file. Однако Модуль приложения скомпилирован в APK. Это означает, что вы не можете импортировать Модуль приложения как зависимость от Модуль библиотеки . Поэтому удалите эту строку из библиотечного модуля:

 implementation project(':app')
Убедитесь, что библиотека указана в верхней части вашего settings.gradle.

Откройте файл settings.gradle модуля приложения и убедитесь, что в списке есть ваша библиотека

include ':app', ':chat'
импорт библиотечного модуля в ваш модуль приложения сборка сборки

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

dependencies {
implementation project(':chat')
}

Most Важно: Создать Android библиотеку

0 голосов
/ 11 февраля 2020

Возможно, вы импортируете Приложение вместо Модуль . Ну, вы также можете изменить его в модуле Gradle.

Изменить

apply plugin: 'com.android.application'

на

apply plugin: 'com.android.library'

Вам также необходимо удалить applicationId из Gradle.

Затем в зависимости app.gradle ,

вместо

проект реализации (': lib-name')

Я использовал,

проект внедрения ( путь: ': lib-name', конфигурация: 'default')

Например: проект реализации (путь: ': myService', конфигурация:
'default')

И это сработало как шарм. :)

Я добавил модуль зависимости со службой и не делаю библиотеку как часть проекта AOSP.

На всякий случай, это кому-то помогает.

...