一、环境的搭建:

首先搭建好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. 在pypy环境中运行odoo8

    PyPy是一个独立的解析器, 通过即时编译(JIT,Just-in-time)代码避免逐行解释执行来提升运行速度的(将编译过的行代码缓存起来,从而加快速度).我们一般使用的Python一般是使用C实现 ...

  2. VMware虚拟机下如何安装一个64位的win7系统

    原文地址:http://www.xitongcheng.com/jiaocheng/win7_article_21001.html VMware虚拟机软件可以在一台电脑上运行多个操作系统,一些网友想在 ...

  3. php实现类似淘宝最近浏览商品的功能模型代码

    <?php //TempNum 显示临时记录数 $TempNum=5; //setcookie("RecentlyGoods", "12,31,90,39" ...

  4. Linq实现SQL in

    比如 Id in (1,2,3) int[] a={1,2,3}; list.Where(x=>a.Contains(x.Id))

  5. 工作总结 mvc 调页面传参数 参数值会一直保存 在这个页面上的

    意思是 两个页面均可以 获取到id 和 goodsType 都可以获取 id goodsType post 的 还多带点属性值 form data 页面上带过去的 (新增 编辑)

  6. codeforces 557 C

    由于期末.非常久没刷题了,CF一直掉-- 这个题事实上非常简单. .由于做法非常easy想到嘛.. 就是枚举max=x时,最大能保留多少价值.不断更新ans, 结果就是全部价值和减去ans就好 因为最 ...

  7. 服务管理-DNS

    DNS服务 DNS(Domain Names System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP地址.通 ...

  8. Centos7安装配置ansible运维自动化工具

    准备至少两台机器 Centos7,这两台机器都关闭 selinux IP:106.13.118.132 服务端(ansible) masterIP:148.70.60.244 节点 slaver 服务 ...

  9. centos编译 Compiling FFmpeg on CentOS RHEL Fedora

    This guide is based on a minimal installation of the latest CentOS release, and will provide a local ...

  10. # Playables API(翻译)

        The Playables API provides a way to create tools, effects or other gameplay mechanisms by organi ...