gradle dsl

仅仅是为了 提取 一些 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 only
task buildAll(){
    println 'start build'
}


svnCommitVersionFile.dependsOn build
generateZip.dependsOn svnCommitVersionFile
buildAll.dependsOn generateZip


tasks.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 cleanNative


def 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')
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值