Как я могу использовать один модуль или библиотеку для конкретного продукта - PullRequest
0 голосов
/ 17 октября 2018

У меня есть проект Android с пятью вариантами продукта:

 productFlavors {
    'Dev' {
        manifestPlaceholders = [appName: "Product"]
    }

    'Diamond' {
        manifestPlaceholders = [appName: "Product-Diamond"]
        applicationId GROUP.toString() + ".oc"
    }

    'Gold' {
        manifestPlaceholders = [appName: "Product-Gold"]
        applicationId GROUP.toString() + ".Gold"
    }

    'Silver' {
        manifestPlaceholders = [appName: "Product-Silver"]
        applicationId GROUP.toString() + ".Silver"
    }

    'Bronze' {
        manifestPlaceholders = [appName: "Product-bronze"]
        applicationId GROUP.toString() + ".bronze"
    }
 }

И у меня есть одно имя модуля как premimum, которое я включаю в свой основной проект, используя:

dependencies {
 implementation project(path: ':premimum')
}

Проблема, с которой я сталкиваюсь, заключается в том, что я просто хочу использовать этот модуль premimum, внутри Dev и Diamond, я хочу добавить зависимость premimum только для этих двух типов, как можноЯ делаю это.

Мой файл Gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.binarybuff.appgo"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    flavorDimensions "default"
    productFlavors {
        Dev {
            manifestPlaceholders = [appName: "Product"]
        }

        Diamond {
            manifestPlaceholders = [appName: "Product-Diamond"]
            applicationId "com.binarybuff.appgo" + ".oc"
        }

        Gold {
            manifestPlaceholders = [appName: "Product-Gold"]
            applicationId "com.binarybuff.appgo" + ".Gold"
        }

        Silver {
            manifestPlaceholders = [appName: "Product-Silver"]
            applicationId "com.binarybuff.appgo" + ".Silver"
        }

        Bronze {
            manifestPlaceholders = [appName: "Product-bronze"]
            applicationId "com.binarybuff.appgo" + ".bronze"
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//    implementation project(path: ':premium')
//    DiamondImplementation project(":premium")
    DiamondImplementation project(path: ':premium' )
}

Я уже искал это и обнаружил: Публикация библиотеки

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

Я перешел по ссылкам выше, но не смог.пожалуйста помоги.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Чтобы настроить зависимость для конкретного варианта сборки, вы можете добавить префикс имени варианта сборки перед ключевым словом реализации, как показано в следующем примере:

dependencies {
    // Adds the local "mylibrary" module as a dependency to the "free" flavor.
    freeImplementation project(":mylibrary")
}

измените файл build.gradle, как в примере выше.

Отредактировано:

Dev {  //not 'Dev'
    manifestPlaceholders = [appName: "Product"]
}
0 голосов
/ 17 октября 2018
dependencies {
 implementationPremium project(path: ':premimum')
}

Вы можете сделать это, написав имя-варианта + реализацию .Ваш проект может не скомпилироваться, если исходные каталоги подходят для ваших частичных зависимостей.

Вы можете избежать этого, написав

dependencies {
 provided project(path: ':premimum')
}

Но убедитесь, что не выполняете его для вариантов, у которых этого не былов противном случае у вас есть ClassNotFoundException

...