Ответ 1
Вы можете сделать это следующим образом:
plugins.getPlugin('com.android.library').sdkHandler.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
Спасибо!
Вы можете сделать это следующим образом:
plugins.getPlugin('com.android.library').sdkHandler.getNdkFolder()
Отмена от 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.
Я использую версию gradle 2.2.3. Думаю, что сработало для меня:
def ndkDir = project.android.ndkDirectory
Ref. Ссылка: https://code.google.com/p/android/issues/detail?id=152810
Если в файле 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 Фаза конфигурации.
Как упоминал Майкл Пардо, вы можете получить его *
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