以前在网上找到有人分享的已经编译好的support4Demo的apk,其实就是google的sdk中所提供的support包的几个demo。因此就想着顺便把其余几个也一并导入到Android Studio中,方便查看源码学习。android
首先来看一下几个Demo的目录结构app
其实很简单,就是src源码和res资源两个文件夹,再加上一个AndroidManifest.xml清单文件。ide
###Support4Demo布局
咱们先来导入v4 Demo包。在一个新的Project中,File->New->Import Module.将v4 Demo的源码导入。一路Next以后,Gradle就开始编译了。这时候咱们会碰到第一个错误。学习
failed to find Build Tools revision 19.1.0gradle
这里能够看到,错误的缘由是没法找到19.1.0版本的Gradle。由于我当前使用的Gradle版本是最新的23.0.2,因此只须要将文件修改一下就能够了。在support4Demos包下的build.gradle中,修改代码:ui
buildToolsVersion "23.0.2"
修改以后继续编译,这时会遇到第二个问题。google
错误:程序包android.support.v4.view不存在code
错误信息显示,android.support.v4下的某个包不存在。这个应用是support4Demos,固然是基于v4包来展现新功能(控件)的Demo。而咱们当前并无给引用添加库,天然会报错了。router
dependencies { compile 'com.android.support:support-v4:23.1.1' }
在build.gradle中太添加应用库,再次编译。
bingo!此次终于编译成功,能够在手机上跑起来了。
###Support7Demos
咱们继续来导入v7Demo。Import Module后一样会碰到Gradle版本的错误,有了以前的经验,咱们能够很轻易的解决这个问题了。
由于此次是v7包的Demo,因此咱们先将appcompat-v7包添加到引用中
dependencies { compile 'com.android.support:appcompat-v7:23.1.1' }
按照以前的步骤,到这里咱们的应用就已经能够运行了。等等,怎么又报错了?
Error retrieving parent for item: No resource found that matches given name 'android.TextAppearance.Material.Widget.Button.Inverse'
这又是什么错误呢?咱们先来看看android:TextAppearance.Material.Widget.Button.Inverse是个什么属性。原来这是在SDK 23,也就是6.0以后添加的style。
由于我所下载的Support Library是最新的23.1.1版本。在这个版本中使用了6.0的style使得总体的风格可以统一。而咱们默认建立项目的时候所使用的compileVersion是19,那么固然拿不到新的属性了。因此这里咱们将编译版本修改一下就能够了,一样是在build.gradle下:
compileSdkVersion 23
这样就能够找到对应的resource了。但是这时候编译仍然会报错
No resource identifier found for attribute 'cardElevation' in package 'com.example.android.supportv7'
没法在当前项目中找到'cardElevation'属性。查看一下xml布局文件,咱们发现这个属性是在CardView这个标签下的,原来v7Demo中所使用的控件并再也不supportv7包下,而是一个独立的cardview-v7包。这样咱们就清楚了,只要把这个包也引入就能够了:
dependencies { compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.android.support:cardview-v7:23.1.1' compile 'com.android.support:mediarouter-v7:23.1.1' compile 'com.android.support:gridlayout-v7:23.1.1' compile 'com.android.support:recyclerview-v7:23.1.1' }
除了CardView,Demo中还用到了MediaRouter、GridLayout、RecyclerView,咱们把这几个独立的控件包也添加到build.gradle中来。这样应用就能够成功的编译了。
###Support13Demos 和 SupportAppNavigation
剩下的v13Demo和appNavigation的Demo,咱们按照以前处理相应错误的方式就能够成功的导入到Android Studio中进行编译并安装了。
####总结
其实这几个问题在咱们导入开源的项目的时候会常常遇到。可是通常总结起来大可能是三个缘由: 1. Gradle版本不一致。通常将Gradle改成本机上所使用的版本就能够解决了。 2. 项目所使用的库没有被引入。错误大可能是没法找到resource,也就是没法使用res包下所定义的某个style、value等。这时候咱们就须要将库添加到dependencies下。 3. CompileVersion不匹配。编译版本不匹配所致使的每每是项目没法调用新版本的属性,因此最彻底的解决方式就是将编译版本修改成最新的。
固然,在实际操做时,每每不像咱们上面所遇到的错误这样很轻松就能够找到错误发生的位置。最多见的每每是因为项目中所使用的库与咱们的配置的库冲突、不一致而引发的编译失败。可是归根结底仍是上面所说的三种缘由,只须要将每个库都进行检查比对,总能找到错误的缘由的(可是一个成熟的上线项目那庞大的引用库...想想也很头大)。
其实使用Eclipse来进行编译也会遇到这些错误,相比起来,Android Studio只须要添加一行代码就能够把Library引入也算是方便很多了。固然若是可以学到更多的Gradle命令的话就更简单了。