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')

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


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 中的


support 版本是否更新?.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容