Android Gradle Plugin 1.1.0 - 找不到getNdkFolder(),有什么替代品吗?

时间:2015-02-19 19:40:46

标签: android android-studio android-ndk android-gradle android-build

我刚刚从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

谢谢!

5 个答案:

答案 0 :(得分:20)

你可以这样:

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

答案 1 :(得分:8)

正确的方法 - android.ndkDirectory

技术文档Migrating Gradle Projects to version 1.0.0中记录了从android.plugin.ndkFolderandroid.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