Android Studio常用 gradle 配置项(备查)

//plugins { // 新版本gradle 默认是这种插件引入方式
//    id 'com.android.application'
//}

// 在 rootProject 的 build.gradle 或 单独定义config.gradle配置文件 中定义 isRunAloneMode 即可使用:
/*
 buildscript {
    ext {
        isRunAloneMode = true
    }
 }
*/
if (isRunAloneMode){
    apply plugin: 'com.android.application' // 应用程序模块
}else {
    apply plugin: 'com.android.library' // 依赖库模块
}

apply plugin: 'kotlin-android'  // 依赖Android Kotlin支持插件

android {
    compileSdkVersion 30    // 编译版本
    buildToolsVersion "30.0.3"  // 编译工具版本

//    useLibrary 'org.apache.http.legacy' // 开启 Apache HTTP client

    defaultConfig {
        if (isRunAloneMode){
            applicationId "com.aegis.module_search" // 应用程序标识
        }

        minSdkVersion 16    // 最小支持版本
        targetSdkVersion 30 // 期望Android SDK版本
        versionCode 1   // 版本号(程序使用)
        versionName "1.0.0"   // 版本名称(给用户展示)
        // flavorDimensions 详见:https://blog.csdn.net/chen_xi_hao/article/details/80526049
        flavorDimensions "default"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // 使用 AndroidJUnitRunner 进行单元测试

        // resourcePrefix "${project.name}_"   也可以用这个定义为模块名
        resourcePrefix "search_"     // 限定资源文件命名前缀为 search_  只能限定Xml资源,并不能限定图片资源,图片资源扔需要自身注意设置前缀名

//        configurations.all {
//            resolutionStrategy {
//                failOnVersionConflict() // 发现依赖冲突,就报错

//                force 'com.github.bumptech.glide:glide:4.9.0'   // 强制指定 Glide 依赖版本为 4.9.0
//            }
//        }

        resConfigs "zh-rCN", "zh-rHK", "zh-rTW", "en"   // 只打包指定的语言包进apk
//      multiDexEnabled true    // 是否开启分包

        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86'    // ndk so 包只打包对应版本支持
        }
    }

    ndkVersion '21.4.7075529'  // 指定 ndk 版本

    packagingOptions {
        pickFirsts = ['META-INFO/LICENSE']   // 当 LICENSE 出现重复时,打包自动选择第一个
        merge 'META-INFO/LICENSE'   // 合并打包,会自动忽略 pickFirst 配置
//        exclude 'META-INF/DEPENDENCIES.txt'   // 排除指定文件
//        exclude 'META-INF/NOTICE'
//        exclude 'META-INF/NOTICE.txt'
//        exclude 'META-INF/LICENSE'
//        exclude 'META-INF/LICENSE.txt'
    }

    lintOptions {
        abortOnError false // 出错后,是否中断打包
        checkReleaseBuilds false // 打正式包时,是否进行编译检查
        disable 'HardcodedText' // 禁用文本硬编码警告
    }

    signingConfigs {   // 签名信息
        debug { // 调试版本签名配置
//            keyAlias 'keyalisa' // 签名别名
//            keyPassword '123456'  // 别名密码
//            storeFile file('keystore.jks')  // 签名文件,目录对应项目根目录
//            storePassword '123456'    // 签名密码
        }

        release {   // 正式发布版本签名配置
//            keyAlias 'keyalisa' // 签名别名
//            keyPassword '123456'  // 别名密码
//            storeFile file('keystore.jks')  // 签名文件
//            storePassword '123456'    // 签名密码
        }
    }

    buildTypes {
        debug {
            // 日志打印开关 定义了一个:BuildConfig.LOG_ENABLE 字段,可供Java代码调用
            buildConfigField('boolean', 'LOG_ENABLE', 'true')
            // 测试服务器的主机地址 定义了一个:BuildConfig.HOST_URL 字段,可供Java代码调用
            buildConfigField('String', 'HOST_URL', '"https://debug.host.com"')

            minifyEnabled false // 是否开启代码混淆
            zipAlignEnabled true    // 开发开启zip包对齐优化,可降低apk提交,提高运行效率
            signingConfig signingConfigs.debug

            applicationIdSuffix ".debug"    // 为applicationId添加后缀 如:com.aegis.module_search.debug
            versionNameSuffix '_debug'  // 在版本号后面添加后缀 如:1.0.0_debug
        }

        release {
            // 日志打印开关
            buildConfigField('boolean', 'LOG_ENABLE', 'false')
            // 测试服务器的主机地址
            buildConfigField('String', 'HOST_URL', '"https://release.host.com"')

            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 混淆文件
            signingConfig signingConfigs.release

            debuggable false    // 是否开启断点调试
            jniDebuggable false // 是否开启ndk调试
            renderscriptDebuggable false    // 是否开启高级渲染调试
            zipAlignEnabled true    // 是否开启zip包对齐
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }

    buildFeatures {
        viewBinding true    // 开启 ViewBinding
//        dataBinding true    // 开始 DataBinding
    }

    sourceSets { // 源代码文件目录指向
        main {
            jniLibs.srcDirs = ['libs']  // so 文件目录指向 libs
            if (isRunAloneMode) {
                manifest.srcFile 'src/main/AndroidManifest.xml' // 清单文件指向 src/main/AndroidManifest.xml
                java.srcDir 'src/main/module'   // 开启 src/main/module 为Java源代码目录
            } else {
                manifest.srcFile 'src/main/manifest/AndroidManifest.xml'
                java {
                    exclude 'src/main/module'   // 排除 src/main/module 目录编译打包
                }
            }
        }
    }

    productFlavors {    // 多渠道配置
        wandoujia {}
        _360 {}
        xiaomi {}
        baidu {}
    }

    productFlavors.all {    // 遍历多渠道版本
        // 配置示例: <meta-data android:name="UMENG_CHANNEL_NAME" android:value="${UMENG_CHANNEL_NAME}" />
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_NAME: name]  // 设置清单文件 UMENG_CHANNEL_NAME 占位符值 为对应渠道的 name
    }
}

// 此配置会报此⚠️:Using flatDir should be avoided because it doesn't support any meta-data formats
// 解决办法:发布aar到一个本地或远程仓库,然后进行aar的依赖
//repositories {
//    flatDir {
//        dirs 'libs'   // 当项目有 aar包依赖时使用,但是官方已不推荐此配置
//    }
//}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.6.0'
    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容