Откат Android Gradle к другому варианту сборки

У меня есть четыре варианта сборки, A, B, C и D. Для конкретной деятельности у меня есть общий код в базовом классе в основных исходных наборах. Я хочу использовать дополнительные функциональные возможности, чтобы A & B имели такие же дополнительные функциональные возможности, а C & D - те же функциональные возможности, которые отличаются от A & B. Я смог сделать это путем копирования и вставки расширяющего класса в исходные наборы для A & B и C & D соответственно; однако, это делает обслуживание проблемой. Я не могу объединить варианты A & B или C & D, потому что они имеют другие важные различия. Как включить класс таким образом, чтобы он только в A и B ссылался на него и только на C и D ссылался на него. Я попытался добавить исходные наборы java, но потом не смог найти другие классы или другие модули.

2 ответа

Решение

Я смог решить эту проблему, создав две новые директории E & F. Затем я добавил наборы источников для A & B, чтобы быть их текущими наборами источников, а E и для C & D добавили F.

sourceSets {
    A {
        java.srcDirs = ['src/A/java', 'src/public/E']
    }
    B {
        java.srcDirs = ['src/B/java', 'src/public/E']
    }
    C {
        java.srcDirs = ['src/C/java', 'src/internal/F']
    }
    D {
        java.srcDirs = ['src/D/java', 'src/internal/F']
    }
}

Вы должны проверить это: https://developer.android.com/studio/build/build-variants#resolve_matching_errors

      // In the app's build.gradle file.
android {
    flavorDimensions 'tier'
    productFlavors {
        paid {
            dimension 'tier'
            // Because the dependency already includes a "paid" flavor in its
            // "tier" dimension, you don't need to provide a list of fallbacks
            // for the "paid" flavor.
        }
        free {
            dimension 'tier'
            // Specifies a sorted list of fallback flavors that the plugin
            // should try to use when a dependency's matching dimension does
            // not include a "free" flavor. You may specify as many
            // fallbacks as you like, and the plugin selects the first flavor
            // that's available in the dependency's "tier" dimension.
            matchingFallbacks = ['demo', 'trial']
        }
    }
}

и дополнительную документацию по адресу https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/dsl/ProductFlavor#matchingfallbacks .

Другие вопросы по тегам