我需要从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
settings.gradle(myproject是SO的示例,想要省略实际名称)
include ':myproject'
根目录中的build.gradle(例如/myproject/build.gradle)
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
}
}
allprojects {
repositories {
mavenCentral()
}
}
和另一个build.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之间的不兼容有关,但我不确定。非常感谢答案。感谢。
答案 0 :(得分:3)
我认为这是因为您的Gradle项目对于IntelliJ IDEA附带的Android插件版本来说太新了。
有几种可能的解决方法:
您可以尝试降级构建文件中Android Gradle插件的版本,直到您点击它将使用的版本。如果您向后移动到其他部分不兼容,这将遇到问题。为此,请减少行中的版本号:
classpath 'com.android.tools.build:gradle:0.12.+'
但是,如果您这样做,请知道此构建文件与Android Studio的现代版本不兼容。目前还没有一个好的解决方法。
另一种方法是尝试IntelliJ 14 EAP,它可能会有更高版本的插件。请注意,IntelliJ 14仍然处于其开发周期的非常活跃的阶段,并且可能存在错误。使用风险由您自己承担。 http://confluence.jetbrains.com/display/IDEADEV/IDEA+14+EAP
冗长的解释:
有许多不同的作品在起作用:
#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版本可以跨平台工作,并且即使不是永久性的,也可以长期与所有产品的未来版本兼容。答案 1 :(得分:1)
您必须使用以前版本的Android工具。版本0.10。+与Idea 13一起使用
所以只需加上
classpath 'com.android.tools.build:gradle:0.10.+'
不幸的是,这不适用于Android工作室或Idea 14 EAP,如果你有同事在同一个项目上工作,那么就没有好的解决方案。
选项是继续使用Idea 13与Android工具0.10。+版本,或迁移到EAP和/或Android工作室并开始使用0.11。+版本的android工具。 :(注意:0.12。+不适用于Idea 14 EAP
或者您可以尝试介绍我们在团队中使用的变通方法,但这不会稳定下来:
在settings.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 。
注意:如果通过调用gradle本身来配置android项目,那么Idea不会评估脚本,因此获取其他属性或env变量将无效:(唯一的方法是在设置中指定gradle VM参数。