web-dev-qa-db-ja.com

Gradle 4.1でapk出力フォルダーを変更する

APK output folderを変更したいのですが、これは私が以前使用していたことです:

applicationVariants.all { variant ->
    variant.outputs.all {
        def filePath = "${rootProject.rootDir.absolutePath}/apks/${variant.name}"
        println("My Path: " + filePath)
        outputFileName = filePath
    }
}

ただし、Gradle 4.1(Android studio 3.0プレビュー)では機能しませんでした。上記のパスとしてフォルダーを生成する代わりに、以下の画像のような古いdebugフォルダー内に上記のパスを生成しました。

enter image description here

誰にもこれに対する解決策がありますか?ありがとう。

16

これは、gradle 4.xへのアップグレード後に出力パスを同じに保つための回避策です。

applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "../" + outputFileName
    }
}

プラットフォーム/Android/build/outputs/apk/Android-release.apkでapkが生成されるようになりました

20
Harry Han

移行ガイド から:

Variant APIを使用してバリアント出力を操作することは、新しいプラグインでは機能しません。以下に示すように、ビルド時にAPK名を変更するなどの単純なタスクでも機能します。


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

ただし、outputFileオブジェクトへのアクセスを含むより複雑なタスクは機能しなくなりました。これは、バリアント固有のタスクが構成段階で作成されなくなったためです。これにより、プラグインはすべての出力を事前に認識しなくなりますが、設定時間も短縮されます。

17
azizbekian

コンピューターのユーザー名に応じたフォルダーではなく、既知のフォルダーに出力apkが必要だったため、同様の問題がありました。だから私はこのように修正しました:

applicationVariants.all { variant ->
    variant.outputs.all {
        def apk = output.outputFile;
        def newName = apk.name.replace(".apk", "-v" + variant.versionName + "-RELEASE.apk");
        newName = newName.replace("-" + variant.buildType.name, "");

        outputFileName = "./" + newName
    }
}

これで、apkを取得します: ".../outputs/apk/flavorName/buildTypeName/xxx.apk"

お役に立てば幸いです。

10
Marta Rodriguez