美文网首页程序员
Gradle for android-配置文件

Gradle for android-配置文件

作者: crossroads | 来源:发表于2018-09-29 15:29 被阅读57次

    前言

    在Android Studio下直接创建一个新的项目就可以使用啦!

    一、Gradle设置文件

    settings.gradle用于指示 Gradle 在构建应用时应将哪些模块包括在内。这里只包含了app模块

    include ':app'
    

    二、顶级构建文件

    看项目下project的build.gradle,位于项目根目录

    //buildscript为gradle本身配置仓库(repositories)和依赖(dependencies
    buildscript{
        //ext 添加自定义属性
        ext.kotlin_version = '1.2.50'
    //gradle用这个仓库搜索或下载依赖
        repositories {
            google()
            jcenter()
            mavenCentral()
        }
    //gradle构建项目需要使用的依赖
        dependencies {
            classpath 'com.android.tools.build:gradle:3.1.4'
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        }
    }
    
    //项目中所有模块会用到的依赖,例如第三方的插件或库,
    // 不是所有模块都会用到的依赖,应该放在模块的build.gradle中。
    //这里只将都用到的仓库放在这里,而不配置任何一个依赖。
    allprojects {
        repositories {
            google()
            jcenter()
        }
    }
    
    

    三、模块级构建文件

    用于配置所在模块的构建设置

    //应用插件
    apply plugin: 'com.android.application'
    
    apply plugin: 'kotlin-android'
    
    apply plugin: 'kotlin-android-extensions'
    
    //配置构建项
    android {
        //编译版本,填写Android的版本号
        compileSdkVersion 27
        //build工具的版本号,Android系统每次添加新特性,就需要使用新的工具来build
        // buildToolsVersion的版本需要>=CompileSdkVersion.
        buildToolsVersion "28.0.3"
        //默认配置,也可以重写AndroidManifest.xml的一些属性
        //在需要多个版本时,可以被重写
        defaultConfig {
            //applicationId唯一识别发布的包名,当然源代码仍然使用AndroidManifest.xml中定义的包名
            applicationId "com.example.crossroads.aa"
            //最小sdk版本,即APP最低支持的手机版本
            minSdkVersion 21
            //指定API目标版本,要 <= compileSdkVersion。
            // 如果来不及配置新的特性和系统,将其设置小一点。例如,如果不想动态申请权限,就将targetSdkVersion写成23以下,
            //如果是>=23,就需要申请动态权限了。
            targetSdkVersion 26
            //APP的版本号
            versionCode 1
            //APP的版本名
            versionName "1.0"
          //允许方法数目超过64K,minsdk小于21的,需要添加multidex依赖,这里不展开讲解
            multiDexEnabled true
            //使用AndroidJUnitRunner进行测试
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        // 配置多种构建类型,默认有release和debug这两个类型
        //debug在我们生成的默认配置中没有明确显示,但它已经包含了debug相关工具并用debug key进行签名
        //release运用proguard的设置,默认没有签名。
        buildTypes {
            release {
               //是否进行资源压缩
               shrinkResources true
                //是否进行混淆
                minifyEnabled false
                //混淆文件的位置
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    
        //flavor维度,可以有多个
        flavorDimensions ('money','package')
    
        //productFlavors对一套代码进行生成多个不同版本的apk,
        // 当要求一套代码生成多个APP的时候,就可以用这个哦
        //这里的配置可以覆盖defaultConfig
        productFlavors {
            //A APP
            productA {
                //配置A产品的applicationId
                applicationIdSuffix ".A"
                dimension 'package'
            }
            //B APP
            productB {
                //配置B产品的applicationId,这样就相当于是两个APP了。
                applicationIdSuffix ".B"
                dimension 'package'
            }
            free{
                dimension 'money'
            }
            vip{
                dimension 'money'
            }
        }
    
        //APK拆分,只支持按照屏幕密度和ABI拆分,
        // 使用这个需要让每一个APK拥有不同的versionCode
        //这个开发期间没用过,不做详解,感兴趣的可以自行搜索APK拆分。
    //    splits {
    //        //按屏幕密度拆分
    //        density {
    //            enable false //启用屏幕密度拆分机制
    //        }
    //        abi {
    //            enable false //启用ABI拆分机制
    //        }
    //    }
    
    }
    
    //模块级别的依赖,后续详解
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
        implementation 'com.android.support:appcompat-v7:27.1.1'
        implementation 'com.android.support:design:27.1.1'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    }
    

    这里有一个dimension,是维度的意思,维度相同的包是互斥的,不同的包可以相互结合,见下图

    四、新增构建类型

        buildTypes {
         ......
            beta {
               // 复制调试属性和debug签名
                initWith debug
                versionNameSuffix 'b'
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    
                //指定替代匹配,beta构建类型在库依赖项中没有响应配置,将会使用matchingFallbacks中第一个可用的配置。
                matchingFallbacks = ['release', 'debug']
            }
        }
    

    对每个构建类型重命名

      buildTypes {
            applicationVariants.all { variant ->
                variant.outputs.all { output ->
                    outputFileName = "aa-${variant.flavorName}-${variant.buildType.name}-${variant.versionName}-${variant.versionCode}.apk"
                }
            }
      }
    

    这里我们输入命令./gradlew clean installfreeProductBDebug
    ,可以看到在outputs中会有aa-freeProductB-debug-1.0-1.apk文件,这就是我们重命名后的包。

    五、过滤变体

    将freeProductADebug和freeProductARelease过滤掉

     variantFilter{variant->
          def names =variant.flavors*.name
            if(names.contains("freeProductA")){
                setIgnore(true)
            }
        }
    

    六、重写AndroidManifest.xml一些属性

    AndroidManifest.xml中重写ACCESS_ID

           <meta-data
                android:name="ACCESS_ID"
                android:value="${ACCESS_ID}"/>
    

    build.gradle中这样写:

    android {
        defaultConfig {
           manifestPlaceholders = [
              ACCESS_ID:123456
            ]
        }
        ...
    }
    

    如果对于不同的构建类型,这样写

       buildTypes {
            release {
                ......
                manifestPlaceholders=[
                        ACCESS_ID:123456     
                ]
            }
        }
    

    七、配置项目范围的属性

    在项目级别定义的属性,可以在所有模块中使用

    project的build.gradle

    ext {
        compileSdkVersion = 27
    }
    

    模块的build.gradle

     compileSdkVersion rootProject.ext.compileSdkVersion
    

    这样子感觉有点长,那还有一个方式,放在gradle.properties中,也可以被所有模块使用
    gradle.properties

    BUILD_TOOLS_VERSION=28.0.3
    

    模块的build.gradle

       buildToolsVersion BUILD_TOOLS_VERSION
    

    参考网址

    android官网

    相关文章

      网友评论

        本文标题:Gradle for android-配置文件

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