一、环境的搭建:

首先搭建好AndroidStudio环境。我使用的是Ubuntu 12.04系统(由于此机器还要运行其他程序,为避免兼容性问题,暂未更新到最新,而继续沿用此稳定版),java和jdk都是现成的,无需配置。FQ后从Google网站http://developer.android.com/sdk/index.htm下载最新的AndroidStudio for Linux。之后更新SDK。

一切顺利,将所有2.2之后的SDK下载完毕,就可以进行项目的开发了。

二、问题的产生

完成后,AS会自动生成工程,且使用Gradle编译。由于我们的最低编译版本是API 16,即android 4.1,而当前的最新编译器已经达到了23,即android 6.0。所以会出现如下报错:

我们可以看到,报的错是“Failed to resolve: com.android.support:appcompat-v7:16.+”,也就是我们在build.gradle中最后一段中的compile项内容。

  1. dependencies {
  2. compile fileTree(dir: 'libs', include: ['*.jar'])
  3. testCompile 'junit:junit:4.12'
  4. compile 'com.android.support:appcompat-v7:16.+'
  5. }

报错窗口提供了3个解决方案的链接,依次尝试,都无法解决问题。所以需要仔细分析该问题。

AS自动生成的“com.android.support:appcompat-v7:16.+”实际上是根据我们的最低版本16来选择16.x.x及以上编译器进行编译的,由于AS不知道具体的编译器版本是什么,所以就用了一个泛指“16.+”来代表16以上的编译器都行。这可能是之前AS的设计(未考证,只是推测,有知道的朋友可以提供说明,谢谢!),新版本中已经摒弃了这种写法。

那么我们就要找到当前AS所使用的SDK编译器版本是什么?

依次选择Tools→Android→SDK Manager,打开SDK Manager,选择SDK Tools选项卡。

找到其中的“Android Support Library, rev 23.2”,其版本为23.2.0,至此,我们已经知道了,应该使用“23.2.0”代替“16.+”。

真如我们所愿,这样一改就可以了呢?

又是报错,看来是build tools工具的问题。

回到build.gradle,看我们的build tools是如何定义的:

  1. android {
  2. compileSdkVersion 16
  3. buildToolsVersion '19.1.0'
  4. ................
  5. }

这就对了,build tools的版本太低。接下来,我们找找到底build tools的版本应该填入多少才合适。

依次选择Tools→Android→SDK Manager,打开SDK Manager,选择SDK Tools选项卡。记住勾选右下角的“Show Package Details”,这样才能看到所有的“Android SDK Build Tools”选项。我已经下载了所有可用的版本,第一次打开,一般只下载了19.1.0。最好下载最新的,以和最新的SDK所匹配。下载时,不要下载标注Obsolete的项,因为已经废弃,不再使用。

既然我们的appcompat-v7采用的是23,那么对应的buildToolsVersion也就选个最新的吧,于是将buildToolsVersion改为“23.0.2”。再看效果:

失败again!

别急,看报错信息......。一堆的资源找不到。再看报错文件夹,values-ldltr-v21,是API 21对之前的16版本不兼容。于是,也要把compileSdkVersion修改为23,此处为避免类似的资源问题,一步到位改到了23。

  1. android {
  2. compileSdkVersion 23
  3. buildToolsVersion '23.0.2'
  4. ................
  5. }

最终,编译成功!

总结

遇到这种编译问题不是很好解决,特别是刚开始使用AS,其编译、架构都与Eclipse完全不同,需要不断的摸索与适应。一旦熟练掌握了,你会发现AS是开发Android应用的最适合的效率工具。

回到我们所遇到的这个问题,解决方法:

1、找到compile中"com.android.support:appcompat-v7"的详细版本。通过Tools→Android→SDK Manager,打开SDK Manager,选择SDK Tools选项卡。找到“Android Support Library“所对应的版本。

2、找到buildToolsVersion的适合版本。通过Tools→Android→SDK Manager,打开SDK Manager,选择SDK Tools选项卡。找到“Android SDK Build Tools“,使用最新版本即可。

3、升级compileSdkVersiion到与buildToolsVersion匹配的版本。

