美文网首页
Android Studio Gradle 常用配置详解

Android Studio Gradle 常用配置详解

作者: Ord1nAry_c568 | 来源:发表于2019-10-08 14:15 被阅读0次

    什么是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",
    
    
        ]
    
    
    }
    
    

    相关文章

      网友评论

          本文标题:Android Studio Gradle 常用配置详解

          本文链接:https://www.haomeiwen.com/subject/daebpctx.html