Android studio 将build.gradle从2.3.3更新到3.4.1,我仍然收到警告;编撰;替换为“;实施;?

Android studio 将build.gradle从2.3.3更新到3.4.1,我仍然收到警告;编撰;替换为“;实施;?,android-studio,android-gradle-plugin,build.gradle,Android Studio,Android Gradle Plugin,Build.gradle,我查阅了类似的帖子,但由于我没有使用com.google.gms,我有点不知所措,我还更新了所有的实现(以前是编译)引用 这里是我在app/build.gradle上收到的警告 警告:API“variantOutput.getPackageApplication()”已过时,并已替换为“variant.getPackageApplicationProvider()”。 它将于2019年底拆除。 有关详细信息,请参阅。 要确定调用variantOutput.getPackageApplicatio

我查阅了类似的帖子,但由于我没有使用com.google.gms,我有点不知所措,我还更新了所有的实现(以前是编译)引用

这里是我在app/build.gradle上收到的警告

警告:API“variantOutput.getPackageApplication()”已过时,并已替换为“variant.getPackageApplicationProvider()”。 它将于2019年底拆除。 有关详细信息,请参阅。 要确定调用variantOutput.getPackageApplication()的内容,请在命令行上使用-Pandroid.debug.obsoleteApi=true以显示更多信息。 受影响模块:应用程序

// changed from gradle 2.3.3 to gradle 3.4.1 syntax as per 
// google developer sites and gradle blogs

// app/build.gradle:

#import java.text.DateFormat
#import java.text.SimpleDateFormat

// migrate from Android Studio with gradle:2.3.3 
// to Android Studio with gradle:3.4.1
// jm*20190531

