【问题标题】:Android studio gradle script can't find Pattern classAndroid studio gradle 脚本找不到 Pattern 类
【发布时间】:2018-12-15 22:54:31
【问题描述】:

我正在尝试向我的 gradle 脚本添加自动增量版本名称功能,但出现错误:

Could not get unknown property 'Pattern' for project ':app' of type org.gradle.api.Project

我的 build.gradle:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 28
    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 28
        def version = getIncrementationVersions()
        versionCode 100
        versionName version
    }
    buildTypes {
        debug
                {
                    minifyEnabled false
                }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    libraryVariants.all { variant ->
        variant.outputs.all { output ->
            if (outputFile != null && outputFileName.endsWith('.aar')) {
                if (name.equals(com.android.builder.core.BuilderConstants.DEBUG))
                    outputFileName = "lib-debug.aar";
                else
                    outputFileName = "lib-release.aar";

                //outputFileName = "${archivesBaseName}-${version}.aar"
            }
        }
    }
    buildToolsVersion '28.0.3'
}

def getIncrementationVersions()
{
    List<String> runTasks = gradle.startParameter.getTaskNames();

    //find version name in manifest
    def manifestFile = file('src/main/AndroidManifest.xml')
    def matcher = Pattern.compile('versionName=\"(\\d+)\\.(\\d+)\"').matcher(manifestFile.getText())
    matcher.find()

    //extract versionName parts
    def firstPart = Integer.parseInt(matcher.group(1))
    def secondPart = Integer.parseInt(matcher.group(2))

    //check is runTask release or not
    // if release - increment version
    for (String item : runTasks)
    {
        secondPart++
    }

    def versionName = firstPart + "." + secondPart

    // update manifest
    def manifestContent = matcher.replaceAll('versionName=\"' + versionName + '\"')
    manifestFile.write(manifestContent)

    println "incrementVersionName = " + versionName

    return versionName
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:28.0.0-rc02'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.squareup.retrofit2:retrofit:2.4.0'
    implementation "net.pubnative:advertising_id_client:1.0.1"
    implementation 'com.google.code.gson:gson:2.8.5'
}

看来我可以在 android studio gradle 脚本中使用任何 Groovy 类。

发生了什么?

【问题讨论】:

    标签: android android-studio gradle groovy build.gradle


    【解决方案1】:

    在您的构建脚本中,您似乎没有导入所需的类 java.util.regex.Pattern(或者您可能没有复制/粘贴整个脚本?)

    在 Groovy 和 Gradle 中有一些“默认导入”(参见 Groovy default importsGradle default imports),但 java.util.regex 包不属于这些,因此您必须自己导入 Patternclass。

    在您的 build.gradle 脚本顶部添加此导​​入

    import java.util.regex.Pattern
    

    或者干脆使用全名

    def getIncrementationVersions()
    {
        // ...
    
        //find version name in manifest
        def manifestFile = file('src/main/AndroidManifest.xml')
        def matcher = java.util.regex.Pattern.compile('versionName=\"(\\d+)\\.(\\d+)\"').matcher(manifestFile.getText())
    
        // ...
    }    
    

    【讨论】:

      猜你喜欢
      • 2014-05-08
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 2017-10-05
      • 2018-04-08
      • 1970-01-01
      • 2013-11-14
      • 2015-05-14
      相关资源
      最近更新 更多