阅读 1571

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",


    ]


}

复制代码
关注下面的标签,发现更多相似文章
评论