zoukankan      html  css  js  c++  java
  • android开发系列之gradle认识

          后面的系列博客,我将会写一写自己这段时间对于android的学习、认识、体会,希望能够与大家分享。

          相信大家从ADT开发切换到android studio最大、最直观的变化就是gradle,因为在android studio里面是利用gradle去构建整个项目的。那么gradle到底是什么东西呢?为什么google官方提供的开发工具android studio里面要集成gradle呢?优势在哪呢?

          gradle是一种构建工具,它抛弃了传统的基于xml构建脚本,而是采用基于Groovy的内部领域特定语言。说到这里你也许就会想知道什么是Groovy了吧?其实我自己对Groovy的认识也不是太深,只能简单的说你可以认为它是下一代的java语言,你可以认为它是现在的jvm,所以与java集成度是非常高的。那么下面就让我们来看看基于Groovy构建的gradle语法到底是什么样的?

          当我们用android studio新建一个android项目之后,我们可以直观的看到现在的项目结构相比于ADT变化还是挺大的。在该项目结构下面我们同样能够找到java/res文件夹,看名字相信你也应该猜到该文件夹下面到底是放什么文件的。但是有变化的就是AndroidManifest.xml文件的放置位置,以及最下面多出来的build.gradle文件。当我们打开build.gradle文件的时候,会发现里面的语法格式类似于json数据。下面我们可以截取片段代码看一看:

    buildscript {
        //支持java依赖库管理
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.2.3'
        }
    }
    
    //项目构建的类型
    apply plugin: 'com.android.application'
    
    dependencies {
        compile fileTree(include: '*.jar', dir: 'libs')
        compile 'com.android.support:recyclerview-v7:22.2.0'
        compile 'com.android.support:support-v4:22.2.0'
    }
    
    android {
    
        compileSdkVersion 19
        buildToolsVersion "22.0.1"
        defaultConfig {
            applicationId "com.gumpcome"
            minSdkVersion 18
            targetSdkVersion 19
            compileOptions {
                sourceCompatibility JavaVersion.VERSION_1_7
                targetCompatibility JavaVersion.VERSION_1_7
            }
        }
    
        buildTypes {
            debug {
                buildConfigField "Boolean", "DEBUG_MODE", "true"
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            }
            release {
                buildConfigField "Boolean", "DEBUG_MODE", "false"
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            }
    
            debug {
                minifyEnabled true
            }
        }
    
        sourceSets {
            main {
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src']
                resources.srcDirs = ['src']
                aidl.srcDirs = ['src']
                renderscript.srcDirs = ['src']
                res.srcDirs = ['res']
                assets.srcDirs = ['assets']
                jniLibs.srcDirs = ['libs']
            }
    
            // Move the tests to tests/java, tests/res, etc...
            instrumentTest.setRoot('tests')
    
            // Move the build types to build-types/<type>
            // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
            // This moves them out of them default location under src/<type>/... which would
            // conflict with src/ being used by the main source set.
            // Adding new build types or product flavors should be accompanied
            // by a similar customization.
            debug.setRoot('build-types/debug')
            release.setRoot('build-types/release')
        }
    }

    相信如果你之前没有接触过该语法的话,初看起来还真的不知道它到底讲的是什么东西,下面就让我们拆开来分析一下。

          首先第一个标签buildscript就是指明该文件的gradle脚本开始,然后在里面我们能够看看repositories和dependencies两个子标签,在第一个子标签里面我们可以看到mavenCentral()。如果我们之前接触过

    buildscript {
        //支持java依赖库管理
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.2.3'
        }
    }
    

     maven相信大家就会对该标签不陌生了,它的主要目的就是基于maven构建项目,这样的话我们就可以很方便的管理我们项目依赖的jar包。那么说到这里,你也许会问我们项目里面具体依赖的jar在哪里可以看出来呢?在下面的代码里面,我们可以看到以下代码:

    dependencies {
        compile fileTree(include: '*.jar', dir: 'libs')
        compile 'com.android.support:recyclerview-v7:22.2.0'
        compile 'com.android.support:support-v4:22.2.0'
    }
    

     dependencies标签就是起到指明依赖jar的作用。

          然后我们看一下后面的一段代码,在这句代码里面就是直接指明当前的应用插件就是android app。

    apply plugin: 'com.android.application'
    

          最后在android这个标签里面,我们就可以设置android相关的具体属性信息,其中如下代码:

    compileSdkVersion 19
        buildToolsVersion "22.0.1"
        defaultConfig {
            applicationId "com.gumpcome"
            minSdkVersion 18
            targetSdkVersion 19
            compileOptions {
                sourceCompatibility JavaVersion.VERSION_1_7
                targetCompatibility JavaVersion.VERSION_1_7
            }
        }
    

     我们可以看到sdk/buildTool/id等相关app基本属性设置。在buildTypes标签下面,我们就可以分类指定当前build的类型,比如我们可以在命令行里面通过:gradle assembleDebug/gradle assembleRelease分别编译debug/release版本。在sourceSets标签里面,我们就可以设置具体的代码信息。

          这次分享有点贴代码之嫌,如果有什么不对的地方欢迎拍砖。

  • 相关阅读:
    从设计到实现,一步步教你实现Android-Universal-ImageLoader-缓存
    AsyncTask工作机制简介
    获取当前AppDelegate 正在显示的UIViewController
    Jqurey实现相似EasyUI的页面布局
    C++学习笔记(九):作用域和命名空间
    C++学习笔记(八):函数重载、函数指针和函数对象
    C++学习笔记(七):函数
    Stage3D学习笔记(一):3D术语简介
    C++学习笔记(六):复杂数据类型(string、容器和STL)
    C++学习笔记(五):指针和引用
  • 原文地址:https://www.cnblogs.com/xiaocai20091687/p/xiaocai-android-num-1.html
Copyright © 2011-2022 走看看