第一行代码笔记(2)

Andriod studio 采用Gradle来构建项目

image.png

一般一个项目有两个build.gradle,一个在最外层目录下,一个在app目录下面:


image.png
buildscript {
    
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        

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

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

这些代码都是自动生成,请忽略语法结构,只需看最关键的部分:
1.两处repositories的闭包都声明了jcenter()这一行,jcenter()是一个代码托管仓库,很多安卓开源项目都会选择将代码托管到jcenter上,声明了他之后,就可以在此项目中引用jcenter中的任何开源项目了,
2.dependencies闭包中使用classpath声明了一个gradle插件,why要有这个插件,gradle不是专门为构建安卓项目而生,java,c++很多项目都可以用它创建,想要用它来构建安卓项目,必须用声明com.android.tools.build:gradle:3.0.0这个插件,后面部分表示版本号;
这是最外层目录下的gradle解析一般情况下并不需要修改此文件,除非想添加一些全局性的项目构建配置;
下面看一看app下面的build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.example.huyongjin.myapplication"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2'
}

第一行应用了一个插件,有两种值可以选,com.android.application表示这是一个应用程序模块,com.android.library表示这是一个库模块;这两者的区别在于:前者可以直接运行,后者只能作为代码库依附于别的应用程序模块来运行;接着是最大的一个安卓闭包,在这个闭包中可以配置项目构建的各种属性:
compileSdkVersion表示指定项目的编译版本;
//buildToolVersion用于指定项目构建工具的版本
androdid闭包中又嵌套了一个defaultConfig闭包,defaultConfig闭包中可以对项目的更多细节进行配置。
applicationId用于指定项目的包名,前面我们在创建项目的时候已经指定过包名了,如果你想在后面对其进行修改,那么就是在这里进行修改的;
mindsdkVersion用于指定项目最低兼容的Android系统版本,这里15表示最低兼容到Androdid4.0版本;
targetsdkVersion指定的值表示在该目标版本上已经做过了充分的测试,系统将会为你的应用程序启用一些最新的功能和特性;
下面看一看buildTypes闭包:
buildTypes用于指定生成安装文件的相关配置,通常只会有两个子闭包,一个是debug,一个是release;debug闭包用于生成测试版安装文件的配置,release闭包用于指定生成正式版安装文件的配置;debug可以忽略不写;
minifyEnabled 用于指定是否对项目的代码进行了混淆,true表示混淆,false表示没有;
proguardFiles 用于指定混淆时指定的规则文件,这里指定了两个文件,
proguard-android.txt是在android sdk目录下的,里面是所有项目通用的混淆规则;proguard-rules.pro是在当前项目的根目录下的,里面可以编写当前项目特有的混淆规则;
最后还剩一个dependencies闭包,可以指定当前项目的所有依赖关系,通常一个android Studio项目一共有3种依赖方式:本地依赖,库依赖,远程依赖:
本地依赖可以对本地的jar包或者目录添加依赖关系;
库依赖可以对项目中的库模块添加依赖关系;
远程依赖则可以对jcenter库上的开源项目添加依赖关系;
implementation fileTree是本地依赖声明,它表示将libs目录下所有被的.jar后缀文件都添加至项目的构建路径当中;
implementation:远程依赖声明,com.android.support:appcompat-v7:26.1.0'是一个标准的远程依赖库格式,com.android.support是域名部分,用于和其他公司的库做区分;appcompat-v7是一个组区分,用于和同一个公司的不同库区分;26.1.0是版本号,用于和同一个库的不同版本号做区分;加上这一句声明之后,ggradle首先会在构建项目时检查一下本地是否含有这个库的缓存,没有会自动联网下载,然后再添加至项目的构建路劲当中,
而库依赖声明的基本格式是:implementation project后面加上依赖库的名字,比如一个库模块的名字叫helper,implementation project(':helper')这句声明即可;
testImplementation是用于声明测试用例库的,暂时用不到

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