Как добавить пользовательскую задачу в сборку Android Gradle для mergeJniLibFolders - PullRequest
0 голосов
/ 14 ноября 2018

Немного предыстории, у меня есть пользовательский тип сборки Android под названием «prebuilt», который предназначен для развертывания в образ системы Android. Мне нужны пользовательские задачи gradle для изменения ресурсов и папок jniLibs, чтобы они доставлялись отдельно от apk (например, my-app-prebuilt.apk, my-app-prebuilt-assets.zip, my-app-rebuilt-libs. застежка-молния). Я не хочу изменять отладку или выпускать buildTypes для обычного развертывания.

Разобрать шаг активов было довольно легко, когда я наткнулся на правильное задание mergeAssets, чтобы изменить:

buildTypes {
        applicationVariants.all { variant ->
            if (variant.buildType.name == 'prebuilt') {
                variant.mergeAssets.doLast {
                    // Delete from prebuilt build type. It will be delivered in parallel.
                    delete(fileTree(dir: variant.mergeAssets.outputDir, includes: ['**/somestuff/*']))
                }
                // I want mergeJniLibFolders but this doesn't seem to exist?
                variant.mergeJniLibFolders.doLast {
                    delete(fileTree(dir: variant.mergeJniLibs.outputDir, includes: ['**/*.so']))
                }
            }
}

Я получаю сообщение об ошибке для свойства mergeJniLibFolders:

Не удалось получить неизвестное свойство 'mergeJniLibFolders' для объекта типа com.android.build.gradle.internal.api.ApplicationVariantImpl.

Я ожидал, что mergeJniLibFolders или mergePrebuiltJniLibFolders можно изменить, чтобы выполнить второй шаг удаления библиотек. Я начинаю порвать через gradle ApplicationVariantImpl.

Кроме того, объект variant необходим для того, чтобы знать outputDir. Некоторое время я думал, что смогу сделать task stripPrebuiltAssets << { dependsOn: mergePrebuiltMergeAssets, ...}, но у меня не было бы варианта объекта. Это также довольно смущает меня.

Я чувствую себя в темноте и не совсем понимаю, что я могу "сделать" с помощью Android Plugin DSL. Я прочитал ссылку несколько раз, и у меня есть приличное понимание AppExtension и свойств, которые можно изменить, но как это соотносится с сотней задач в дереве градлов? Кажется, мне не хватает ресурса, чтобы лучше это понять.

Плохое автозаполнение моей Android Studio также разочаровывает. Кажется, идентифицировать один вариант автозаполнения, только если я уже использовал его. Я использую

  • Android Studio 3.2.1
  • Gradle 4.10.2
  • com.android.tools.build: Gradle: 3.2.1

Бонусный вопрос - это архивирование активов и jniLibs, которые я раздеваю в двух правилах, чтобы они были доступны вместе с my-app-prebuilt.apk. Я примерно понимаю, что мне нужно задание типа Zip, которое заархивирует папку /build/intermediates/transforms/mergeJniLibs/prebuilt/0/lib/ и затем удалит папку. Я также ожидаю, что variant.mergeJniLibs.outputDir будет существовать, но это также, кажется, отсутствует.

Приветствия для любого понимания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...