web-dev-qa-db-ja.com

Gradle警告:variant.getOutputFile()およびvariant.setOutputFile()は非推奨になりました

Androidアプリケーションプロジェクトで次の簡略化された構成を使用しています。

Android {
    compileSdkVersion 20
    buildToolsVersion "20.0.0"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 20
        versionCode 1
        versionName "1.0.0"

        applicationVariants.all { variant ->
            def file = variant.outputFile
            def fileName = file.name.replace(".apk", "-" + versionName + ".apk")
            variant.outputFile = new File(file.parent, fileName)
        }
    }    
}

Gradleプラグインをv.0.13.0に、Gradleをv.2.1に更新しました。次の警告が表示されます。

WARNING [Project: :MyApp] variant.getOutputFile() is deprecated. 
    Call it on one of variant.getOutputs() instead.
WARNING [Project: :MyApp] variant.setOutputFile() is deprecated. 
    Call it on one of variant.getOutputs() instead.
WARNING [Project: :MyApp] variant.getOutputFile() is deprecated. 
    Call it on one of variant.getOutputs() instead.
WARNING [Project: :MyApp] variant.setOutputFile() is deprecated. 
    Call it on one of variant.getOutputs() instead. 

非推奨の警告を取り除くために、Groovyスクリプトをどのように書き直すことができますか?

34
JJD

Larry Schiefer からの回答に基づいて、スクリプトを次のように変更できます。

Android {
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk')) {
                def fileName = outputFile.name.replace('.apk', "-${versionName}.apk")
                output.outputFile = new File(outputFile.parent, fileName)
            }
        }
    }
}
60
Thorbear

完全なコードスニペットは次のようになります。

// Customize generated apk's name with version number
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def outputFile = output.outputFile
        if (outputFile != null && outputFile.name.endsWith('.apk')) {
            def manifestParser = new com.Android.builder.core.DefaultManifestParser()
            def fileName = outputFile.name.replace(".apk", "-DEBUG-" + manifestParser.getVersionName(Android.sourceSets.main.manifest.srcFile) + ".apk")
            output.outputFile = new File(outputFile.parent, fileName)
        }
    }
}
16
Thomas

ビルドバリアント出力APIは、最新のAndroid Gradleプラグインで変更されました。これにより、複数の出力ファイル(またはディレクトリ)が許可されるようになったため、このメソッドは非推奨としてマークされています。_variant.outputs_代わりに、Collectionが返されます。これにより、反復して各出力ファイルを取得できます。ファイルオブジェクトがnull以外であり、条件に一致することを確認する必要があります(たとえば、 '.apk'拡張子。)次に、新しいFileオブジェクトを作成して、コレクション内の出力に追加できます。

10
Larry Schiefer

Gradle 3.0.0のAndroidプラグイン

このように使えます

Android.applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${variant.name}-${variant.versionName}.apk"
    }
}

Androidドキュメント https://developer.Android.com/studio/build/gradle-plugin-3-0-0- migration.html#update_gradle

4
inder