buildscript {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

apply plugin: 'com.android.application'
apply plugin: 'hugo'
apply plugin: 'maven'


/*  **

    some methods to build app names with date, git-commit, version numbers
    here omitted

**  */

android {
    compileSdkVersion 28   // jm*20190405
    buildToolsVersion "28.0.3"   // "25.0.3"

    defaultConfig {
        minSdkVersion 16           /*** was: 9, then: 14 ***/
        targetSdkVersion 28        /*** was: 21, then: 25 ***/
        buildConfigField "String", "BUILD_DATE", "\"" + todayIso8601() + "\""
        buildConfigField "String", "SHORT_COMMIT_HASH", "\"" + getShortCommitHash() + "\""
    }

    signingConfigs {
        create("myConfig") {
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeType "jks"
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        //    signingConfig = signingConfigs.wxConfig
        }
    }

    flavorDimensions 'vox'    // jm*20190512

    productFlavors {
        voxDigits {
            applicationId "net.wavvox.VoxDigits13"
            versionCode versionCodeVoxDigits()
            versionName versionNameVoxDigits()
            dimension 'vox'
        }
        voxChat {
            applicationId "net.wavvox.voxchat"
            versionCode versionCodeVoxChat()
            versionName versionNameVoxChat()
            dimension 'vox'
        }

        // Rename APK for the appropriate productFlavor
        applicationVariants.all { variant ->
            //variant.outputs.every { output ->
            variant.outputs.all { output ->
                String flavorName = variant.productFlavors[0].name
                System.out.println("***** flavorName: " + flavorName)
                def relativeRootDir = output.packageApplication.outputDirectory.toPath()
                                            .relativize(rootDir.toPath()).toFile()
                def relativeRootDir0 = "../../.."

                switch (flavorName) {   // jm*20190405
                    case "voxChat":
                        //output.outputFile = new File(output.outputFile.parent,
                        //        output.outputFile.name.replace("app-voxChat", apkNameVoxChat)) );
                        output.outputFileName = new File("$relativeRootDir"+"/"+"app",
                                output.outputFileName.replace("app-voxChat", apkNameVoxChat()) )
                        break
                    case "voxDigits":
                        //output.outputFile = new File(output.outputFile.parent,
                        //        output.outputFile.name.replace("app-voxDigits", apkNameVoxDigits()) );
                        output.outputFileName = new File( "$relativeRootDir"+"/"+"app",
                                output.outputFileName.replace("app-voxDigits", apkNameVoxDigits()) )
                        break
                    default:
                        System.out.println("!!!!! unknown flavorName: " + flavorName + " !!!!!")
                        // old method, gradle:2.3.3
                        //output.outputFile = new File(output.outputFile.parent,
                        //        output.outputFile.name.replace(".apk","-${finalVersion}.apk"))
                        // new method, gradle:3.4.1
                        //outputFileName = new File(output.outputFile.parent,
                        //        outputFileName.replace(".apk", "-${finalVersionCode}.apk"))
                        break
                }   // switch

                System.out.println("relativeRootDir: " + relativeRootDir)
                System.out.println("output.outputFileName: " + output.outputFileName)
            }
        }
    } // End productFlavors block

}


dependencies {
    /* WavvoxLibrary AAR module */
    implementation project(':wavvoxlibrary')

    /* Google Android support libraries */
    implementation 'com.android.support:support-annotations:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'

    /* Dagger 2 */
    implementation 'com.google.dagger:dagger:2.22.1'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.22.1'
    compileOnly 'javax.annotation:jsr250-api:1.0'

    /* Progress Circle */
    implementation 'com.github.jakob-grabner:Circle-Progress-View:v1.3'
}


/*  **

    not quite sure about Dagger and Progress Circle;
    got inherited from some older projects 

**  */
警告:配置“编译”已过时,已替换为“实现”和“api”。 将于2018年底拆除。有关更多信息,请参阅: 受影响模块:应用程序

// changed from gradle 2.3.3 to gradle 3.4.1 syntax as per 
// google developer sites and gradle blogs

// app/build.gradle:

#import java.text.DateFormat
#import java.text.SimpleDateFormat

// migrate from Android Studio with gradle:2.3.3 
// to Android Studio with gradle:3.4.1
// jm*20190531

buildscript {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

apply plugin: 'com.android.application'
apply plugin: 'hugo'
apply plugin: 'maven'


/*  **

    some methods to build app names with date, git-commit, version numbers
    here omitted

**  */

android {
    compileSdkVersion 28   // jm*20190405
    buildToolsVersion "28.0.3"   // "25.0.3"

    defaultConfig {
        minSdkVersion 16           /*** was: 9, then: 14 ***/
        targetSdkVersion 28        /*** was: 21, then: 25 ***/
        buildConfigField "String", "BUILD_DATE", "\"" + todayIso8601() + "\""
        buildConfigField "String", "SHORT_COMMIT_HASH", "\"" + getShortCommitHash() + "\""
    }

    signingConfigs {
        create("myConfig") {
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeType "jks"
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        //    signingConfig = signingConfigs.wxConfig
        }
    }

    flavorDimensions 'vox'    // jm*20190512

    productFlavors {
        voxDigits {
            applicationId "net.wavvox.VoxDigits13"
            versionCode versionCodeVoxDigits()
            versionName versionNameVoxDigits()
            dimension 'vox'
        }
        voxChat {
            applicationId "net.wavvox.voxchat"
            versionCode versionCodeVoxChat()
            versionName versionNameVoxChat()
            dimension 'vox'
        }

        // Rename APK for the appropriate productFlavor
        applicationVariants.all { variant ->
            //variant.outputs.every { output ->
            variant.outputs.all { output ->
                String flavorName = variant.productFlavors[0].name
                System.out.println("***** flavorName: " + flavorName)
                def relativeRootDir = output.packageApplication.outputDirectory.toPath()
                                            .relativize(rootDir.toPath()).toFile()
                def relativeRootDir0 = "../../.."

                switch (flavorName) {   // jm*20190405
                    case "voxChat":
                        //output.outputFile = new File(output.outputFile.parent,
                        //        output.outputFile.name.replace("app-voxChat", apkNameVoxChat)) );
                        output.outputFileName = new File("$relativeRootDir"+"/"+"app",
                                output.outputFileName.replace("app-voxChat", apkNameVoxChat()) )
                        break
                    case "voxDigits":
                        //output.outputFile = new File(output.outputFile.parent,
                        //        output.outputFile.name.replace("app-voxDigits", apkNameVoxDigits()) );
                        output.outputFileName = new File( "$relativeRootDir"+"/"+"app",
                                output.outputFileName.replace("app-voxDigits", apkNameVoxDigits()) )
                        break
                    default:
                        System.out.println("!!!!! unknown flavorName: " + flavorName + " !!!!!")
                        // old method, gradle:2.3.3
                        //output.outputFile = new File(output.outputFile.parent,
                        //        output.outputFile.name.replace(".apk","-${finalVersion}.apk"))
                        // new method, gradle:3.4.1
                        //outputFileName = new File(output.outputFile.parent,
                        //        outputFileName.replace(".apk", "-${finalVersionCode}.apk"))
                        break
                }   // switch

                System.out.println("relativeRootDir: " + relativeRootDir)
                System.out.println("output.outputFileName: " + output.outputFileName)
            }
        }
    } // End productFlavors block

}


dependencies {
    /* WavvoxLibrary AAR module */
    implementation project(':wavvoxlibrary')

    /* Google Android support libraries */
    implementation 'com.android.support:support-annotations:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'

    /* Dagger 2 */
    implementation 'com.google.dagger:dagger:2.22.1'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.22.1'
    compileOnly 'javax.annotation:jsr250-api:1.0'

    /* Progress Circle */
    implementation 'com.github.jakob-grabner:Circle-Progress-View:v1.3'
}


/*  **

    not quite sure about Dagger and Progress Circle;
    got inherited from some older projects 

**  */
警告:配置“debugCompile”已过时,并已替换为“debugImplementation”和“debugApi”。 将于2018年底拆除。有关更多信息,请参阅: 受影响模块:应用程序

// changed from gradle 2.3.3 to gradle 3.4.1 syntax as per 
// google developer sites and gradle blogs

// app/build.gradle:

#import java.text.DateFormat
#import java.text.SimpleDateFormat

// migrate from Android Studio with gradle:2.3.3 
// to Android Studio with gradle:3.4.1
// jm*20190531

buildscript {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

apply plugin: 'com.android.application'
apply plugin: 'hugo'
apply plugin: 'maven'


/*  **

    some methods to build app names with date, git-commit, version numbers
    here omitted

**  */

android {
    compileSdkVersion 28   // jm*20190405
    buildToolsVersion "28.0.3"   // "25.0.3"

    defaultConfig {
        minSdkVersion 16           /*** was: 9, then: 14 ***/
        targetSdkVersion 28        /*** was: 21, then: 25 ***/
        buildConfigField "String", "BUILD_DATE", "\"" + todayIso8601() + "\""
        buildConfigField "String", "SHORT_COMMIT_HASH", "\"" + getShortCommitHash() + "\""
    }

    signingConfigs {
        create("myConfig") {
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeType "jks"
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        //    signingConfig = signingConfigs.wxConfig
        }
    }

    flavorDimensions 'vox'    // jm*20190512

    productFlavors {
        voxDigits {
            applicationId "net.wavvox.VoxDigits13"
            versionCode versionCodeVoxDigits()
            versionName versionNameVoxDigits()
            dimension 'vox'
        }
        voxChat {
            applicationId "net.wavvox.voxchat"
            versionCode versionCodeVoxChat()
            versionName versionNameVoxChat()
            dimension 'vox'
        }

        // Rename APK for the appropriate productFlavor
        applicationVariants.all { variant ->
            //variant.outputs.every { output ->
            variant.outputs.all { output ->
                String flavorName = variant.productFlavors[0].name
                System.out.println("***** flavorName: " + flavorName)
                def relativeRootDir = output.packageApplication.outputDirectory.toPath()
                                            .relativize(rootDir.toPath()).toFile()
                def relativeRootDir0 = "../../.."

                switch (flavorName) {   // jm*20190405
                    case "voxChat":
                        //output.outputFile = new File(output.outputFile.parent,
                        //        output.outputFile.name.replace("app-voxChat", apkNameVoxChat)) );
                        output.outputFileName = new File("$relativeRootDir"+"/"+"app",
                                output.outputFileName.replace("app-voxChat", apkNameVoxChat()) )
                        break
                    case "voxDigits":
                        //output.outputFile = new File(output.outputFile.parent,
                        //        output.outputFile.name.replace("app-voxDigits", apkNameVoxDigits()) );
                        output.outputFileName = new File( "$relativeRootDir"+"/"+"app",
                                output.outputFileName.replace("app-voxDigits", apkNameVoxDigits()) )
                        break
                    default:
                        System.out.println("!!!!! unknown flavorName: " + flavorName + " !!!!!")
                        // old method, gradle:2.3.3
                        //output.outputFile = new File(output.outputFile.parent,
                        //        output.outputFile.name.replace(".apk","-${finalVersion}.apk"))
                        // new method, gradle:3.4.1
                        //outputFileName = new File(output.outputFile.parent,
                        //        outputFileName.replace(".apk", "-${finalVersionCode}.apk"))
                        break
                }   // switch

                System.out.println("relativeRootDir: " + relativeRootDir)
                System.out.println("output.outputFileName: " + output.outputFileName)
            }
        }
    } // End productFlavors block

}


dependencies {
    /* WavvoxLibrary AAR module */
    implementation project(':wavvoxlibrary')

    /* Google Android support libraries */
    implementation 'com.android.support:support-annotations:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'

    /* Dagger 2 */
    implementation 'com.google.dagger:dagger:2.22.1'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.22.1'
    compileOnly 'javax.annotation:jsr250-api:1.0'

    /* Progress Circle */
    implementation 'com.github.jakob-grabner:Circle-Progress-View:v1.3'
}


/*  **

    not quite sure about Dagger and Progress Circle;
    got inherited from some older projects 

**  */
我想处理这些警告,并学习如何调试和找到问题的根源;警告不是描述性的

谢谢,
jm.

问题是,您使用的一些库可能使用编译而不是实现,检查您目前使用的库并不多

我看到库
com.github.jakob-grabner:Circle Progress View:v1.3
使用compile添加依赖项
com.android.support:support annotation:25.1.0
,在下面的链接中,您可以看到它们使用compile而不是api、实现等()

通过查看库的存储库,我发现有一个更新的版本,它是1.4(),如果更新了该版本,并使用关键字api添加依赖项


我建议您更新库以避免该警告。

问题是,您使用的一些库可能正在使用编译而不是实现,检查您使用的库目前并不多

我看到库
com.github.jakob-grabner:Circle Progress View:v1.3
使用compile添加依赖项
com.android.support:support annotation:25.1.0
,在下面的链接中,您可以看到它们使用compile而不是api、实现等()

通过查看库的存储库,我发现有一个更新的版本,它是1.4(),如果更新了该版本,并使用关键字api添加依赖项


我建议您更新库以避免该警告。

顺便说一句,我成功地将我的项目从Android Studio&gradle 2.3.3更新为3.4.1;我的库甚至从gradle实验0.9.3更新;看到可能重复的你可以在这里检查:注意雨果插件。谢谢你,我读了关于“雨果”;问题是,通过删除classpatch和apply插件,我现在得到了错误:“错误:没有为属性‘manifestOutputDirectory’指定任何值”,而不是三个警告中的前两个。还有关于variantOutput的警告:“警告:API‘variantOutput.getPackageApplication()’已过时,并已替换为‘variant.getPackageApplicationProvider()。(…)受影响的模块:app”和该模块(因为单击“app”不会转到导致此问题的行)也可能来自指定的一个额外工具…?关于“类路径”的答案/注释没有解决问题,因为警告在gradle构建期间出现!“实施”部分需要进行审查,因为这里(外部)的项目都有自己的build.gradle;如果这些项目还没有更新,gradle就会发出警告!在我的案例中(至少是“编译”与“实现”警告的对比),Jacob Grabner的“循环进度视图”项目是罪魁祸首。不,前面的评论中没有重复的问题,也没有与“Hugo”插件无关的问题!顺便说一句,我设法将我的项目从Android Studio&gradle 2.3.3升级到3.4.1;我的库甚至从gradle实验0.9.3更新;看到可能重复的你可以在这里检查:注意雨果插件。谢谢你,我读了关于“雨果”;问题是,通过删除classpatch和apply插件,我现在得到了错误:“错误:没有为属性‘manifestOutputDirectory’指定任何值”,而不是三个警告中的前两个。还有关于variantOutput的警告:“警告:API‘variantOutput.getPackageApplication()’已过时,并已替换为‘variant.getPackageApplicationProvider()。(…)受影响的模块:app”和该模块(因为单击“app”不会转到导致此问题的行)也可能来自指定的一个额外工具…?关于“类路径”的答案/注释没有解决问题,因为警告在gradle构建期间出现!“实施”部分需要进行审查,因为这里(外部)的项目都有自己的build.gradle;如果这些项目还没有更新,gradle就会发出警告!在我的案例中(至少是“编译”与“实现”警告的对比),Jacob Grabner的“循环进度视图”项目是罪魁祸首。不,前面的评论中没有重复的问题,也没有与“Hugo”插件无关的问题!谢谢;该版本使用的Minsdk版本高于我在项目中使用的版本;因此,在生成过程中会出现此错误:“失败:生成失败,出现异常。*出错原因:任务执行失败”:app:ProcessVoxDigitsReleaseMifest。“>清单合并失败:使用sdk:minSdkVersion 16不能小于库[com.github.jakob grabner:Circle Progress View:1.4]中声明的版本19”(…)或者使用工具:overrideLibrary=“at.grabner.circleprogress”