当前位置:   article > 正文

Android中gradle的配置_libytcommon

libytcommon

gradle文件的创建

在项目上新建一个File文件输入config.gradle
在这里插入图片描述

在config.gradle中创建变量

ext{
    username = "houde"

    //定义属性
    isRelease = true

    //建立Map的存储方式,key可以是任意对象,value也没有限制
    androidId = [
            compileSdkVersion: 29,
            buildToolsVersion: "29.0.2",
            minSdkVersion: 19,
            targetSdkVersion: 29,
            versionCode: 1,
            versionName: "1.0"
    ]
    appId = [
            app:"com.houde.gradle.test"
    ]

    url = [
            debug : "https://www.baidu.com",
            release: "https://www.google.com"
    ]

    dependencies = [
            appcompat: 'androidx.appcompat:appcompat:1.1.0',
            constraintlayout: 'androidx.constraintlayout:constraintlayout:1.1.3'
    ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

在项目中使用config.gradle中的变量

首先在根目录的build.gradle中引入config.gradle文件

//引入自己创建的gradle文件
apply from: "config.gradle"
  • 1
  • 2

在自己项目或者Library中使用config.gradle中的变量

def androidId = rootProject.ext.androidId
def appId = rootProject.ext.appId
def libraries = rootProject.ext.dependencies
def url = rootProject.ext.url

android {
    compileSdkVersion androidId.compileSdkVersion
    compileSdkVersion androidId.compileSdkVersion
    defaultConfig {
        applicationId appId.app
        minSdkVersion androidId.minSdkVersion
        targetSdkVersion androidId.targetSdkVersion
        versionCode androidId.versionCode
        versionName androidId.versionName
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        multiDexEnabled true  //dex 是否分包

        ndk {//ndk引用的so库
            abiFilters "armeabi-v7a"//,'armeabi','arm64-v8a'
        }
    }
   //multiDex的一些相关配置,这样配置可以让你的编译速度更快
    dexOptions {
        preDexLibraries = false  
        //让它不要对Lib做preDexing
        incremental true         
        //开启incremental dexing,优化编译效率,这个功能android studio默认是关闭的。
        javaMaxHeapSize "4g"     //增加java堆内存大小
    }

    buildTypes {

        debug{
            buildConfigField("String","BASE_URL","\"${url.debug}\"")
        }
        release {
            buildConfigField("String","BASE_URL","\"${url.release}\"")
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    //标准写法:
//    implementation group:"androidx.appcompat",name:"appcompat",version:"1.1.0"
    //这是一种简写方式
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
//    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.core:core-ktx:1.2.0'
//    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    //引入config.gradle中定义的依赖
    libraries.each{k,v->implementation v}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

gradle中各种配置的含义

// 声明是Android程序,
//com.android.application 表示这是一个应用程序模块
//com.android.library 标识这是一个库模块
//而这区别:前者可以直接运行,后者只能被导入别的应用作为一个模块。
apply plugin: 'com.android.application'

android {//配置项目构建的各种属性
    compileSdkVersion 29 //编译时使用 Android版本
    buildToolsVersion "29.0.1" //编译时使用的构建工具的版本
    defaultConfig {
        applicationId "com.skyworth.myapplication" //项目包名
        minSdkVersion 23 //最低兼容Android版本
        targetSdkVersion 29 //目标版本
        versionCode 1 //版本号
        versionName "1.0" //版本名
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" //表明要使用AndroidJUnitRunner进行单元测试
    }
    sourceSets {//目录指向配置
        main {
            manifest.srcFile 'AndroidManifest.xml'//指定AndroidManifest文件
            java.srcDirs = ['src']//指定source目录
            resources.srcDirs = ['src']//指定source目录
            aidl.srcDirs = ['src']//指定source目录
            renderscript.srcDirs = ['src']//指定source目录
            res.srcDirs = ['res']//指定资源目录
            assets.srcDirs = ['assets']//指定assets目录
            jniLibs.srcDirs = ['libs']//指定lib库目录
        }
        debug.setRoot('build-types/debug')//指定debug模式的路径
        release.setRoot('build-types/release')//指定release模式的路径
    }
     signingConfigs {//签名配置
        release {//发布版签名配置
            storeFile file("fk.keystore")//密钥文件路径
            storePassword "123"//密钥文件密码
            keyAlias "fk"//key别名
            keyPassword "123"//key密码
        }

        debug {//debug版签名配置
            storeFile file("fk.keystore")
            storePassword "123"
            keyAlias "fk"
            keyPassword "123"
        }
    }
    buildTypes {//build类型
        release {//发布
            minifyEnabled true//混淆开启
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'//指定混淆规则文件
            signingConfig signingConfigs.release//设置签名信息
        }

        debug {//调试
            signingConfig signingConfigs.release
        }
    }
//1、pickFirsts:当出现重复文件,会使用第一个匹配的文件打包进入apk
    //2、merges:当出现重复文件,合并重复的文件打入apk
    //3、excludes:打包的时候排除匹配的文件
    packagingOptions {
    //        pickFirsts = ['META-INF/LICENSE']
            //这里不要直接=赋值,避免覆盖掉默认值
    //        merge 'META-INF/LICENSE'
            //这里不要直接=赋值,避免覆盖掉默认值
            exclude 'META-INF/LICENSE'
        }

    lintOptions {
    // 设置为 true时lint将不报告分析的进度
    quiet true

    // 如果为 true,则当lint发现错误时停止 gradle构建
    abortOnError false

    // 如果为 true,则只报告错误
    ignoreWarnings true

    // 如果为 true,则当有错误时会显示文件的全路径或绝对路径 (默认情况下为true)
    absolutePaths true

    // 如果为 true,则检查所有的问题,包括默认不检查问题
    checkAllWarnings true

    // 如果为 true,则将所有警告视为错误
    warningsAsErrors true

    // 不检查给定的问题id
    disable 'TypographyFractions', 'TypographyQuotes'

    // 检查给定的问题 id
    enable 'RtlHardcoded', 'RtlCompat', 'RtlEnabled'

    // * 仅 * 检查给定的问题 id
    check 'NewApi', 'InlinedApi'

    // 如果为true,则在错误报告的输出中不包括源代码行
    noLines true

    // 如果为 true,则对一个错误的问题显示它所在的所有地方,而不会截短列表,等等。
    showAll true

    // 重置 lint 配置(使用默认的严重性等设置)。
    lintConfig file("default-lint.xml")

    // 如果为 true,生成一个问题的纯文本报告(默认为false)
    textReport true

    // 配置写入输出结果的位置;它可以是一个文件或 “stdout”(标准输出)
    textOutput 'stdout'

    // 如果为真,会生成一个XML报告,以给Jenkins之类的使用
    xmlReport false

    // 用于写入报告的文件(如果不指定,默认为lint-results.xml)
    xmlOutput file("lint-report.xml")

    // 如果为真,会生成一个HTML报告(包括问题的解释,存在此问题的源码,等等)
    htmlReport true

    // 写入报告的路径,它是可选的(默认为构建目录下的 lint-results.html )
    htmlOutput file("lint-report.html")

    // 设置为 true, 将使所有release 构建都以issus的严重性级别为fatal(severity=false)的设置来运行lint
    // 并且,如果发现了致命(fatal)的问题,将会中止构建(由上面提到的 abortOnError 控制)
    checkReleaseBuilds true

    // 设置给定问题的严重级别(severity)为fatal (这意味着他们将会
    // 在release构建的期间检查 (即使 lint 要检查的问题没有包含在代码中)
    fatal 'NewApi', 'InlineApi'

    // 设置给定问题的严重级别为error
    error 'Wakelock', 'TextViewEdits'

    // 设置给定问题的严重级别为warning
    warning 'ResourceAsColor'

    // 设置给定问题的严重级别(severity)为ignore (和不检查这个问题一样)
    ignore 'TypographyQuotes'
    }
// 开启DataBinding支持库
    dataBinding {
        enabled = true
    }
//1.exclude,过滤掉某些文件或者目录不添加到APK中,作用于APK,不能过滤aar和jar中的内容
//2.pickFirst,匹配到多个相同文件,只提取第一个,作用于APK,不能过滤aar和jar中的文件。
//3.doNotStrip,可以设置某些动态库不被优化压缩。
//4.merge,将匹配的文件都添加到APK中,和pickFirst有些相反,会合并所有文件。
    packagingOptions {
        pickFirst '**/libc++_shared.so'
        doNotStrip "*/armeabi/libYTCommon.so"
        doNotStrip "*/armeabi-v7a/libYTCommon.so"
        doNotStrip "*/x86/libYTCommon.so"
        doNotStrip "*/arm64-v8a/libYTCommon.so"

        pickFirst 'lib/armeabi-v7a/libalivcffmpeg.so'
        pickFirst "lib/arm64-v8a/libalivcffmpeg.so"
        doNotStrip '*/mips/*.so'
        doNotStrip '*/mips64/*.so'
        doNotStrip "**/libDX*.so"
    }

   }

dependencies {
    //各种依赖,包括本地的jar包
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/269912
推荐阅读
相关标签
  

闽ICP备14008679号