#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をコピーする