4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-02-26

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

4
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?