自动增量版本code与摇篮额外的属性增量、摇篮、属性、版本

2023-09-12 23:55:03 作者:我孤身一人

我要建有摇篮的Andr​​oid应用程序。到现在为止我用清单文件,以增加版本code,但我想从外部文件中读取的版本code和取决于它是否释放香味或调试味道增加版本code。我尝试了额外的属性,但不能拯救他们,这意味着下一次我建立它我得到了相同的版本code。 任何帮助将非常AP preciated!

  project.ext {
    devVersion code = 13
    releaseVersion code = 1
}

buildscript {
    库{
        mavenCentral()
    }
    依赖{
        类路径com.android.tools.build:gradle:0.6.+
    }
}

应用插件:'机器人'

库{
    mavenCentral()
}

依赖{
    编制项目(:收割机)
    编译com.android.support:appcompat-v7:18.0.+
    编译com.android.support:support-v4:18.0.+
    编译文件树(导演:库,包括:的* .jar)
}

高清getReleaseVersion code(){
    高清版= project.releaseVersion code + 1
    project.releaseVersion code =版本
    的println的sprintf(返回版本%D版)
    回版本
}

高清getDevVersion code(){
    高清版= project.devVersion code + 1
    project.devVersion code =版本
    的println的sprintf(返回版本%D版)
    回版本
}


高清getLastVersioName(版本code){
    回到0.0。 +版本code
}

安卓{
    compileSdkVersion 19
    buildToolsVersion19.0.0

    defaultConfig {
        的minSdkVersion 9
        targetSdkVersion 19
    }

    sourceSets {
        主要 {
            manifest.srcFile的Andr​​oidManifest.xml
            java.srcDirs = ['src'中]
            resources.srcDirs = ['src'中]
            aidl.srcDirs = ['src'中]
            renderscript.srcDirs = ['src'中]
            res.srcDirs = ['水库']
            assets.srcDirs = ['资产']
        }
    }

    buildTypes {
        推出 {
            runProguard真
            proguardFile getDefaultProguardFile('ProGuard的-的Andr​​oid optimize.txt)
            proguardFileproguard.cfg
            调试的假
            signingConfig空
            zipAlign假
        }
        调试{
            versionNameSuffix-DEBUG
        }
    }
    productFlavors {
        开发{
            的packageName ='com.swisscom.docsafe.debug
            版本code getDevVersion code()
            VERSIONNAME getLastVersioName(project.devVersion code)
        }
        督促{
            的packageName ='com.swisscom.docsafe
            版本code getReleaseVersion code()
            VERSIONNAME getLastVersioName(project.releaseVersion code)
        }
    }
}

任务包装(类型:包装){
    gradleVersion ='1.8'
}
 

解决方案   

我想从外部文件中读取的版本code

我相信有任何数量的可能的解决方案;这里是:

 安卓{
    compileSdkVersion 18
    buildToolsVersion18.1.0

    高清versionPropsFile =文件(version.properties)

    如果(versionPropsFile.canRead()){
        高清性能versionProps =新特性()

        versionProps.load(新的FileInputStream(versionPropsFile))

        DEF code = versionProps ['VERSION_ code'。toInteger()+ 1

        versionProps ['VERSION_ code'] = code.toString()
        versionProps.store(versionPropsFile.newWriter(),NULL)

        defaultConfig {
            版本code code
            VERSIONNAME1.1
            的minSdkVersion 14
            targetSdkVersion 18
        }
    }
    其他 {
        抛出新GradleException(无法读取version.properties!)
    }

    //安卓块的其余部分放在这里
}
 

这code预计,现有的 version.properties 文件,你会第一个构建之前,手工创建有 VERSION_ code = 8

如何批量生成矩阵25码 Code 2of5 Matrix

这code简单地颠簸每个构建的版本code - 你需要扩展的技术来处理您的每味的版本code

您可以看到整个样本项目演示此code。

I'm building an Android app with gradle. Until now I used the Manifest file to increase the versionCode, but I would like to read the versionCode from an external file and depending if it is the release flavor or the debug flavor increase the versionCode. I tried the extra properties, but you can't save them, which means that next time I build it I'm getting the same versionCode. Any help would be very much appreciated!

project.ext{
    devVersionCode = 13
    releaseVersionCode = 1
}

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
}

apply plugin: 'android'

repositories {
    mavenCentral()
}

dependencies {
    compile project(':Cropper')
    compile "com.android.support:appcompat-v7:18.0.+"
    compile "com.android.support:support-v4:18.0.+"
    compile fileTree(dir: 'libs', include: '*.jar')
}

def getReleaseVersionCode() {
    def version = project.releaseVersionCode + 1
    project.releaseVersionCode = version
    println sprintf("Returning version %d", version)
    return version
}

def getDevVersionCode() {
    def version = project.devVersionCode + 1
    project.devVersionCode = version
    println sprintf("Returning version %d", version)
    return version
}


def getLastVersioName(versionCode) {
    return "0.0." + versionCode
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 19
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }

    buildTypes {
        release {
            runProguard true
            proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
            proguardFile 'proguard.cfg'
            debuggable false
            signingConfig null
            zipAlign false
        }
        debug {
            versionNameSuffix "-DEBUG"
        }
    }
    productFlavors {
        dev {
            packageName = 'com.swisscom.docsafe.debug'
            versionCode getDevVersionCode()
            versionName getLastVersioName(project.devVersionCode)
        }
        prod {
            packageName = 'com.swisscom.docsafe'
            versionCode getReleaseVersionCode()
            versionName getLastVersioName(project.releaseVersionCode)
        }
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.8'
}

解决方案

I would like to read the versionCode from an external file

I am sure that there are any number of possible solutions; here is one:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.0"

    def versionPropsFile = file('version.properties')

    if (versionPropsFile.canRead()) {
        def Properties versionProps = new Properties()

        versionProps.load(new FileInputStream(versionPropsFile))

        def code = versionProps['VERSION_CODE'].toInteger() + 1

        versionProps['VERSION_CODE']=code.toString()
        versionProps.store(versionPropsFile.newWriter(), null)

        defaultConfig {
            versionCode code
            versionName "1.1"
            minSdkVersion 14
            targetSdkVersion 18
        }
    }
    else {
        throw new GradleException("Could not read version.properties!")
    }

    // rest of android block goes here
}

This code expects an existing version.properties file, which you would create by hand before the first build to have VERSION_CODE=8.

This code simply bumps the version code on each build -- you would need to extend the technique to handle your per-flavor version code.

You can see the entire sample project that demonstrates this code.

 
精彩推荐
图片推荐