Ответы пользователя по тегу Сборка проектов
  • Как из android-library модуля собрать jar с зависимостями?

    olegvarmy
    @olegvarmy Автор вопроса
    android developer
    Ну, собственно, сам и отвечу
    android.libraryVariants.all { variant ->
        tasks.create(name: "fatJar${variant.name.capitalize()}", type: Jar, dependsOn: assembleRelease) {
            doFirst {
                baseName = variant.name
                destinationDir = file('output')
                duplicatesStrategy = DuplicatesStrategy.EXCLUDE
                from zipTree(tasks.getByName("package${variant.name.capitalize()}Jar").outputs.files.singleFile)
                def closure = { file ->
                    if (file.name.endsWith('.aar')) {
                        println file.name
                        List<File> listJarFiles = zipTree(file).findAll { fileInAar ->
                            fileInAar.name.endsWith('.jar')
                        }
                        def listClassesFilesFromJars = listJarFiles.collect {
                            zipTree(it)
                        }
                        listClassesFilesFromJars
                    } else if (file.name.endsWith('.jar')) {
                        return zipTree(file)
                    }
                }
                from configurations.compile.files.collect(closure)
                from configurations.getByName("${variant.name}Compile").files.collect(closure)
    
            }
        }
    }

    добавляет таск с названием fatJar{variantName}
    каждый таск проходит по всем зависимостям compile и {variantName}Compile, собирает jar и aar- файлы (если файл aar - то из него достается classes.jar + джарники из libs) и все это упаковывается в файл с названием {variantName}.jar

    и второй скрипт, который делает то же самое, только не запаковывает все в fatJar, а собирает все библиотеки в одну директорию
    android.libraryVariants.all { variant ->
        tasks.create(name: "collectJars${variant.name.capitalize()}", type: Copy, dependsOn: assembleRelease) {
            delete file("output/outputJars${variant.name.capitalize()}")
            duplicatesStrategy = DuplicatesStrategy.EXCLUDE
            from tasks.getByName("package${variant.name.capitalize()}Jar").outputs.files.singleFile, {
                rename 'classes.jar', variant.name + "-" + project.version + ".jar"
            }
            def closure = { file ->
                if (file.name.endsWith('.aar')) {
                    println file.name
                    zipTree(file).findAll { fileInAar ->
                        fileInAar.name.endsWith('.jar')
                    }.each { f ->
                        if(f.name == "classes.jar") {
                            from f, {
                                println f.name
                                rename "classes", file.name.substring(0, file.name.lastIndexOf("."))
                            }
                        } else {
                            from f
                        }
    
                    }
                } else if (file.name.endsWith('.jar')) {
                    from file
                }
            }
            configurations.compile.files.collect(closure)
            configurations.getByName("${variant.name}Compile").files.collect(closure)
            into 'output/outputJars' + variant.name.capitalize()
        }
    }
    Ответ написан
    Комментировать
  • Как увеличить скорость компиляции Gradle проекта (Android)?

    olegvarmy
    @olegvarmy
    android developer
    попробуй выполнить сборку с --offline. Это скорее всего происходит из-за того что при каждой сборке gradle начинает резолвить зависимости.
    Ответ написан
    1 комментарий