Android Studio的Gradle常用命令配置和依赖管理

Posted tuke_tuke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio的Gradle常用命令配置和依赖管理相关的知识,希望对你有一定的参考价值。

一,gradlew常用命令

./gradlew -v 版本号
./gradlew clean 清除工程目录下的build文件夹
./gradlew build 检查依赖并编译打包
这里注意的是 ./gradlew build 命令把debug、release环境的包都打出来,如果正式发布只需要打Release的包,该怎么办呢,下面介绍一个很有用的命令 assemble, 如

./gradlew assembleDebug 编译并打Debug包
./gradlew assembleRelease 编译并打Release的包
除此之外,assemble还可以和productFlavors结合使用,比如定义了 installRelease ,uninstallRelease 两个productFlavors,则可以如下命令:

./gradlew installRelease Release模式打包并安装
./gradlew uninstallRelease 卸载Release模式包
二,Gradle配置

Gradle构建脚本 build.gradle:
Gradle属性文件 gradle.properties
Gradle设置文件 settings.gradle

build.gradle

先看整个项目的gradle配置文件:

buildscript 
    repositories 
        jcenter()
    
    dependencies 
        classpath 'com.android.tools.build:gradle:1.3.0'

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


allprojects 
    repositories 
        jcenter()
    
内容主要包含了两个方面:

一个是声明仓库的源,这里可以看到是指明的jcenter(), 之前版本则是mavenCentral(), jcenter可以理解成是一个新的中央远程仓库,兼容maven中心仓库,而且性能更优。
另一个是声明了Android gradle plugin的版本,android studio 1.0正式版必须要求支持gradle plugin 1.0的版本
某个Moudle的gradle配置文件:

buildscript

buildscript 
    repositories 
        maven  url 'http://*********' 
    

    dependencies 
        classpath 'com.android.tools.build:gradle:1.3.1'
    
1,buildscript设置脚本的运行环境。
2,repositories支持java依赖库管理,用于项目依赖。
3,dependencies依赖包的定义。支持maven/ivy,远程,本地库,也支持单文件。如果前面定义了repositoriesmaven 库,则使用maven的依赖库,使用时只需要按照用类似于com.android.tools.build:gradle:0.4,gradle 就会自动的往远程库下载相应的依赖。

apply

//声明是Android程序
apply plugin: 'com.android.application'
apply plugin:声明构建的项目类型。如果是库的话就加
apply plugin: 'com.android.library'
android
android 
    // 编译SDK的版本
    compileSdkVersion 22
    // build tools的版本
    buildToolsVersion "23.0.1"

    //aapt配置
    aaptOptions 
        //不用压缩的文件
        noCompress 'pak', 'dat', 'bin', 'notice'
        //打包时候要忽略的文件
        ignoreAssetsPattern "!.svn:!.git"
        //分包
        multiDexEnabled true
        //--extra-packages是为资源文件设置别名:意思是通过该应用包名+R,com.android.test1.R和com.android.test2.R都可以访问到资源
        additionalParameters '--extra-packages', 'com.android.test1','--extra-packages','com.android.test2'
    

    //默认配置
    defaultConfig 
        //应用的包名
        applicationId "com.example.heqiang.androiddemo"
        minSdkVersion 21
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    

    //编译配置
    compileOptions 
        // java版本
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    

    //源文件目录设置
    sourceSets 
        main 
             //jni lib的位置
             jniLibs.srcDirs = jniLibs.srcDirs << 'src/jniLibs'
             //定义多个资源文件夹,这种情况下,两个资源文件夹具有相同优先级,即如果一个资源在两个文件夹都声明了,合并会报错。
             res.srcDirs = ['src/main/res', 'src/main/res2']
             //指定多个源文件目录
             java.srcDirs = ['src/main/java', 'src/main/aidl']
        
    

    //签名配置
    signingConfigs 
        debug 
            keyAlias 'androiddebugkey'
            keyPassword 'android'
            storeFile file('keystore/debug.keystore')
            storePassword 'android'
        
    

    buildTypes 
        //release版本配置
        release 
            debuggable false
            // 是否进行混淆
            minifyEnabled true
            //去除没有用到的资源文件,要求minifyEnabled为true才生效
            shrinkResources true
            // 混淆文件的位置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            signingConfig signingConfigs.debug
            //ndk的一些相关配置,也可以放到defaultConfig里面。
            //指定要ndk需要兼容的架构(这样其他依赖包里mips,x86,arm-v8之类的so会被过滤掉)
            ndk 
                abiFilter "armeabi"
            
        
        //debug版本配置
        debug 
            debuggable true
            // 是否进行混淆
            minifyEnabled false
            //去除没有用到的资源文件,要求minifyEnabled为true才生效
            shrinkResources true
            // 混淆文件的位置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            signingConfig signingConfigs.debug
            //ndk的一些相关配置,也可以放到defaultConfig里面。
            //指定要ndk需要兼容的架构(这样其他依赖包里mips,x86,arm-v8之类的so会被过滤掉)
            ndk 
                abiFilter "armeabi"
            
        
    
    // lint配置 
    lintOptions 
      //移除lint检查的error
      abortOnError false
      //禁止掉某些lint检查
      disable 'NewApi'
    
