AndroidStudio中Gradle的使用(基础)|SquirrelNote

前言

Gradle是基于jvm,基于DSL语法的自动化构建工具。是google引入,替换ant和maven的新工具,其依赖兼容maven和ivy。gradle相比ant,扩展性更好,灵活性更高。

概述

Gradle作为一种项目构建的工具,与其它的构建工具一样,主要的职责是将输入源转变成目标产物。相比其它构建工具,其最大优势是借助于插件可以灵活地实现功能十分复杂、用途极其广泛的项目构建。

Gradle模型

gradle模型中两个重要的概念:project和module,以往eclipse的ant模型,workspace代表的项目工程空间,project代表的项目。而在gradle中project代表的是一整个工程,module代表是一个应用或一个库。

gradle结构

image.png
  1. module下的build.gradle
    app或库的相关配置在此配置

  2. project下的build.gradle
    (1)、工程需要的gradle工具的引用版本、及下载某些引用库的仓库。
    (2)、工程所有module的相关通用配置

buildscript {
    repositories {
        jcenter()// 告诉project 使用jcenter库
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'// 告诉project使用android提供的1.5.0版本gradle

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

// 配置所有的工程
allprojects {
    repositories {
        jcenter()//所有的project都是使用jcenter库
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
  1. project下的settings.gradle
    项目所有的module需要在此声明
    include ':app'

gradle配置

//申明这个工程的属性是Android运行app
//'com.android.library' 库工程。
apply plugin: 'com.android.application'

//工程的相关配置
android {
    //编译的sdk版本
    compileSdkVersion 23
    //编译工具的版本
    buildToolsVersion "23.0.3"
    //解决sdk中org.apache.http.*相关包被剔除的问题
    useLibrary 'org.apache.http.legacy'
    //关闭Android Studio的PNG合法性检查的,有些.9的图片可能会出现合法性的问题。用这个可以解决
    aaptOptions.cruncherEnabled = false
    aaptOptions.useNewCruncher = false

    //java编译相关配置
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    //签名,签名可以防止app被恶意串改,只有签名相同的程序才能升级替换安装
    signingConfigs {
        //正式包需要的keystore相关信息
        myConfig {
            //keystore路径
            storeFile file("build-files/xxxxx.keystore")
            //keystore密码
            storePassword "123456"
            //keystore别名
            keyAlias "xx"
            //别名的密码
            keyPassword "223456"
        }

        //调试包keystore的配置
        debugConfig {
            storeFile file("build-files/debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }

    //渠道配置,defaultConfig原生配置,可以多渠道 类似flavor_wandoujia {}
    defaultConfig {
        applicationId "com.gradledemo.activity" //配置包名
        minSdkVersion 15 // 最小支持sdk版本
        targetSdkVersion 23 // 目标sdk版本
        versionCode 1 //版本号
        versionName "1.0" //版本名称

        //支持multidex 解决65536爆包问题
        //multiDexEnabled true
    }

    //表示构建类型,混淆使用,一般有release debug 两种
    buildTypes {
        debug {
            signingConfig signingConfigs.debugConfig
            // 显示Log
            buildConfigField "boolean", "LOG_DEBUG", "true"
            minifyEnabled false
            zipAlignEnabled false
            shrinkResources false
        }

        release {
            //是否混淆
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    //编译的 lint 开关
    lintOptions {
        // set to true to turn off analysis progress reporting by lint
        quiet true
        // if true, stop the gradle build if errors are found
        abortOnError false
        // if true, only report errors
        ignoreWarnings true
        checkAllWarnings false
        checkReleaseBuilds false
        // lintConfig file("lint.xml")
    }
    //为所有的子项目设置一些通用配置
    subprojects {
        //配置一个新的gradle一样
    }
    //Eclipse 中迁移过来的代码都带这个设置,一般做指定目录
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            //so库的引用
            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')
    }
}

//编译需要的引用配置
dependencies {
    //jar引用,fileTree(dir:'libs',include:'*.jar')所有文件目录树下的libs的jar的引用,
    // 剔除*v4的jar引用exclude:'*v4.jar'
    //compile fileTree(dir: 'libs', include: '*.jar', exclude: '*v4.jar')
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.0.1'

    //工程引用
    //compile project(':SmartDevice:WiFiControlLibrary')
}

依赖管理

jar包

  1. 常规做法
 dependencies {
          compile fileTree(dir: 'libs', include: ['*.jar'])//即添加所有在libs文件夹中的jar
          compile 'com.android.support:appcompat-v7:23.0.1'//这是添加自己依赖jcenter库的jar
 }
  1. 引入其他远程仓库
repositories {
      //远程仓库地址
    maven { url = 'https://dl.bintray.com/yuancloud/maven/' }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.1'
    testCompile 'junit:junit:4.12'
    compile 'cn.yuancloud.app:superadapter:1.1'//远程仓库
}

so库引入

  1. 放入对应的文件夹,系统自动引入:


    image.png
  2. jinLib资源引入在libs中
    这里必须重新设置sourceSets

 sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
 }
  1. aar文件
    aar相当于android library的输出库,其中包含资源文件,类似(module),在library工程build/output/aar/下
    如下依赖:
dependencies {
       compile project(':library名字')
}
  1. 关于sourceSets
    资源设置字段,我们看下默认的配置,开发者当然也可以自定义资源加载的位置
//Eclipse 中迁移过来的代码都带这个设置,一般做指定目录
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            //so库的引用
            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')
    }

以上是根据我的一些理解,做的总结分享,旨在抛砖引玉,希望有更多的志同道合的朋友一起讨论学习,共同进步!

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

推荐阅读更多精彩内容