Android中gradle的详细介绍

一、app下的 build.gradle

1、头部的一些配置:

   1)说明module的类型。'com.android.application'为程序,'com.android.library'为库

apply plugin: 'com.android.application'

 2)引用一些插件:

a、引入二进制插件,二进制插件一般都是被打包在一个jar里独立发布的。

apply plugin: 'com.jakewharton.butterknife'//引入butterknife插件

b、引入应用脚本插件,其实这不能算是一个插件,而是一个脚本。

apply from: 'chappie.gradle'

 

3)  用关键字def定义变量或函数,可以在其他地方引用

def static releaseTime() {
    return new Date().format("yyyyMMdd_HHmmss")
}
def versionCode="1.0.1"

 

2、build文件中的一些常用配置:

模块介绍
android闭包配置项目构建的各种属性。
defaultConfig闭包默认配置:应用程序包名、最小sdk版本、目标sdk版本、版本号、版本名称、配置编译时java的一些参数等。
buildTypes闭包指定生成不同环境下安装文件的配置
signingConfigs闭包签名信息配置
sourceSets闭包源文件路径配置
lintOptions闭包lint配置
dependencies闭包指定当前项目的所有依赖关系
  

 

1)版本信息

compileSdkVersion 23  //编译SDK版本
buildToolsVersion "23"  //构建工具(tool)版本

或者

compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion

这种方式是采用了开发版本的统一规范。Android开发存在着众多版本的不同,比如compileSdkVersion、minSdkVersion、targetSdkVersion以及项目中依赖第三方库的版本,不同的module及不同的开发人员都有不同的版本,所以需要一个统一版本规范的文件,即创建一个gradle级别的文件来统一管理这些版本信息,然后在需要填写版本信息的地方调用这个文件中对应的版本信息。

具体可以参考另一篇文章:https://blog.csdn.net/qiutiandepaomo/article/details/103728423

2)默认配置defaultConfig

defaultConfig {
        applicationId 'com.xstore.wms' //应用包名
        minSdkVersion 22 //应用支持的最小sdk版本
        targetSdkVersion 27 //目标sdk
        versionCode 1 //版本号
        versionName "1.0" //版本名称
        multiDexEnabled true //dex突破65535的限制
        archivesBaseName="test" //指定打包成Jar文件时候的文件名称

        ndk{
            abiFilters "armeabi","x86","armeabi-v7a" //设置支持的so库架构
        }

        javaCompileOptions {//配置编译时java的一些参数
            annotationProcessorOptions {
                includeCompileClasspath false
            }
        }
}

3)默认的一些文件路径配置sourceSets

sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml' //指定清单文件(可不做配置)
            res.srcDirs=['res'] //指定res资源目录
            assets.srcDirs=['assets'] //assets资源目录
            jni.srcDirs 'src/main/jni' //jni代码目录
            jniLibs.srcDirs 'libs' //jni库目录
            java.srcDirs =['src'] //java代码目录
            resources.srcDirs=['src'] //指定source目录
            aidl.srcDirs=['src'] //指定aidl目录
        }
        debug.setRoot('buildTypes/debug') //指定debug模式的路径
        release.setRoot("buildTypes/release") //指定release模式的路径
}

4)dexOptions的一些相关配置,这样配置可以让你的编译速度更快

dexOptions {
    jumboMode = true//是否支持大工程模式
    javaMaxHeapSize "4g"//最大堆内存
    preDexLibraries = false//是否预编译
    incremental true//是否使用增量模式构建
    threadCount=8//线程数
}

5)signingConfigs签名配置

signingConfigs {
    //发布版本签名配置
    release {
        storeFile file("./ruxing_ppt")   //密钥文件路径
        storePassword "ruxing"       //密钥文件密码
        keyAlias "ruxing"                //key别名
        keyPassword "ruxing"         //key密码
    }
    //debug版本签名配置
    debug {
        //同上
    }
}

6)buildTypes构建类型

