Android中gradle的配置

  • gradle文件的创建
  • 在config.gradle中创建变量
  • 在项目中使用config.gradle中的变量
    • 首先在根目录的build.gradle中引入config.gradle文件
    • 在自己项目或者Library中使用config.gradle中的变量
  • gradle中各种配置的含义

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'    ]}

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

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

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

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

def androidId = rootProject.ext.androidIddef appId = rootProject.ext.appIddef libraries = rootProject.ext.dependenciesdef url = rootProject.ext.urlandroid {    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}}

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. android Bitmap如何保存成为一个bmp文件
  2. [置顶] React Native Android(安卓)Cookie Problem
  3. android播放音乐的三种方法实现
  4. Android中显示html标签或者带图片
  5. 导入Eclipse工程到Android(安卓)studio
  6. Android(安卓)ListView的常见用法
  7. [原]Android(安卓)插件 根据布局xml自动生成ViewHolder 技术分享
  8. android中file的使用实例
  9. android 编译环境

随机推荐

  1. The Saygus VPhone V1 clears FCC, Will
  2. 浅析Android中的消息机制
  3. Android(安卓)Intent中的FLAG,很全
  4. Android客户端自动更新代码
  5. Android(安卓)对UI操作的工具类UIUtils
  6. android 客户端 smtp 协议发送数据
  7. Android获取单选与复选框的值
  8. android 判断文件是否存在
  9. Android之MediaPlayer(两种)基本使用方式
  10. C#内置泛型委托之Func委托