当前位置: 首页 > 知识库问答 >
问题:

通用域名格式。Android建筑格拉德尔。内部的模型ApiVersionImpl无法转换为java。lang.整数,作为项目迁移到IDEA

卫梓
2023-03-14

我需要从Android Studio迁移到IntelliJ IDEA,因为我需要用Java做一些其他非Android的工作。我从git克隆了我的项目并将其导入IDEA;然而,我在这个过程中遇到了Gradle的一个错误。我已经搜索过了,但找不到修复错误的答案。

这是事件日志

03:39:42 PM All files are up-to-date
03:39:42 PM ClassCastException: com.android.build.gradle.internal.model.ApiVersionImpl cannot be cast to java.lang.Integer: com.android.build.gradle.internal.model.ApiVersionImpl cannot be cast to java.lang.Integer

设置。gradle(myproject是SO的一个示例,希望省略实际名称)

include ':myproject'

构建。根目录中的gradle(例如/myproject/build.gradle)

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.+'
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}

和另一个版本。gradle(例如/myproject/myproject/build.gradle)

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion '20'
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName '1.0'
    }

    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
        debug {
            versionNameSuffix "-alpha"
        }
    }
    productFlavors {
    }

    packagingOptions{
        exclude 'META-INF/DEPENDENCIES.text'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
    compile 'commons-validator:commons-validator:1.4.0'
}

我想这可能与Gradle版本有关,也可能与Studio和IDEA之间的不兼容有关,但我不确定。非常感谢您的回答。谢谢

共有2个答案

宋臻
2023-03-14

您必须使用以前版本的android工具。版本0.10。使用Idea 13

所以只要把

classpath 'com.android.tools.build:gradle:0.10.+'

不幸的是,这对Android studio和Idea 14 EAP都不起作用,如果你有同事在同一个项目上工作,就没有好的解决方案

选项是继续将Idea 13与android工具0.10配合使用。版本,或迁移到EAP和/或Android studio并开始使用0.11。android工具版本:(注:0.12。不适用于Idea 14 EAP

或者,您可以尝试引入我们在团队中使用的解决方法,而这并不稳定:

在设置中。gradle添加

boolean fromIdea14 = System.properties["idea.version"]?.toString().equals("14")
org.gradle.api.internal.initialization.DefaultScriptHandler.metaClass.toolsVersion = fromIdea14 ? "0.11.+" : "0.10.+"

然后在build.gradle

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath group: 'com.android.tools.build', name: "gradle", version: getBuildscript().toolsVersion
  }
}

这将适用于使用Idea 13的每个人,以及使用14 EAP或AndroidStudio的人,他们应该添加到Gradle VM参数-Didea.version=14。

注意:它认为Idea不会评估脚本以通过调用gradle本身来配置android项目,因此获取其他属性或env变量将不起作用:(唯一的方法是在设置中指定gradle VM参数。

齐威
2023-03-14

我认为这是因为你的Gradle项目对于IntelliJ IDEA附带的Android插件版本来说太新了。

有几个可能的解决方法:

您可以尝试在构建文件中降级Android Gradle插件的版本,直到您找到它可以使用的版本。如果您后退到它的其他部分不兼容,这将遇到问题。为此,请减少行中的版本号:

   classpath 'com.android.tools.build:gradle:0.12.+'

然而,如果您这样做了,您就知道这个构建文件将与Android Studio的现代版本不兼容。目前没有很好的解决方法。

另一种方法是尝试IntelliJ 14 EAP,它可能会有更高版本的插件。请注意,IntelliJ 14仍处于其开发周期的一个非常活跃的阶段,很可能存在bug。使用风险自负。http://confluence.jetbrains.com/display/IDEADEV/IDEA14 EAP

啰嗦解释:

有许多不同的部分在起作用:

  1. 您的构建文件
  2. Gradle的Android插件
  3. IntelliJ的Android插件,由以下人员使用:
  4. Android Studio
  5. IntelliJ创意

#3中的插件对于Android Studio和IntelliJ都是相同的插件,但问题是它的发展非常快,Android Studio的发布进度要快得多,每个版本都附带最新的代码。IntelliJ IDEA的发布频率较低,老实说,我不完全确定它附带了什么Android插件;我还没有研究他们的分支策略。

Gradle的Android插件也在快速发展。通常情况下,这与Android Studio的新版本步调一致;为了支持我们在Android Studio中需要的新功能,用户需要一个更新的Gradle插件最低版本,反之亦然——这就是为什么过去经常强制迁移插件版本的原因。

所以发生的事情是您的构建文件需要最新版本的Android Gradle插件,它需要最新版本的IntelliJ Android插件,该插件在Studio中发布,但不是当前版本的IJ 13。

事情正在稳定下来,所以我们希望这在未来会有所改善。特别是,Android Gradle插件1.0版将跨平台工作,并将在很长一段时间内(如果不是永远的话)与所有产品的未来版本兼容。

 类似资料:
  • 我在这个问题上找到了不同的答案,但对我来说没有用,所以我不确定我是否在什么地方添加了错误的内容。 错误: Gradle同步失败:没有方法com的签名。Android建筑格拉德尔。AppPlugin。getNdkFolder()适用于参数类型:()值:[] 建筑gradle模块 建筑gradle项目 gradle-wrapper.properties 任何帮助都将不胜感激。 谢啦 更新: 地方的属性

  • 错误:找不到方法com。Android建筑格拉德尔。api。BaseVariant。getOutputs()Ljava/util/List;'。此意外错误的可能原因包括: Gradle的依赖项缓存可能已损坏(这有时会在网络连接超时后发生。)重新下载依赖项和同步项目(需要网络) Gradle构建进程(守护进程)的状态可能已损坏。停止所有Gradle守护进程可以解决此问题。停止Gradle生成过程(需

  • 我正在尝试让我现有的Android项目与渐变和智能J 12一起工作。以前,我曾让它与maven一起工作,但这似乎不像gradle那样灵活,而且据我所知,我需要的子文件夹更少。 我的Android项目分为干净的java库(:core)和实际的应用程序(:Android)。这两个项目都在我的主项目文件夹中。 我认为,用这个实现gradle工作的理想解决方案是将(:core)和(:android)项目视

  • 我目前在转换张量流时遇到问题。pb模型到TFlite格式。我目前正在遵循谷歌代码实验室的指示,错误说 Traceback(最近调用的最后一次):文件/usr/local/bin/tflite_convert,第5行,在tensorflow.lite.python.tflite_convert导入主重要错误:没有模块命名lite.python.tflite_convert 我正在使用谷歌提供的命令

  • 在执行和(为了防止我的应用程序应用一些第三方库的缓存版本而需要)后,我不能再构建我的应用程序,因为行 导致此错误的原因: 原因可能是什么?根据这个答案,我推断我的IS_CI_BUILD属性应该是布尔值,但每当我将其更改为或并尝试运行应用程序时,会弹出一个编辑配置对话框,我不确定该怎么办。

  • 我有一个由gradle建造的战争项目。我有一个字符串gradle.build文件:编译'log4j: log4j: 1.2.17'但没有任何log4j.jar结果WEB-INF/lib目录在myproject.war文件。 但“compile”配置中定义的所有其他lib都存在。为什么会有如此奇怪的行为,它是一个bug还是某种功能?如何将其包含在我的网络档案中? Eclipse在项目的“网络应用程序