Android
gradle
AndroidStudio
AndroidGradlePlugin

AndroidStudio で APK を特定のフォルダにコピーする Gradle の設定

More than 3 years have passed since last update.

AndroidStudio で APK のファイル名を変更する Gradle の設定 | DevAchieve

APK をリネームしましたが、

出力されるフォルダが build/outputs/apk/ なので

変更したいことがあるかと思います。

Gradle の Task を定義してあげれば

任意のフォルダにコピーする処理を実行することができます。

ついでに ProGuard が有効なら ProGuard 関連ファイルもコピーします。


Gradle で Signed APK とProGuard 関連ファイルをコピーするタスクを設定する


app/build.gradle

applicationVariants.all { variant ->

if (variant.buildType.name.equals("release")) {
variant.outputs.each { output ->
if (output.outputFile != null && output.outputFile.name.endsWith('.apk')) {
// Rename APK
def applicationId = defaultConfig.applicationId
def versionCode = defaultConfig.versionCode
def versionName = defaultConfig.versionName
def date = new java.text.SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date())
def newName = "${applicationId}_r${versionCode}_v${versionName}_${date}.apk"

def publish = project.tasks.create("publishAll")

// Move and Rename APK
def task = project.tasks.create("publish${variant.name.capitalize()}Apk", Copy)
task.from(output.outputFile)
task.rename(output.outputFile.name, newName)
task.into(file("${variant.name}/apk").getAbsolutePath())

task.dependsOn variant.assemble
publish.dependsOn task

// Move ProGuard
if (variant.buildType.runProguard) {
def copyTask = project.tasks.create("copy${variant.name.capitalize()}MappingText", Copy)
def buildTypeName = variant.buildType.name
copyTask.from(file("build/outputs/proguard/${buildTypeName}").path)
copyTask.into(file("${variant.name}/proguard").getAbsolutePath())

copyTask.dependsOn variant.assemble
task.dependsOn copyTask
}
}
}
}
}



実行

./gradlew publishAll

app/release/apk/ に Signed APK が、

app/release/proguard/ に ProGuard 関連ファイルがコピーされます。


参考

AndroidStudioでAPKを作ったあとに特定のディレクトリにAPKをコピーする - Qiita