Gradle脚本重命名文件问题

时间:2015-07-09 11:03:26

标签: android android-studio build.gradle

我使用下面的代码生成.apk文件,它工作正常。 但是,为了能够调试我需要对#34; applicationVariants.all"周围的代码进行评论,其他方面的Android Studio表示找不到该文件。

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    def apk = output.outputFile;
                    def newName = "app-release-" + getDate() + ".apk";
                    output.outputFile = new File(apk.parentFile, newName);
                }
            }

        }
    }

如何使其适用于生成.apk文件以及在Android Studio上调试?

更新

我发现了正在发生的事情,实际上当我在文件名中使用日期和时间时,生成的文件中的时间与Android Studio尝试安装的时间不同。

我的函数getDate()返回:

def getDate() {
    def date = new Date()
    def formattedDate = date.format('yyyyMMddHHmm')
    return formattedDate
}

创建的文件是app-release-201507110957.apk。 但是,在Android Studio控制台中,错误是:

Uploading file
    local path: /Volumes/Macintosh HD/AndroidstudioProjects/App/app/build/outputs/apk/app-release-201507110956.apk
    remote path: /data/local/tmp/com.domain.app
Local path doesn't exist.

生成文件上的文件名比Android Studio尝试安装的文件名提前1分钟。 关于我如何解决这个问题的任何想法?我希望文件名中有小时和分钟,因为我可能每天为QA团队生成多个版本。

2 个答案:

答案 0 :(得分:0)

目前,重命名是发布版本的一部分。只需将重命名作为一般操作,如下所示:

android {

  ...

  buildTypes {
    release {
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }

    debug {
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }

  applicationVariants.all { variant ->
      variant.outputs.each { output ->
      def apk = output.outputFile;
      def newName = "app-release-" + getDate() + ".apk";
      output.outputFile = new File(apk.parentFile, newName);
    }
  }
}

答案 1 :(得分:0)

我通过验证变体是否可调试来解决我的问题。

<body>
  <h1>Hello Angular!</h1>
  <div ng-controller="Controller1 as con1">
    <table>
      <theader>
        <tr>

          <th ng-repeat="(key,value) in con1.objectArray[0]">
            {{key}}</th>
        </tr>
      </theader>
      <tbody>
        <tr ng-repeat="object in con1.objectArray">
          <td>{{object.name}}</td>
          <td>{{object.email}}</td>
          <td>{{object.phoneModel}}</td>
          <td>{{object.status}}</td>
          <td>{{object.purchaseDate}}</td>
        </tr>
      </tbody>
    </table>
  </div>
</body>

</html>

就像我只为发布版本应用我的文件名。可调试的将继续使用Android Studio设置的相同名称,因此在调试应用程序时不会产生问题。