Android Studio 2.3.3 如何成功编译 3.0+ 项目

正如从 2017 跨 2018 一样,Android Studio 也要从 2+ 升级至 3+ 。

但是由于条件限制,不能及时升级的话,如何打开一个 3+ 项目?
我用 Picasso 来进行直播一下,从 GitHub 导入到 Android Studio 后


编译错误一.png

原因:是由于项目编译时所使用的 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')

根据相对路径找到该文件:


Android Studio 2.3.3 如何成功编译 3.0+ 项目_第1张图片
dependencies.gradle.png

打开一看:

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

编译走起。。。哒哒哒。。。

编译错误二.png

根据路径找到 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 中的


Android Studio 2.3.3 如何成功编译 3.0+ 项目_第2张图片
support 版本是否更新?.png

你可能感兴趣的:(Android Studio 2.3.3 如何成功编译 3.0+ 项目)