gradle dsl

来源:互联网 发布:数据库的创建实验报告 编辑:程序博客网 时间:2024/05/07 05:00
仅仅是为了 提取 一些 gradle语法
compileSdkVersion: "23" as int,
compileSdkVersion Integer.parseInt(ANDROID_BUILD_COMPILE_SDK_VERSION)
minSdkVersion Integer.parseInt(MIN_SDK_VERSION)targetSdkVersion Integer.parseInt(ANDROID_BUILD_TARGET_SDK_VERSION)versionCode Integer.parseInt(VERSION_CODE)versionName VERSION_NAME


dexOptions {    javaMaxHeapSize '2g'}

android.applicationVariants.all { variant ->    // 开始构建当前变体的即时时间    def currentTime = buildTime()    variant.outputs.each { output ->        println "**************************************"        println "currentTime: ${currentTime}"        println "variant: ${output.name}"        println "buildType: ${variant.buildType.name}"        println "flavor: ${variant.flavorName}"        println "manifest:  ${output.processResources.manifestFile}"        println "**************************************"        //将生成的apk文件保存至根目录的_apk文件下        def outputFile = output.outputFile        if (outputFile != null && outputFile.name.endsWith('.apk')) {            File outputDirectory = new File("${projectDir}/../_apk");            def apkName = "${variant.buildType.name}/app-${output.name}-V${frameworkVersion}-#${buildNumber}-${currentTime}.apk"            output.outputFile = new File(outputDirectory, apkName)        }        // 如果开启混淆,则保留混淆的映射关系文件,方便release进行调试        if (variant.getBuildType().isMinifyEnabled()) {            variant.assemble.doLast {                copy {                    from variant.mappingFile                    into "${projectDir}/../_mappings"                    rename { String fileName ->                        "mapping-${output.name}-V${frameworkVersion}-#${buildNumber}-${currentTime}.txt"                    }                }            }        }    }}def buildTime() {    return new Date().format("yyyy.MM.dd_HH.mm.ss", TimeZone.getTimeZone("UTC"))}

import org.tmatesoft.svn.core.wc.*import org.tmatesoft.svn.core.wc2.*import org.tmatesoft.svn.core.*apply plugin: 'com.android.application'android {    compileSdkVersion 22    buildToolsVersion "22.0.1"    defaultConfig {        // 包名        applicationId "com.zhb.studiotest"        minSdkVersion 19        targetSdkVersion 22        versionCode 1        versionName "1.0.0.1"        manifestPlaceholders = [ CHANNEL_NAME:"Unspecified",APPLICATION_LABLE:"StudioTest"]    }    sourceSets.main.jni.srcDirs = []    sourceSets.main.jniLibs.srcDir 'src/main/libs'    def versionPropsFile = file('version.properties')    if (versionPropsFile.canRead()) {        def Properties versionProps = new Properties()        versionProps.load(new FileInputStream(versionPropsFile))        def prename = versionProps['VERSION_NAME_MAJOR']        def name = versionProps['VERSION_NAME_BUILD'].toInteger()        def runTasks = gradle.startParameter.taskNames        if ('buildAll' in runTasks) {            name++        }        versionProps['VERSION_NAME_BUILD']=name.toString()        versionProps.store(versionPropsFile.newWriter(), null)        defaultConfig {            versionName prename + name        }    }    signingConfigs {        releaseConfig {            // 写死签名密码            keyAlias 'xxx'            keyPassword 'xxxx'            storeFile file("keystore.jks")            storePassword 'xxxx'            // 要求输入签名密码//            storeFile file("keystore.jks")//            keyAlias System.console().readLine("\nkeyAlias: ")//            storePassword System.console().readLine("\nKeystore password: ")//            keyPassword System.console().readLine("\nKey password: ")        }    }    /*productFlavors {        xiaomi {            applicationId = "com.zhb.xiaomi"            manifestPlaceholders = [UMENG_CHANNEL_VALUE: name,APPLICATION_LABLE:name]        }        baidu {            applicationId = "com.zhb.baidu"            manifestPlaceholders = [UMENG_CHANNEL_VALUE: name,APPLICATION_LABLE:name]        }        wandoujia {            applicationId = "com.zhb.wandoujia"            manifestPlaceholders = [UMENG_CHANNEL_VALUE: name,APPLICATION_LABLE:name]        }    }*/    productFlavors {        wandoujia {}        baidu {}        //c360 {}        //uc {}        productFlavors.all { flavor ->            applicationId = "com.zhb."+name            flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name,APPLICATION_LABLE:name]        }         }    buildTypes {        debug {            buildConfigField "boolean", "LOG_DEBUG", "true"            versionNameSuffix "-debug"            // 混淆开关            minifyEnabled false            // 在Android中,每个应用程序中储存的数据文件都会被多个进程访问:            // 安装程序会读取应用程序的manifest文件来处理与之相关的权限问题;            // Home应用程序会读取资源文件来获取应用程序的名和图标;            // 系统服务会因为很多种原因读取资源(例如,显示应用程序的Notification);            // 此外,就是应用程序自身用到资源文件。            // 当资源文件通过内存映射对齐到4字节边界时,访问资源文件的代码才是有效率的。            zipAlignEnabled false            // 删除没用的资源文件            shrinkResources false        }        release {            buildConfigField "boolean", "LOG_DEBUG", "false"            minifyEnabled true            zipAlignEnabled true            shrinkResources true            // 混淆文件            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'            // 签名            signingConfig signingConfigs.releaseConfig            applicationVariants.all { variant ->                // 修改APK名称                variant.outputs.each { output ->                    def file = output.outputFile                    def fileName = file.name                    fileName = fileName.replace(".apk", "-V${defaultConfig.versionName}.apk")                    fileName = fileName.replace("app", "StudioTest")                    fileName = fileName.replace("debug-unaligned", "debug")                    output.outputFile = new File(file.parent, fileName)                }                // 修改values.xml                variant.mergeResources.doLast(){                    File valuesFile = file("${buildDir}/intermediates/res/merged/${variant.dirName}/values/values.xml")                    String content = valuesFile.getText('UTF-8')                    content = content.replaceAll("CHANNEL_NAME","${variant.productFlavors[0].name}")                    valuesFile.write(content,'UTF-8')                }            }        }    }}def getSvnRevision(){    ISVNOptions options = SVNWCUtil.createDefaultOptions(true);    SVNClientManager clientManager = SVNClientManager.newInstance(options);    SVNStatusClient statusClient = clientManager.getStatusClient();    SVNStatus status = statusClient.doStatus(project.rootDir, false);    SVNRevision revision = status.getRevision();    return revision.getNumber();}task svnCommitVersionFile(){    description = "Commits a single file to an SVN repository"    doLast{        if (!project.hasProperty("commitMsg")){            ext.commitMsg = "//change version"        }        SvnOperationFactory svnOperationFactory = new SvnOperationFactory()        def authentication = SVNWCUtil.createDefaultAuthenticationManager("haibo.zhou", "hbzhou0622")        svnOperationFactory.setAuthenticationManager(authentication)        try {            SvnCommit commit = svnOperationFactory.createCommit()            commit.setSingleTarget(SvnTarget.fromFile(new File('app/version.properties')))            commit.setCommitMessage(commitMsg)            SVNCommitInfo commitInfo = commit.run()            println "Commit info: " + commitInfo            println "Commit message: " + commitMsg        } finally{            svnOperationFactory.dispose()        }    }}task generateZip(type: Zip){    def versionPropsFile = file('version.properties')    def Properties versionProps = new Properties()    versionProps.load(new FileInputStream(versionPropsFile))    def prename = versionProps['VERSION_NAME_MAJOR']    def name = versionProps['VERSION_NAME_BUILD'].toInteger()    def version = "V" + prename + name + "_(" + getSvnRevision() + ")"    from 'build/outputs'    archiveName "StudioTest_" + version + ".zip"    destinationDir file("build/release")    doLast(){        copy{            from ("build/release/"+archiveName)            into ("release")        }        if (!project.hasProperty("commitMsg")){            ext.commitMsg = "//upload compile result"        }        SvnOperationFactory svnOperationFactory = new SvnOperationFactory()        def authentication = SVNWCUtil.createDefaultAuthenticationManager("haibo.zhou", "hbzhou0622")        svnOperationFactory.setAuthenticationManager(authentication)        try {            SvnScheduleForAddition add = svnOperationFactory.createScheduleForAddition();            SvnTarget target = SvnTarget.fromFile(new  File("app/release/"+archiveName));            add.addTarget(target);            add.setAddParents(true);            add.setForce(true);            add.run();            SvnCommit commit = svnOperationFactory.createCommit()            commit.setSingleTarget(SvnTarget.fromFile(new File("app/release/"+archiveName)))            commit.setCommitMessage(commitMsg)            SVNCommitInfo commitInfo = commit.run()            println "Commit info: " + commitInfo            println "Commit message: " + commitMsg        } finally{            svnOperationFactory.dispose()        }    }}// build script for jenkins onlytask buildAll(){    println 'start build'}svnCommitVersionFile.dependsOn buildgenerateZip.dependsOn svnCommitVersionFilebuildAll.dependsOn generateZiptasks.withType(JavaCompile) {    compileTask -> compileTask.dependsOn ndkBuild}task ndkBuild(type: Exec) {    workingDir file('src/main/jni')    commandLine getNdkBuildCmd()}task cleanNative(type: Exec){    workingDir file('src/main/jni')    commandLine getNdkBuildCmd(), 'clean'}clean.dependsOn cleanNativedef getNdkDir() {    if (System.env.ANDROID_NDK_ROOT != null)        return System.env.ANDROID_NDK_ROOT    Properties properties = new Properties()    properties.load(project.rootProject.file('local.properties').newDataInputStream())    def ndkdir = properties.getProperty('ndk.dir', null)    if (ndkdir == null)        throw new GradleException("NDK location not found. Define location with ndk.dir in the local.properties file or with an ANDROID_NDK_ROOT environment variable.")    return ndkdir}def getNdkBuildCmd() {    def ndkbuild = getNdkDir() + "/ndk-build"    ndkbuild += ".cmd"    return ndkbuild}dependencies {    // 工程目录里面的libs文件夹下所有的jar包    compile fileTree(dir: 'libs', include: ['*.jar'])    // 网络仓库里面的工程    //compile 'com.github.chrisbanes.photoview:library:1.2.4'    // 本地的工程    compile project(':PhotoView-master')}
0 0