Android Studio Gradle 常用配置详解

什么是Gradle

Gradle 是一个构建工具,他可以帮我们编译 构建 打包项目 可以配置自己的task任务,可以很方便的去引用第三方的类库

根项目的gradle 整个项目的gradle配置文件


apply from: "config.gradle"  //这里可以引用自己定义的后缀为.gradle的文件  ,可以将所有的配置信息提取到自定义gradle

buildscript {
    //远程maven Google   jcenter jitpack   连接所需引用的服务器
    repositories {
        google()
        jcenter()
        
    }
    dependencies {
        //gradle 插件引用  内有关于项目编译构建....的任务
        classpath 'com.android.tools.build:gradle:3.4.1'
    }
}

//配置所有modle的引用服务器
allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }
    }

}

//清除任务  
task clean(type: Delete) {
    delete rootProject.buildDir
}

app module的配置

//标明此module可运行,,其他会有libary....
apply plugin: 'com.android.application'


android {

    compileSdkVersion rootProject.ext.android.compileSdkVersion//编译版本
    buildToolsVersion rootProject.ext.android.buildToolsVersion //编译时使用的构建工具的版本


    defaultConfig {
        //项目包名
        applicationId rootProject.ext.android.applicationId
        //最小可运行的sdk B版本
        minSdkVersion rootProject.ext.android.minSdkVersion
        //目标版本
        targetSdkVersion rootProject.ext.android.targetSdkVersion
        //版本号
        versionCode rootProject.ext.android.versionCode
        //版本名
        versionName rootProject.ext.android.versionName
        //开启分包
        multiDexEnabled true
        //junit单元测试
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        //中文资源
        resConfigs 'en'
        //ndk 配置
        ndk {
            // 设置支持的SO库架构
            abiFilters 'armeabi', 'x86', 'armeabi-v7a'//,'x86_64', 'arm64-v8a'
         }
       //只使用xhdpi 下的资源文件
        resConfigs "xhdpi"
        //分包,指定某个类在main dex
        multiDexEnabled true
        multiDexKeepProguard file('multiDexKeep.pro') // 打包到main dex的这些类的混淆规制,没特殊需求就给个空文件
        multiDexKeepFile file('maindexlist.txt') // 指定哪些类要放到main dex
    }
    //开启databind支持
    dataBinding {
        enabled = true
     }
    //签名信息
    signingConfigs {

        production {
            //签名文件路径
            storeFile rootProject.ext.signing.storeFile
            //密码
            storePassword rootProject.ext.signing.storePassword
            //别名
            keyAlias rootProject.ext.signing.keyAlias
            //别名密码
            keyPassword rootProject.ext.signing.keyPassword
        }
    }
    
    //构建类型
    buildTypes {
    //debug模式
        debug {
            //可以版本名称后面追加相关信息
            versionNameSuffix "-debug"
            //包名添加后缀 可以控制不同构建类型不同的包名
            applicationIdSuffix ".debug"
            //自定义资源信息相当于value 下的String.xml里的内容   debug环境下 定义响应的项目名称
            resValue "string", "app_name", rootProject.ext.android.debugAppName
            //manifest 参数配置项目图标  debug环境下的桌面图标显示 在 manifest 清单文件中引用
            manifestPlaceholders = [app_icon: rootProject.ext.android.debugAppIcon]
            //配置签名信息
            signingConfig signingConfigs.production
            //是否开启混淆
            minifyEnabled false
            //对齐优打包的apk
            zipAlignEnabled false
            //去除无用资源
            shrinkResources false
            //混淆文件路径
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            //开启这个可以debug调试
            debuggable true
            //自定义参数 在 Buildconfig使用   这里不同的环境定义不同的url
            buildConfigField("String", "API_URL", rootProject.ext.apiUrl.debugUrl)



        }
        //预上线
        preRelease {
            resValue "string", "app_name", rootProject.ext.android.preReleaseAppName
            manifestPlaceholders = [app_icon: rootProject.ext.android.preReleaseAppIcon]
            zipAlignEnabled true
            shrinkResources true
            versionNameSuffix "-preRelease"
            applicationIdSuffix ".preRelease"
            signingConfig signingConfigs.production
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            buildConfigField("String", "API_URL", rootProject.ext.apiUrl.preRelease)

        }
        //线上正式
        release {
            resValue "string", "app_name", rootProject.ext.android.releaseAppName
            manifestPlaceholders = [app_icon: rootProject.ext.android.releaseAppIcon]
            zipAlignEnabled true
            shrinkResources true

            signingConfig signingConfigs.production
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            buildConfigField("String", "API_URL", rootProject.ext.apiUrl.release)

        }

        //修改apk包名
        applicationVariants.all { variant ->
            variant.outputs.all { output ->
                outputFileName = "app-${variant.name}-${defaultConfig.versionName}-${defaultConfig.versionCode}.apk"
            }
        }
    }
    
    //jdk 配置
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

//lib包配置
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
    
     // 多渠道/多环境 的不同配置
    flavorDimensions("default")
    productFlavors {
        qudao1 {
            dimension "default"
            //自定义项目名称
            resValue "string", "app_name", "渠道1"
            //自定义参数  在BUildConfig 里调用
            buildConfigField("String", "orgId", '""')
        }
        qudao2 {
            dimension "default"
            resValue "string", "app_name", "渠道2"
            buildConfigField("String", "orgId", rootProject.ext.channel.csOrgId)
        }

    }
     //执行lint检查,有任何的错误或者警告提示,都会终止构建,我们可以将其关掉。
    lintOptions {
        abortOnError false
        checkReleaseBuilds false
    }
    
    //文件重复
      packagingOptions {
            exclude 'lib/arm64-v8a/ffmpeg.so'
        }
        
    //混淆对应文件输出
     applicationVariants.all { variant ->
        variant.outputs.each { output ->
            if (variant.getBuildType().isMinifyEnabled()) {
                variant.assemble.doLast{
                        copy {
                            from variant.mappingFile
                            into "${projectDir}/mappings"
                            rename { String fileName ->
                                "mapping-${variant.name}.txt"
                            }
                        }
                }
            }
        }
    }
}
configurations {
    //编译期排除commons模块
    compile.exclude module: 'commons'
    //在整个构建过程中排除com.squareup.retrofit2:adapter-rxjava
    all*.exclude group: 'com.squareup.retrofit2', module: 'adapter-rxjava'
}
//全局强制使用
configurations.all {
   resolutionStrategy {
       force 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
   }
}
dependencies {
//lib jar 引用
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    //动态版本号
    implementation 'com.android.support.constraint:constraint-layout:+'
    implementation project(path: ':utilslib')

    //重复引用问题
    compile (‘com.squareup.retrofit2:adapter-rxjava:2.1.0’){ 
      // 冲突时优先使用该版本
         force = true
 
     // 依据构建名称排除
         exclude module: 'rxjava'
     // 依据组织名称排除
         exclude group: 'com.squareup.retrofit'
     // 依据组织名称+构件名称排除
        exclude group: 'com.squareup.retrofit', module: 'rxjava'
 
    // 为本依赖关闭依赖传递特性
         transitive = false
    }

}


