Немного предыстории, у меня есть пользовательский тип сборки 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
будет существовать, но это также, кажется, отсутствует.
Приветствия для любого понимания.