Edited at

リリースビルドタスクでproguard関連ファイルをコピーする

More than 3 years have passed since last update.


1.前置き

リリースビルドタスクでapkファイルを特定フォルダにコピーするというのは以前やったのですが、proguard関連の生成ファイルもコミットしていく必要があり、しかしデフォルトの出力フォルダはcleanで削除されてしまうので、うっかりそこでコミット&pushしてしまうと大変なことになってしまいます(経験談(ノД`))。

そこで、progaurd関連ファイルもこのタスク内でコピーするように対応しました。


2.ビルドスクリプト


build.gradle

  signingConfigs {

release
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}

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 versionCode = defaultConfig.versionCode
def versionName = defaultConfig.versionName
def date = new java.text.SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date())
def newName = "AppName_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(deployTo)

task.dependsOn variant.assemble
publish.dependsOn task

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

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

...

if (project.hasProperty('storeFile')) {
android.signingConfigs.release.storeFile = new File(storeFile)
}
if (project.hasProperty('storePassword')) {
android.signingConfigs.release.storePassword = storePassword
}
if (project.hasProperty('keyAlias')) {
android.signingConfigs.release.keyAlias = keyAlias
}
if (project.hasProperty('keyPassword')) {
android.signingConfigs.release.keyPassword = keyPassword
}


{deployTo}/mapping下に、関連ファイルがコピーされます。


3. 参考

以下を参考にしましたが、これらをそのままコピーしても「runProguardなんてないよ」って怒られます。

minifyEnabledにプロパティ名が変わっているせいでした。

また出力フォルダ名もmappingに変わっています。

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

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