Gradle for Android

简介

Gradle是一种依赖管理工具,基于Groovy语言,与maven相比可以不再使用xml进行配置,变得更加简单,清晰。
Android Studio中使用的是gralde插件编译项目,因此整个项目是基于gradle管理。

Gradle生命周期
  • 初始化:创建project 实例
  • 配置:创建、配置task任务
  • 执行:执行task任务
gradle插件中的基本tasks
  • assemble 构建各个版本的APK一般使用assembleRelease/assembleDebug
  • clean 删除构建文件
  • check 尝试去编译task而不去真正的执行,当构建失败时抛出异常停止任务
  • build check&assemble
  • connectedCheck 跑测试用例
  • installDebug 编译安装debug包到连接设备
Gradle 仓库依赖管理
repositories {
       mavenCentral()
       jcenter()
       mavenLocal()

} 

这里mavenLocal()使用的是本地的maven仓库,装过maven仓库的人都知道,默认情况下,mac/linux下的本地仓库在:~/.m2/;windowx下默认仓库在%UserProfile%.m2

repositories { 
   maven { url"http://repo.acmecorp.com/maven2" } 
}

这里maven执行一个自定义的远程仓库,不过要注意的是这个仓库支持匿名访问,如果要是自己的私人仓库的话则为以下写法:

repositories {
 maven { url "http://repo.acmecorp.com/maven2" 
credentials {
 username 'user' 
 password 'secretpassword' } 
} }

当然也可以指定本地某一个仓库路径:

 repositories { 
        maven {        
    url "../repo"     
    }
     }
Gradle 添加依赖库

依赖库的话分为.so native库,Java源代码库以及 aar/jar包

  • 添加jar包:

    dependencies {        compile files('libs/domoarigato.jar') }
    dependencies {        compile fileTree('libs') }
    dependencies {        compile fileTree(dir: 'libs', include: ['*.jar’],exclude:[‘xxx.jar']) }
    
  • 添加native 依赖:

    android 
    {   sourceSets.main 
    {   jniLibs.srcDir 'src/main/libs'
                                } }
    
  • 添加插件引用:

    apply plugin: 'com.android.library'
    
  • 添加library module引用

    • 在setting.gradle中添加include ‘:library’
    • 在build.gradle中添加

      dependencies 
      {  compile project(':library') }
      
  • 版本依赖

    dependencies {
    compile 'com.android.support:support-v4:22.2.+'        
    compile 'com.android.support:appcompat-v7:22.2+'  
    compile 'com.android.support:recyclerview-v7:+'  }  
    

这里我们用了+,22.2.+表示22.2.?最新的版本,而只有一个+表示该依赖的最新版本,这里要注意一点,每次编译的时候gradle都会去找最新的版本,那么这样就会出现一个问题,如果新版本与老版本中的某些接口变动了,则会导致编译失败

Gradle 如何打渠道包
android 
{ productFlavors
 {  red
  {     applicationId 'com.gradleforandroid.red'             
        minSdkVersion 17            
        versionCode 4 }        
    blue
{             
applicationId 'com.gradleforandroid.blue'             
minSdkVersion 14             
versionCode 4 
} } }  

可以在productFlavors这个闭包中定制自己的渠道包。这里提到了一个闭包的概念,我认为闭包主要有两个作用:

  • 闭包外可以访问闭包中的成员变量
  • 闭包可以作为一个参数进行传递

这里添加了两个渠道包,可以执行assembleRelease构建出两个渠道包:red&blue,但是如果只想构建一个怎么做,这里有两种方法:

  • 执行assemble${productFlavorName}Release,这里的productFlavorName指的是需要构建的渠道包名称,比如red的渠道包:assembleredRelease

  • 使用android.variantFilter这个方法

    android.variantFilter { variant ->        
    if(variant.buildType.name.equals('release'))
    {  variant.getFlavors().each() { flavor ->   
        if (flavor.name.equals('blue')) 
        {  
          variant.setIgnore(true);      
          }
     }
     }}
    

    将blue渠道包忽略掉

Tasks基础
task hello { println 'Hello, world!' }

Output:
$ gradlew hello 
Hello, world! 
:hello 

这里我们可以看到即使定义了这个Task,但是输出是在编译阶段。

task hello << { println 'Execution' } 
hello { println 'Configuration' } 

Output:
$ gradlew hello
Configuration 
:hello
Execution 

加上<<则在执行阶段执行,而<<则是doLast的缩写。

task hello { 
println 'Configuration' 
doLast { println 'Goodbye' } 
doFirst { println 'Hello' } } 

Output:
$ gradlew hello 
Configuration 
:hello 
Hello 
Goodbye 

上面这个task比较清楚了,先执行编译阶段的println 'Configuration' ,而后先执行doFirst方法,接着doLast方法

task mindTheOrder { 
doFirst { println 'Not really first.' }
doFirst { println 'First!' } 
doLast { println 'Not really last.' } 
doLast { println 'Last!' } } 


$gradlew mindTheOrder 
:mindTheOrder 
First! 
Not really first. 
Not really last.
Last! 

这个task比较有意思,如果定义多个doFirst和多个doLast的话是如何执行的呢?那么doFirst以最后定义的那个doFirst先执行,而doLast则是最后一个定义的最后执行

Others
  • android.applicationVariants.all

    android.applicationVariants.all { variant ->
    …..}  
    
    • 触发时机:编译阶段
    • 作用:通过variant可以获取一些task进行更改,比如更改mergeResources,需要注意的是,variant并不能获取所有定义的task,详请见user-guide.
  • tasks.whenTaskAdded

    • 触发时机:当每添加一个任务时触发此操作
    • 作用:可以使用这个方法在编译阶段更改某些tasks,使其在真正执行的时候达到自己的目的。不过需要注意的是,task定义需要在tasks.whenTaskAdded 之后。

转载请注明出处:
http://blog.csdn.net/sanyinchen/article/details/50901584

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值