正如从 2017 跨 2018 一样,Android Studio 也要从 2+ 升级至 3+ 。
但是由于条件限制,不能及时升级的话,如何打开一个 3+ 项目?
我用 Picasso 来进行直播一下,从 GitHub 导入到 Android Studio 后
原因:是由于项目编译时所使用的 Gradle 插件更新至 3+ 了,那么对应的 Android Studio 也需要同步更新才行,是有匹配关系的。
首先,我很自然的打开了项目的全局 build.gradle 文件,想将 Gradle 插件版本降低成 2.3.3
插一嘴,我们要分清楚什么是 Gradle 什么是 Gradle 插件,两者不能混为一谈。>>>不是很清楚的戳这里<<<
build.gradle 中依赖的 classpath 'com.android.tools.build:gradle:2.3.3'
是编译所需要的 Gradle 插件版本(下载AS时会下载)
gradle-wrapper.properties 中的distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip
是 Android Studio 中使用了Gradle Wrapper 指定 Gradle 版本进行项目构建
想具体了解的也可以去全面熟悉一下 Gradle
发现结构有点不对劲,长得不一样,以前我们的项目该文件一般长这样
// 依赖的插件
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
现在 Picasso 项目的 build.gradle 长这样
subprojects {
buildscript {
repositories {
jcenter()
google()
}
}
repositories {
jcenter()
google()
}
plugins.apply('checkstyle')
task('checkstyle', type: Checkstyle) {
configFile rootProject.file('checkstyle.xml')
source 'src/main/java'
ignoreFailures false
showViolations true
include '**/*.java'
classpath = files()
}
group = GROUP
version = VERSION_NAME
afterEvaluate {
tasks.findByName('check').dependsOn('checkstyle')
}
}
apply from: rootProject.file('gradle/dependencies.gradle')
现在连 classpath 'com.android.tools.build:gradle:2.3.3'
都看不到了,一脸懵逼.jpg
伤心过度又眼力过好的我在最后一行瞟了一眼这个
apply from: rootProject.file('gradle/dependencies.gradle')
根据相对路径找到该文件:
打开一看:
ext {
compileSdkVersion = 26
buildToolsVersion = '26.0.2'
minSdkVersion = 14
targetSdkVersion = 26
sourceCompatibilityVersion = JavaVersion.VERSION_1_7
targetCompatibilityVersion = JavaVersion.VERSION_1_7
okhttpVersion = '3.6.0'
supportLibrariesVersion = '26.0.1'
dep = [
androidPlugin : 'com.android.tools.build:gradle:3.0.1',
okhttp : "com.squareup.okhttp3:okhttp:$okhttpVersion",
mockWebServer : "com.squareup.okhttp3:mockwebserver:$okhttpVersion",
pollexor : 'com.squareup:pollexor:2.0.4',
supportV4 : "com.android.support:support-v4:$supportLibrariesVersion",
supportAnnotations : "com.android.support:support-annotations:$supportLibrariesVersion",
junit : 'junit:junit:4.12',
truth : 'com.google.truth:truth:0.36',
robolectric : 'org.robolectric:robolectric:3.1',
mockito : 'org.mockito:mockito-core:1.9.5'
]
isCi = "true" == System.getenv('CI')
}
终于发现了
androidPlugin : 'com.android.tools.build:gradle:3.0.1'
那就将其改成我们熟悉的 2.3.3
编译走起。。。哒哒哒。。。
根据路径找到 picasso moudle 下的 build.gradle 在 dependencies {} 中可找到 api
dependencies {
api dep.okhttp
compileOnly dep.supportAnnotations
testImplementation dep.junit
testImplementation dep.truth
testImplementation dep.supportV4
testImplementation dep.robolectric
testImplementation dep.mockito
testImplementation dep.mockWebServer
}
Google 一下便知 这是 Gradle 3.0.0 以上的编译语法,我们还是要改成以前的,修改规则:
- api / compileOnly / implementation ——> compile
- testImplementation ——> testCompile
然后 Gradle 就会去下载所需的依赖了,再编译就成功了,噢耶!
如果还会出现其他错误也可以根据提示,一步步来,一些项目用到的依赖或者Support 版本是不是更新到最新的了,好好检查下,一定可以成功跑起来。
例如检查 dependencies.gradle 中的