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

Я пытаюсь скопировать файл БД в ресурсы, основанные на вариантах сборки, для этого я создал задачу в build.gradle (уровень приложения)

 flavorDimensions("default")

    productFlavors {
        dev {
            applicationIdSuffix ".dev"
            buildConfigField("String", "DB_FILE_DIR", '"stage/"')

            delete"$rootProject.projectDir/app/src/main/assets/app_db.db"

        }
        stage {
            applicationIdSuffix ".stage"
            buildConfigField("String", "DB_FILE_DIR", '"stage/"')

            delete "$rootProject.projectDir/app/src/main/assets/app_db.db"

        }
        production {
            applicationIdSuffix ".production"
          delete"$rootProject.projectDir/app/src/main/assets/app_db.db"
        }
    }

    variantFilter { variant ->
        if (variant.buildType.name.equals('release') || variant.buildType.name.equals('debug')) {
            variant.setIgnore(true)
        }
    }

Задача для копирования файлов базы данных.

task copyProductionDB(type: Copy) {
    from file("$rootProject.projectDir/production/app_db.db")
    into "$rootProject.projectDir/app/src/main/assets/"
    println("Production DB copied")
}
task copyStageDB(type: Copy) {
    from file("$rootProject.projectDir/stage/app_db.db")
    into "$rootProject.projectDir/app/src/main/assets/"
    println("Stage DB copied")
}

И моя проблема заключается в переключении с одного варианта на другой, я должен заменить файл db в папку assets.Как я могу этого добиться.Пожалуйста, помогите мне.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Я решил мою проблему с помощью следующего кода.

 tasks.whenTaskAdded { task ->
        if (task.name ==~ /preDevMyAppBuild.*/) {
            task.doFirst() {
                copyDB("stage")
            }
        } else if (task.name ==~ /preStageMyAppBuild.*/) {
            task.doFirst() {
                copyDB("stage")
            }
        } else if (task.name ==~ /preProductionMyAppBuild.*/) {
            task.doFirst() {
                copyDB("production")
            }
        }
    }

    def copyDB(copyType) {
        copy {
              from file("$rootProject.projectDir/"+copyType+"/app_db.db")
              into "$rootProject.projectDir/app/src/main/assets/"
              println(copyType+" DB copied")
             }
    }
0 голосов
/ 13 ноября 2018

Вы можете проверить вариант приложения и получить его директорию:

android.applicationVariants.all { variant ->
    // get directory
    variant.dirName // it returns debug/dev or relese/dev , debug/stage or relese/stage
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...