All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xml.guard.utils.AgpVersion.kt Maven / Gradle / Ivy

There is a newer version: 3.0.5
Show newest version
package com.xml.guard.utils

/**
 * User: ljx
 * Date: 2023/2/4
 * Time: 20:16
 */
@Suppress("PrivateApi")
object AgpVersion {

    val agpVersion: String? by lazy {
        var version: String? = null
        try {
            val clazz = Class.forName("com.android.builder.Version")
            val field = clazz.getDeclaredField("ANDROID_GRADLE_PLUGIN_VERSION")
            field.isAccessible = true
            version = field.get(null) as String
        } catch (ignore: ClassNotFoundException) {
        } catch (ignore: NoSuchFieldException) {
        }
        if (version == null) {
            try {
                val clazz = Class.forName("com.android.builder.model.Version")
                val field = clazz.getDeclaredField("ANDROID_GRADLE_PLUGIN_VERSION")
                field.isAccessible = true
                version = field.get(null) as String
            } catch (ignore: ClassNotFoundException) {
            } catch (ignore: NoSuchFieldException) {
            }
        }
        version
    }

    //agp版本比较,当前版本大于version2,返回 >0; 等于,返回=0; 否则,返回 <0
    fun versionCompare(version2: String): Int {
        val agpVersion = agpVersion ?: return -1
        return versionCompare(agpVersion, version2)
    }

    private fun versionCompare(version1: String, version2: String): Int {
        val versionArr1 = version1.split("\\.".toRegex()).dropLastWhile { it.isEmpty() }
            .toTypedArray()
        val versionArr2 = version2.split("\\.".toRegex()).dropLastWhile { it.isEmpty() }
            .toTypedArray()
        val minLen = versionArr1.size.coerceAtMost(versionArr2.size)
        var diff = 0
        for (i in 0 until minLen) {
            val v1 = versionArr1[i]
            val v2 = versionArr2[i]
            diff = v1.length - v2.length
            if (diff == 0) {
                diff = v1.compareTo(v2)
            }
            if (diff != 0) {
                break
            }
        }
        diff = if (diff != 0) diff else versionArr1.size - versionArr2.size
        return diff
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy