Android Gradle Plugin 1.1.0 - getNdkFolder() больше не найден, любая замена?

Я только что обновил плагин android Gradle до 1.1.0 с 1.0.0, и я получил эту ошибку:

Нет подписи метода: com.android.build.gradle.LibraryPlugin.getNdkFolder() применимо для типов аргументов:(): []

Я попытался найти diff от Gradle plugin 1.0.0 до 1.1.0, но не смог найти нигде в сети.

Кажется, что метод getNdkFolder был либо изменен, либо удален.

Есть ли замена? Или любой другой способ получить NdkFolder?

Я использую этот метод следующим образом:

def ndkDir = project.plugins.findPlugin('com.android.library').getNdkFolder()

Я также опубликовал проблему с командой разработчиков в треевом треке для Android: https://code.google.com/p/android/issues/detail?id=152810

Спасибо!

Ответ 1

Вы можете сделать это следующим образом:

plugins.getPlugin('com.android.library').sdkHandler.getNdkFolder()

Ответ 2

Правильный путь - android.ndkDirectory

Отмена от android.plugin.ndkFolder до android.ndkDirectory была задокументирована в техническом документе Миграция Gradle Проекты на версию 1.0.0. Кроме того, вы должны обновить плагин Android до версии 2.3.0.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0'
    }
}

sdkFolder является внутренним и, скорее всего, перестанет работать так же, как ndkFolder перестанет работать.

Что касается экспериментальных ветвей

Поиск вокруг, плагин достаточно зрелый, у вас возникнут проблемы с поиском причин использовать экспериментальные ветки с NDK.

Существует некоторая дискуссия об экспериментальной версии взлома плагина ndkDirectory, которая является документированным способом доступа к этому значению после 1.1. Если это изменится в выпущенной версии, я обновлю свой ответ, в то же время, если вы используете экспериментальные плагины, вы можете взломать эту ошибку/функцию, используя ответ @Alex Cohn.

Ответ 4

Если в файле build.gradle вы, вероятно, можете использовать это сейчас, когда ссылка на ошибку была отмечена как исправленная.

project.android.ndkDirectory 

Если вы используете настраиваемую задачу или плагин, вы захотите использовать этот

    def androidPluginExtension = project.getExtensions().getByName("android");
    // Use this for easily viewing the properties available in the extension.
    androidPluginExtension.properties.each { Object key, Object value ->
        logger.info("Extensionprop: ${key} ${value}")
    }
    String ndkDir = androidPluginExtension.getProperties().get("ndkDirectory");
    System.out.println("Using ndk dir: ${ndkDir}");

Но помните, что Android-плагин должен был быть инициализирован, поэтому это всегда будет работать в методе выполнения задачи, но может не сработать, если Gradle еще не разобрал Android DSL еще во время Gradle Фаза конфигурации.

Ответ 5

Как упоминал Майкл Пардо, вы можете получить его *

plugins.getPlugin( 'com.android.library'). SdkHandler.getNdkFolder()

*

Если вы получили следующую ошибку:

Error:(9, 0) Plugin with id com.android.library has not been used.

Вы можете использовать прикладной плагин: "com.android.application", поэтому окончательный код будет:

def ndkDir = plugins.getPlugin('com.android.application').sdkHandler.ndkFolder