Compare version strings in groovy

后端 未结 11 1939
耶瑟儿~
耶瑟儿~ 2020-11-30 09:50

Hey I have created a Groovy script that will extract the version numbers of some folder. I would then like to compare the version numbers and select the highest.

I g

11条回答
  •  无人及你
    2020-11-30 10:52

    I use gradle 4.1 in Android Studio 3.0 Beta 7. There is VersionNumber.java (under C:\Users\ssfang.gradle\wrapper\dists\gradle-4.1-all\bzyivzo6n839fup2jbap0tjew\gradle-4.1\src\core\org\gradle\util)

    For example:

    apply plugin: 'com.android.application'
    
    try{ // undocumented
        println "${android.plugin.getSdkFolder().getAbsolutePath()}"
        // Since 1.3.1 or 1.5.0? android studio version or android gradle plugin?
        println "${android.getSdkDirectory().getAbsolutePath()}"
    }catch (ignored){
    }
    
    // As of android gradle plugin v2.1.2
    println android.sdkDirectory.path
    println android.ndkDirectory.path
    def buildToolsVer = new File(android.sdkDirectory.path, 'build-tools').listFiles().collect{ VersionNumber.parse(it.getName()) }.sort()
    println buildToolsVer
    printf('%s, %s\n',  buildToolsVer.head(), buildToolsVer.last().toString())
    
    def String mostRecentVersion(List versions) {
    //   TreeMap verNum2StrMap = versions.collectEntries(new TreeMap(), { [VersionNumber.parse(it), it] })
    
    //    TreeMap verNum2StrMap = versions.inject(new TreeMap()) { memo, entry ->
    //        memo[VersionNumber.parse(entry)] = entry
    //        memo
    //    }
    
        TreeMap verNum2StrMap = versions.inject(new TreeMap()) { map, verStr ->
            map << [(VersionNumber.parse(verStr)): verStr]
        }
    
        // println verNum2StrMap.lastEntry().value
        verNum2StrMap.lastEntry().value
    }
    
    assert mostRecentVersion(['02.2.02.01', '02.2.02.02', '02.2.03.01']) == '02.2.03.01'
    assert mostRecentVersion(['4', '2']) == '4'
    assert mostRecentVersion(['4.1', '4']) == '4.1'
    assert mostRecentVersion(['4.1', '5']) == '5'
    
    android {
        compileSdkVersion 25
        buildToolsVersion "26.0.2"
        defaultConfig {
            applicationId "ss.xsigner"
            minSdkVersion 14
            targetSdkVersion 22
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            setProperty("archivesBaseName", "xsigner")
        }
    }
    

    --

提交回复
热议问题