【问题标题】:Android Gradle Plugin 1.1.0 - getNdkFolder() not found anymore, any replacement?Android Gradle Plugin 1.1.0 - getNdkFolder() 找不到了,有什么替代品吗?
【发布时间】:2015-04-21 07:59:07
【问题描述】:

我刚刚将 android Gradle 插件从 1.0.0 更新到 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

谢谢!

【问题讨论】:

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


【解决方案1】:

你可以这样得到:

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

【讨论】:

  • 谢谢,阻止我查看 Android Gradle 插件源
  • 这似乎不再适用于 Android Studio 2.3。请参阅@Cameron 的解决方案。
  • 是的,从 2.3 开始,Cameron's answer 为我工作。
【解决方案2】:

正确的方式——android.ndkDirectory

​​>

从android.plugin.ndkFolder 到android.ndkDirectory 的更改记录在技术文档Migrating Gradle Projects to version 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 的答案破解这个错误/功能。

【讨论】:

  • 因转向“实验性”插件而再次崩溃:(
  • 根据文档,这应该仍然是正确的,所以如果我是你,我会提交一个错误。快速检查没有发现任何未解决的错误。
  • 是什么让您相信android.ndkDirectory 不是下一版 Android 插件的 DSL 重大变化的一部分?无论如何,我找到了另一种方法:stackoverflow.com/a/32658072/192373
  • 实验性插件带有一个大的红色警告标签,表示任何事情都可能发生变化。在实际交付/记录某些内容之前,我认为我们不应该通过添加有关实验版本的注释来混淆答案。这很可能是一个错误。
【解决方案3】:

我使用的是 gradle 2.2.3 版本。对我有用的想法:

def ndkDir = project.android.ndkDirectory

参考。链接:https://code.google.com/p/android/issues/detail?id=152810

【讨论】:

    【解决方案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 插件必须已经初始化,因此这将始终在 Task 的 execute 方法中工作,但如果 Gradle 在 Gradle 配置阶段尚未解析 Android DSL,则它可能无法工作。

    【讨论】:

      【解决方案5】:

      正如 Michael Pardo 所说,您可以通过 *

      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
      

      【讨论】:

        猜你喜欢
        • 2017-10-17
        • 1970-01-01
        • 2018-05-19
        • 2012-05-07
        • 2020-06-20
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        相关资源
        最近更新 更多