【问题标题】:Gradle build Error:Cause: org.gradle.api.internal.ExtensibleDynamicObjectGradle 构建错误:原因:org.gradle.api.internal.ExtensibleDynamicObject
【发布时间】:2015-11-01 01:34:38
【问题描述】:

我正在尝试将“https://code.google.com/p/android-serialport-api/”导入 Android Studio。由于这个项目涉及到ndk,所以我按照以下链接的说明构建了NDK:http://tools.android.com/tech-docs/new-build-system/gradle-experimental

但是在构建之后,我得到了这个错误: Gradle 项目刷新失败
错误:原因:org.gradle.api.internal.ExtensibleDynamicObject

编辑:我安装了 2.5 gradle 版本 这是我的 build.gradle

apply plugin: 'com.android.model.application'

model {

  android {
compileSdkVersion 22
buildToolsVersion "22.0.1"

defaultConfig.with {
    applicationId = "android_serialport_api.sample"
    minSdkVersion.apiLevel =  17
    targetSdkVersion.apiLevel = 22

    android.ndk {
        moduleName = "serial_port"
    }

    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles  += file('proguard-rules.txt')
        }
    }

    android.productFlavors {

        create("all")
    }

}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
     }
   }

  }

}

【问题讨论】:

  • 由于该代码大约四年没有更新,如果它有效,我会感到惊讶。而且,就个人而言,我不会接触gradle-experimental 的东西,直到它变得非实验性为止。 Gradle 中已经有 NDK 支持(它在我知道你有的一本书中有介绍)。但是,最重要的是,如果没有您的 build.gradle、文件当前组织方式的描述(例如,JNI 源代码所在的位置)以及 Gradle 控制台的其余部分,没有人真正能够帮助您错误报告(我希望不止一行)。
  • 你见过stackoverflow.com/questions/16667903/…吗?你有 Android NDK r10e 和带有构建工具的 SDK 至少版本 19.0.0?
  • @CommonsWare 该代码在 ADT 中运行。我现在正在看书的章节。此外,这是完整的控制台输出。 Gradle 项目刷新失败错误:原因:org.gradle.api.internal.ExtensibleDynamicObject
  • 其他用户,如@CommonsWare,只有在您在用户名前加上@ 时才会收到通知(此评论应该提醒他)
  • 如果这就是你得到的所有错误,我不知道会发生什么。

标签: android gradle android-ndk


【解决方案1】:

你可以尝试改变

compileSdkVersion 22
buildToolsVersion "22.0.1"

compileSdkVersion = 22
buildToolsVersion = "22.0.1"

release {
    minifyEnabled false
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}

release {
    minifyEnabled = false
    proguardFiles  += file('proguard-rules.txt')
}

我遇到了同样的错误,这对我有用。

【讨论】:

  • 编译工具的前后版本是一样的。我的 proguard 命令看起来像你的。所以我不知道发生了什么
  • “之前”缺少 =。感谢用户,这为我解决了问题。
  • 在我的情况下,使用:minSdkVersion.apiLevel 22 targetSdkVersion.apiLevel 22 代替了正常的工作方式。
  • @mtbomb,也适合我。对于未来的读者 - 请仔细阅读并遵循以下内容:codelabs.developers.google.com/codelabs/android-studio-jni/…
【解决方案2】:

不幸的是,在 Android Studio 中支持原生代码开发的 NDK 预览实现是一个移动目标。即使您使用旧的,developers.android.com 声明,“支持”实验性 Android Gradle 插件(来自 tools.android.com)和 Gradle 版本(来自 gradle.org)的组合,也祝您构建工作顺利.相反,根据developers.android.com,始终使用最新发布的组合与最新指示的模块 build.gradle 语言语法。

在您的情况下,您混合使用赋值运算符“=”和“+=”。根据您使用的 gradle 插件和 gradle 版本的支持组合,它要么在模块 build.gradle 文件中的任何地方使用赋值运算符,要么在任何地方都使用赋值运算符 - 你必须保持一致,全有或全无。对于“+=”,请改用“.add(...)”方法。

请记住,gradle 脚本语言被编译到 Java 运行时,所以当您看到看起来像 Java 错误的构建错误时,很可能是 gradle 脚本出现了问题。

【讨论】:

    【解决方案3】:

    当我有一个参数没有正确地从旧的 gradle 语法移动到新的语法时,我得到了这个错误

    (有cFlags "..." 而不是CFlags += "..."

    看看例如在http://tools.android.com/tech-docs/new-build-system/gradle-experimental

    【讨论】:

    • 我有问题,我没有要更改的 cFlags,所以这不是一个通用的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2016-10-21
    • 2017-08-23
    • 1970-01-01
    相关资源
    最近更新 更多