我刚刚从1.0.0更新了Android Gradle插件到1.1.0,我收到了这个错误:
没有方法签名: com.android.build.gradle.LibraryPlugin.getNdkFolder()适用 对于参数类型:()值:[]
我试图找到gradle插件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
谢谢!
答案 0 :(得分:20)
你可以这样:
plugins.getPlugin('com.android.library').sdkHandler.getNdkFolder()
答案 1 :(得分:8)
技术文档Migrating Gradle Projects to version 1.0.0中记录了从android.plugin.ndkFolder
到android.ndkDirectory
的更改。另外你应该将你的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的答案来解决这个错误/功能。
答案 2 :(得分:4)
我正在使用gradle 2.2.3版本。这个想法对我有用:
def ndkDir = project.android.ndkDirectory
参考。链接:https://code.google.com/p/android/issues/detail?id=152810
答案 3 :(得分:3)
如果在build.gradle文件中你现在可以使用它,那么引用的bug已被标记为已修复。
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插件必须已经初始化,因此这将始终在Task的执行方法中工作,但如果Gradle在Gradle配置阶段尚未解析Android DSL,则可能无效。 / p>
答案 4 :(得分:1)
迈克尔帕尔多提到,你可以得到它 *
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