web-dev-qa-db-ja.com

variantOutput.getPackageApplication()は廃止されました

gradle _4.10.1_とAndroid Gradleプラグインを_3.3.0_に更新すると、次の警告が表示されます:

警告:API 'variantOutput.getPackageApplication()'は廃止され、 'variant.getPackageApplicationProvider()'に置き換えられました。

周囲のコンテキストを含む行(ビルドバリアントによって出力ファイル名を割り当てています):

_applicationVariants.all { variant ->
    variant.outputs.all { output ->

        if (variant.getBuildType().getName() in rootProject.archiveBuildTypes) {

            def buildType = variant.getBuildType().getName()
            if (variant.versionName != null) {

                def baseName = output.baseName.toLowerCase()
                String fileName = "${rootProject.name}_${variant.versionName}-${baseName}.apk"

                // this is the line:
                outputFileName = new File(output.outputFile.parent, fileName).getName()
            }
        }
    }
}
_

移行ガイド はあまり役に立ちません。 _variant.outputs.all_に問題がある可能性があります-何を置き換えるかについての手掛かりがありません-移行ガイドはタスクを参照しており、バリアントをビルドすることを参照していません。 _File → Settings → Experimental → Gradle → Only sync the active variant_を無効にすると、非推奨の警告がさらに表示されます(要点は、これらのメソッドが直接呼び出されていないことです)。

_WARNING: API 'variant.getAssemble()' is obsolete and has been replaced with 'variant.getAssembleProvider()'.
WARNING: API 'variantOutput.getProcessResources()' is obsolete and has been replaced with 'variantOutput.getProcessResourcesProvider()'.
WARNING: API 'variantOutput.getProcessManifest()' is obsolete and has been replaced with 'variantOutput.getProcessManifestProvider()'.
WARNING: API 'variant.getMergeResources()' is obsolete and has been replaced with 'variant.getMergeResourcesProvider()'.
WARNING: API 'variant.getMergeAssets()' is obsolete and has been replaced with 'variant.getMergeAssetsProvider()'.
WARNING: API 'variant.getPackageApplication()' is obsolete and has been replaced with 'variant.getPackageApplicationProvider()'.
WARNING: API 'variant.getExternalNativeBuildTasks()' is obsolete and has been replaced with 'variant.getExternalNativeBuildProviders()'.
WARNING: API 'variantOutput.getPackageApplication()' is obsolete and has been replaced with 'variant.getPackageApplicationProvider()'.
_

Q:新しいAPIへの移行により、これらの非推奨の警告をどのように回避できますか?

27
Martin Zeitler

古いバージョンのgradleを使用することもできます。 Gradleのバージョンを3.5.0から3.2.1に変更しましたが、動作しました。 enter image description here

0
inspiredMichael

少し危険なソリューション:

def variant = findYourVariantSomehow()
def output = findCorrectOutputInVariant(variant)
def fileName = output.outputFileName

def fileDir = variant.packageApplicationProvider.get().outputDirectory.get()

def apkFile = file("$fileDir/$fileName")

ソース

0
Peter