Android Studio工程Gradle编译报错的更多相关文章

  1. android studio 自定义路径安装报错"You are attempting to install the android SDK

    android studio 自定义路径安装报错"You are attempting to install the android SDK 解决方法: 出现这个提示 主要是安装 Andro ...

  2. AS 新安装Android Studio运行项目前报错:Unable to access Android SDK add-on list

    新安装Android Studio运行项目前报错:Unable to access Android SDK add-on list AS启动后,会在默认路径下检测是否有Android SDK,如果没有 ...

  3. Android Studio 中java 文件报错红色J

    用常用的方法清除Android Studio的缓存然后重启,"File" -> "Invalidate Cashes / Restart" -> & ...

  4. Android Studio添加PNG图片报错原因

    今天在网上看到一个关于Splash Activity的Android帖子,博主在一通讲解之后也给出了代码.于是果断下载下来了看看怎么实现的.一步步照着流程把这个功能实现了一遍.一切都没有大问题,但是在 ...

  5. Android Studio导入项目,报错 Error:Unsupported method: BaseConfig.getApplicationIdSuffix().

    从GitHub上clone下来的第三方库,由于时间间隔很长,gradle的版本和本机的版本不一致,导入到Android Studio中会报错,错误信息如下: Error:Unsupported met ...

  6. Android Studio Build APK没有报错,但是Generate signed apk报错

    有时候 ,我们在调试APK,直接Build是可以正常生成,没有报错,但是当我们将自己的签名文件加上去,就会报错.一般情况下,我们可以在build.gradle中的android{}里面添加一个东西 l ...

  7. 一种解决Android studio 3.0 Build报错的方法

    问题背景: 最近在开始使用AndroidStudio3.0,刚好有一个开源的项目(Material-Movies),需要学习下.因为该项目比较早(2015年),而这段时间AndroidStudio和G ...

  8. Android studio 3.1.2报错,no target device found

     Android studio 3.1.2的Android monitor改为Android profiler,直接点这个就可以真机调试,在手机安装相应文件 第二次启动时,再次报错,找不到设备,点一下 ...

  9. Android Studio ( Linux) 创建模拟器报错

    Linux下Android studio创建模拟器最后一步报错 报错:An error occurred while creating the AVD. See idea.log for detail ...

随机推荐

  1. 2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

    2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh ...

  2. auth 认证

    参考链接 https://blog.csdn.net/hotnet522/article/details/5824716 http://blog.sina.com.cn/s/blog_6d6fbbd5 ...

  3. Flex4_Tree组件2(添加多选框、修改树图标)

    1.新建AS类,用于为Tree生成复选框,及一些选择事件. package com.th.myUtils { import flash.events.Event; import flash.event ...

  4. Solaris主机间的信任关系机制

    解决问题: 管理员经常在其他服务器之间登录,是否需要密码切换. 知识点:主机间信任关系.R 命令集 /etc/hosts/equiv 文件 R服务是不加密的,别人可以破解. 主机名 + 用户名. + ...

  5. python(24)- 面向对象进阶

    面向对象基础知识: 1.面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用: 2.类是一个模板,模板中包装了多个‘函数’供使用(可以将多函数中公用的变量封装到对象中): 3.对象,根据模板 ...

  6. 【转载】ViewState的用法

    本文导读:在web窗体控件设置为runat = "server",这个控件会被附加一个隐藏的属性_ViewState,_ViewState存放了所有控件在ViewState中的状态 ...

  7. Layout规则总结

    一.尺寸要求 1.过孔到焊盘的距离多少合适? 6mil左右 2.铜皮到边框的距离多少合适? 极限8mil,通常12,最好做到20,40 3.Thermal焊盘打地孔个数? 正方形 3*3  4*4   ...

  8. HDMI速率计算

    我们在采集HDMI口的数据时,首先肯定要计算它的速率是多少.怎么计算这个速率,本文要跟大家分享的便是这个事情. HDMI口有三个TM-DS(Time Minimized Differential Si ...

  9. 关于global和$GLOBALS[]的一道经典面试题

    在不执行程序的情况下,你觉得的输出结果是什么? <?php $var1 = 1; $var2 = 2; function test(){ global $var1,$var2; $var2 = ...

  10. Nmap扫描教程之基础扫描具体解释

    Nmap扫描教程之基础扫描具体解释 Nmap扫描基础扫描 当用户对Nmap工具了解后,就可以使用该工具实施扫描.通过上一章的介绍,用户可知Nmap工具能够分别对主机.port.版本号.操作系统等实施扫 ...