buildTypes {
    //发布
    release {
       //添加BuildConfig文件配置字段,可以设置不同环境下打包时不同的配置
       buildConfigField("boolean", "LOG_DEBUG", "false")
       buildConfigField("String", "API_HOST", "\"http://.../\"")
       versionNameSuffix "release"//在生成的release版本APK后缀中添加"release"字段
       minifyEnabled true//混淆开启
       zipAlignEnabled true//是否支持Zip
       shrinkResources true//是否清除无用资源
       debuggable true //是否支持调试
       //指定混淆文件
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rule.txt'
      signingConfig signingConfigs.release//指定签名
      applicationVariants.all { variant ->//设置apk的名称
      variant.outputs.each { output ->
          def fileName = "ph_android_release.apk"
            outputFileName = fileName
         }
      }
    }
    //测试
    debug {
        ...
     signingConfig signingConfigs.debug
     applicationVariants.all { variant ->
     variant.outputs.each { output ->
        def fileName = "ph_android_debug.apk"
           outputFileName = fileName
        }
      }
    }
}

其中设置apk的名称可以在不同的构建环境中单独设置,也可以单独的拿出来设置,在不同的构建环境中单独设置同上,单独拿出来设置如下:

applicationVariants.all { variant ->
    variant.outputs.all {
        def fileName = "..."
        if (variant.buildType.name == "release") {
            fileName += "_${defaultConfig.versionName}"
        } else if (variant.buildType.name == "debug") {
            fileName += "_${releaseTime()}"
        }
        fileName += "_${variant.buildType.name}.apk"
        variant.getPackageApplicationProvider().get().outputDirectory = new File(project.rootDir.absolutePath + "/apk") //指定apk输出路径
            variant.getPackageApplicationProvider().get().outputScope.apkDatas.forEach { apkData -> //指定apk名称
                apkData.outputFileName = fileName
            }
}

7)packingOptions设置不想添加到apk中的文件

packagingOptions {
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/DEPENDENCIES'
    exclude 'project.properties'
    exclude 'proguard.cfg'
    exclude 'META-INF/maven/com.google.protobuf/protobuf-java/pom.xml'
    exclude 'META-INF/maven/com.google.protobuf/protobuf-java/pom.properties'
}

8)compileOptions指定java版本

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

9)productFlavors多渠道打包相关的配置:

通常在适配多个渠道的时候,需要为特定的渠道做部分特殊的处理,比如设置不同的包名、应用名等。所以我们发版本的时候,经常需要切换项目分支或者修改代码,然后逐个编译apk。productFlavors就可以简化这一步操作,不用切换分支、修改代码,就可以一次性的编译符合不同要求的apk。

可以在不同的渠道设置不同的BuildConfig变量;不同的包名、应用名;配合AndroidManifest.xml设置不同渠道不同变量值。

productFlavors {
        channel1 {
            buildConfigField("String", "API_HOST", "......")
            applicationId "com.test.testData1"
            manifestPlaceholders = [
                    PUSH_APPID: "1001",
                    CHANNEL_ID: "001"
            ]
        }
        channel2 {
            buildConfigField("String", "API_HOST", "......")
            applicationId "com.test.testData2"
            manifestPlaceholders = [
                    PUSH_APPID: "1002",
                    CHANNEL_ID: "002"
            ]
        }
        channel3 {
            buildConfigField("String", "API_HOST", "......")
            applicationId "com.test.testData3"
            manifestPlaceholders = [
                    PUSH_APPID: "1003",
                    CHANNEL_ID: "003"
            ]
        }
    }

 

AndroidManifest.xml

        <meta-data
            android:name="JPUSH_APPID"
            android:value="${PUSH_APPID}" />
        <meta-data
            android:name="UMENG_CHANNEL_ID"
            android:value="${CHANNEL_ID}" />

productFlavors配合上边的buildTypes,可以选择debugChannel1、debugChannel2、debugChannel3、releaseChannel1、releaseChannel2、releaseChannel3 六种编译方式。