自定义gradle

需要在根项目引用 apply from: "config.gradle"

ext {

    apiUrl = [

            releaseUrl   : '"http://www.baidu.com/"',
            preReleaseUrl: '"http://www.baidu.com/"',
            debugUrl     : '"http://www.baidu.com/"',
    ]
    appKey = [
            buglyAppId: '"4a8eea659f"'
    ]
    signing = [
            storeFile    : file("./app/jks/key.jks"),
            storePassword: "123456",
            keyAlias     : "news",
            keyPassword  : "123456"
    ]
    android = [
            applicationId    : "com.ll.ll",
            compileSdkVersion: 28,
            minSdkVersion    : 19,
            targetSdkVersion : 28,

            debugAppName     : "应用预览版",
            releaseAppName   : "应用正式版",
            preReleaseAppName: "预上线版本",
            debugAppIcon     : "@mipmap/ic_launcher_round",
            releaseAppIcon   : "@mipmap/ic_launcher",
            preReleaseAppIcon: "@mipmap/ic_launcher",

            versionCode      : 1,
            versionName      : "1.0.0"
    ]


    libsVersion = [
            supportLibraryVersion = "28.0.0",
    ]


    dependencies = [
            //support
            appcompat_v7: "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion",
            design      : "com.android.support:design:$rootProject.supportLibraryVersion",
//            recyclerview_v7: "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion",
//            cardview_v7    : "com.android.support:cardview-v7:$rootProject.supportLibraryVersion",


    ]


}

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

推荐阅读更多精彩内容