android设置编译android项目的参数,构建android项目的所有配置都写在这里。
除了上面写的,在android块中可以包含以下直接配置项:

      productFlavors 产品风格配置,ProductFlavor类型
      testOptions 测试配置,TestOptions类型
      dexOptions dex配置,DexOptions类型
      packagingOptions PackagingOptions类型
      jacoco JacocoExtension类型。 用于设定 jacoco版本
      splits Splits类型。
repositories

repositories 
    flatDir 
        //本地jar依赖包路径
        dirs '../../../../main/libs'
    
dependencies
dependencies 
        compile files('libs/android-support-v4.jar')
        //在flatDir.dirs下面找依赖的aar
        compile (name:'ui', ext:'aar')
        // 编译extras目录下的ShimmerAndroid模块
        // 使用transitive属性设置为false来排除所有的传递依赖,默认为true
        compile project(':extras:ShimmerAndroid')
            transitive = false
        
        // 编译CommonSDK模块,但是去掉此模块中对com.android.support的依赖,防止重复依赖报错
        compile (project(':CommonSDK'))  exclude group: "com.android.support" 
        provided fileTree(dir: 'src/android5/libs', include: ['*.jar'])
        provided 'com.android.support:support-v4:21.0.3'
        provided project(':main-host')
        //通用使用exclude排除support-compat模块的依赖
        compile ('com.jakewharton:butterknife:8.5.1')
            exclude module: 'support-compat'
        
compile和provided:
compile表示编译时提供并打包进apk。
provided表示只在编译时提供,不打包进apk。
exclude 防止重复依赖,后面会重点介绍
transitive 排除所有的传递依赖,后面会重点介绍include


三,依赖库管理

本地依赖

dependencies 
    //单文件依赖
        compile files('libs/android-support-v4.jar')
    //某个文件夹下面全部依赖
        compile fileTree(dir: 'src/android6/libs', include: ['*.jar'])
        compile (name:'ui', ext:'aar')
    compile (project(':CommonSDK'))  exclude group: "com.android.support" 
        provided fileTree(dir: 'src/android5/libs', include: ['*.jar'])
        provided 'com.android.support:support-v4:21.0.3'
        provided project(':main-host')
远程依赖

gradle同时支持maven,ivy,以maven作为例子

repositories  
 //从中央库里面获取依赖
 mavenCentral() 
 //或者使用指定的本地maven 库
 maven 
  url "file://F:/githubrepo/releases" 
 
 //或者使用指定的远程maven库
 maven 
  url "https://github.com/youxiachai/youxiachai-mvn-repo/raw/master/releases" 
  
 

dependencies  
 //应用格式: packageName:artifactId:version 
 compile 'com.google.android:support-v4:r13' 

以上是关于Android Studio的Gradle常用命令配置和依赖管理的主要内容,如果未能解决你的问题,请参考以下文章

android-studio如何通过命令行运行gradle编译命令

android studio怎样在terminal下执行gradle 命令

我安装了Android Studio,但我无法通过命令行访问gradle

Android 使用Android Studio + Gradle 或 命令行 进行apk签名打包

Android Studio中如何清理gradle缓存

使用 android studio 项目在命令行上使用 Gradle 构建失败:Xlint 错误