默认情况下,只指定一个维度时,配置的所有渠道都属于这个维度,如果指定了多个维度,需要手动为每个渠道分配一个维度。

如有两个厂商需要适配三种模型:

productFlavors {
        flavorDimensions "model","factory"
        factory1 {
            dimension 'factory'
        }
        factory2 {
            dimension 'factory'
        }
        model1 {
            dimension 'model'
        }
        model2 {
            dimension 'model'
        }
        model3 {
            dimension 'model'
        }
    }

 

这种情况下productFlavors配合上边的buildTypes,会有model1Factory1Debug、model1Factory1Release、model1Factory2Debug、model1Factory2Release、model1Factory3Debug、model1Factory3Release、model2Factory1Debug、model2Factory1Release、model2Factory2Debug、model2Factory2Release、model2Factory3Debug、model3Factory3Release十二种编译方式。

 

10)lintOptions:这个设置编译的lint开关。程序在build的时候,会执行lint检查,有任何错误或者警告提示,都会终止构建,我们可以将其关掉。

lintOptions {
    quiet true//是否关闭lint报告的分析进度
    abortOnError false//错误发生后是否停止gradle的构建
    ignoreWarnings true//是否忽略警告
    checkAllWarnings true//是否检查所有的问题点,包含其他默认关闭项
    warningsAsErrors true//是否将warning当成error
    disable 'InvalidPackage'//关闭指定问题检查
    enable 'OldTargetApi'//打开指定问题检查
    check 'IconDensities'//仅检查指定问题
    noLines true//error输出文件是否包含源码行数
    showAll true//是否显示错误的所有发生位置
}

 

11)设置依赖信息:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])     //本地依赖文件树
    compile files('libs/xutils3.3.4.jar')    //本地依赖文件
    compile(project(':pullToRefreshLibrary'))       //本地依赖工程
    compile 'com.android.support:support-v4:+'   //远程依赖
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蛋白质是生物体普遍存在的一类重要生物大分子,由天然氨基酸通过肽键连接而成。它具有复杂的分子结构和特定的生物功能,是表达生物遗传性状的一类主要物质。 蛋白质的结构可分为四级:一级结构是组成蛋白质多肽链的线性氨基酸序列;二级结构是依靠不同氨基酸之间的C=O和N-H基团间的氢键形成的稳定结构,主要为α螺旋和β折叠;三级结构是通过多个二级结构元素在三维空间的排列所形成的一个蛋白质分子的三维结构;四级结构用于描述由不同多肽链(亚基)间相互作用形成具有功能的蛋白质复合物分子。 蛋白质在生物体内具有多种功能,包括提供能量、维持电解质平衡、信息交流、构成人的身体以及免疫等。例如,蛋白质分解可以为人体提供能量,每克蛋白质能产生4千卡的热能;血液里的蛋白质能帮助维持体内的酸碱平衡和血液的渗透压;蛋白质是组成人体器官组织的重要物质,可以修复受损的器官功能,以及维持细胞的生长和更新;蛋白质也是构成多种生理活性的物质,如免疫球蛋白,具有维持机体正常免疫功能的作用。 蛋白质的合成是指生物按照从脱氧核糖核酸(DNA)转录得到的信使核糖核酸(mRNA)上的遗传信息合成蛋白质的过程。这个过程包括氨基酸的活化、多肽链合成的起始、肽链的延长、肽链的终止和释放以及蛋白质合成后的加工修饰等步骤。 蛋白质降解是指食物的蛋白质经过蛋白质降解酶的作用降解为多肽和氨基酸然后被人体吸收的过程。这个过程在细胞的生理活动发挥着极其重要的作用,例如将蛋白质降解后成为小分子的氨基酸,并被循环利用;处理错误折叠的蛋白质以及多余组分,使之降解,以防机体产生错误应答。 总的来说,蛋白质是生物体内不可或缺的一类重要物质,对于维持生物体的正常生理功能具有至关重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值