Giter Club home page Giter Club logo

triple-t / gradle-play-publisher Goto Github PK

View Code? Open in Web Editor NEW
4.1K 81.0 336.0 4.01 MB

GPP is Android's unofficial release automation Gradle Plugin. It can do anything from building, uploading, and then promoting your App Bundle or APK to publishing app listings and other metadata.

License: MIT License

Kotlin 99.91% HTML 0.09%
android-development play-store gradle-plugin gpp mobile android apps automation deployment gradle-play-publisher

gradle-play-publisher's People

Contributors

alextrotsenko avatar bhurling avatar caerbannog avatar carlitosdroid avatar chrissd23 avatar christiankatzmann avatar clhols avatar geckour avatar gmazzo avatar goooler avatar gtcompscientist avatar johnjohndoe avatar masudr4n4 avatar mikehardy avatar minakov avatar mirland avatar nicolas-raoul avatar nrudenko avatar panpeter avatar poeschl avatar rocboronat avatar ryogak avatar shiraji avatar stefma avatar supercilex avatar technoir42 avatar vekexasia avatar wenterline-godaddy avatar wojtek-kalicinski avatar zacsweers avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gradle-play-publisher's Issues

Deferring applicationId retrieval to when the publishApkTask runs

Right now, the applicationId is captured at configuration and persisted throughout the PlayPublishTask's lifetime, even though a build might dynamically change the applicationId after that. Retrieving the APK file would run into the same issue if the developer set custom APK names, but it doesn't run until the PlayPublishApkTask runs, and thus retrieves the correct final name after the app has been assembled. My proposal is to do the same with applicationId. I think it would be an easy change, since the variant instance is held in the PlayPublishApkTask.

In PlayPublishApkTask, instead of using the saved applicationId field, we can simply call variant.applicationId. I think this should work, though it might have to be variant.mergedFlavor.applicationId (I'm not entirely sure if they can ever be different).

If you're open to it, I'd be happy to send a pull request your way.

Can't find title, fulldescription etc.

I'm not sure I am doing it right, I could do publishApkRelease task, upload a new apk, but I could't update the listing, I have the descriptions and title files in structure <project_name\app\src\main\play<de-DE and en-US>\listing<title.txt fulldescription.txt shortdescription.txt>, I got error The app has no title/short descripts. Below is the screenshots. Can anyone tell me what I am missing.

1

2

4

Thanks.

Support new splits API

Bear in mind, that said API allows developer substantial degree of freedom, so implementation must be flexible as well.

Exception with android gradle tools 1.1.2

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.2'
        classpath 'com.github.triplet.gradle:play-publisher:1.0.0'
    }
}
Error:(1, 0) Expecting a stack map frame
Exception Details:
  Location:
    com/android/build/gradle/internal/TaskManager.getExtension()Lcom/android/build/gradle/BaseExtension; @5: aconst_null
  Reason:
    Error exists in the bytecode
  Bytecode:
    0x0000000: 2ab4 005e b001 b0                      

also you can try

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.2'
        classpath 'com.google.apis:google-api-services-androidpublisher:v2-rev13-1.19.0'
    }
}

Add support for updating app's details

Google Publishing API provides ability to set:

  • Default language of the app
  • Contact Phone
  • Contact mail
  • Contact website

Necessity of setting the language from script is obvious. Meanwhile phone, main and website are required information in Google Play Dev Console and could speed up 1st publishing of the app.

Here is example of passing this data to Google API:

            final AppDetails newDetails = new AppDetails();
            newDetails.setContactEmail("[email protected]")
                    .setContactPhone("+49777777777")
                    .setContactWebsite("http://somesite.com")
                    .setDefaultLanguage(Locale.GERMANY.toString());

            Update updateAppsDetailsRequest = edits
                    .details()
                    .update(ApplicationConfig.PACKAGE_NAME,
                            editId,
                            newDetails);
            AppDetails updatedAppsDetails = updateAppsDetailsRequest.execute();

(Idea) Set applicationID from variant rather than parsing manifest

Instead of using ManifestParser at all, simply set applicationId with variant.applicationId. Not sure there would be any noticeable performance improvement, but just an idea I thought I'd throw out there. Takes out a parsing step and lets you set it while looping over the application variants anyway.

If it's something you think would be worthwhile, I'd be happy to pull request with the change.

FAILURE: Build failed with an exception.

Hello,

I have include your library and try to upload apk file to my developer account. But i am not able to get it updated. I got error message with log like below:

D:\someDirectory\myProject>gradlew publishApkRelease
:buildSrc:compileJava UP-TO-DATE
:buildSrc:compileGroovy
:buildSrc:processResources UP-TO-DATE
:buildSrc:classes
:buildSrc:jar
:buildSrc:assemble
:buildSrc:compileTestJava UP-TO-DATE
:buildSrc:compileTestGroovy UP-TO-DATE
:buildSrc:processTestResources UP-TO-DATE
:buildSrc:testClasses UP-TO-DATE
:buildSrc:test UP-TO-DATE
:buildSrc:check UP-TO-DATE
:buildSrc:build

FAILURE: Build failed with an exception.

  • What went wrong:
    Failed to notify task execution graph listener.

    com.google.common.hash.HashCode.fromString(Ljava/lang/String;)Lcom/google/comm
    on/hash/HashCode;
    com.google.common.hash.HashCode.fromString(Ljava/lang/String;)Lcom/google/comm
    on/hash/HashCode;
    com.google.common.hash.HashCode.fromString(Ljava/lang/String;)Lcom/google/comm
    on/hash/HashCode;
    com.google.common.hash.HashCode.fromString(Ljava/lang/String;)Lcom/google/comm
    on/hash/HashCode;
    com.google.common.hash.HashCode.fromString(Ljava/lang/String;)Lcom/google/comm
    on/hash/HashCode;

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug
    option to get more log output.

BUILD FAILED

Total time: 6.929 secs

Am i doing something wrong or there is problem with the library. Please help me to resolved this issue.

GoogleJsonResponseException: 500 Internal Server Error

Hi,

First of all thanks for plugin. I am using your plugin to upload apk to google play and faced a problem. I run publishApk task with debug mode. In log I see that all of the request are returned with Http.Ok response (200). But when the plugin tries to commit the changes in Edit by sending request https://www.googleapis.com/androidpublisher/v2/applications/...:commit it gets the response

[com.google.api.client.http.HttpTransport] {
"error": {
"code": 500,
"message": null
}
}

I do not understand what can be the reason of it? Maybe you have some ideas?

Thanks in advance.

Folder path

The play folder must be in src/${flavor}/play but there is any way to configure another path?
Perhaps something like:

play {
    track 'production'
    path 'src/customer/${flavor}/play'
}

Error message on texts which are to long.

It would be nice to have a error message when you exceed the char limit of the play store fields.
If you like that idea, I will invest some time and do a pull request.

Different gradle tasks for pushing to different Play Store channels

Hi there, is it possible to make the plugin create more than one gradle task so that a different task is used to push to a different Play Store channel?

E.g. I want to push an APK to different channels from different GitHub branches on my CI server, and the only way to do that I am aware of is to have a different config for gradle-play-publisher in every branch of my project. Is that the only way?

Thanks!

Support image downloading in bootstrap task

This is a leftover from #14. Currently the API only supports downloading thumbnail versions of the play store graphics. We should file a feature request somewhere (maybe here).

As soon as we get the original-sized images via the API we can enable this feature.

401 Unauthorized

Hi,

I am trying to upload an existing app. I have a service account setup (with proper permissions) with a p12 file and changes to gradle file as mentioned in the documentation but end up with this error.

-------------- RESPONSE --------------
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="https://accounts.google.com/AuthSubRequest", error=invalid_token
X-XSS-Protection: 1; mode=block
Expires: Thu, 05 Mar 2015 17:07:09 GMT
Alternate-Protocol: 443:quic,p=0.08
Server: GSE
X-Content-Type-Options: nosniff
Cache-Control: private, max-age=0
X-Frame-Options: SAMEORIGIN
Vary: X-Origin
Vary: Origin
Transfer-Encoding: chunked
Date: Thu, 05 Mar 2015 17:07:09 GMT
Content-Encoding: gzip
Content-Type: application/json; charset=UTF-8

Any suggestions?

Thanks!

use other buildTypes

I find it currently not possible to specify another buildType to be uploaded to play.
Is that correct?
Would a pull-request for such a feature be considered?

We have a buildType "playStore" that is used for the playStore and release is used for hockeyApp releases...

Language not supported

Hi there,

I translated my descriptions and all in many languages,
Now, when I want to upload the translations, I got this error :

com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
"code" : 400,
"errors" : [ {
"domain" : "androidpublisher",
"message" : "Language not supported.",
"reason" : "unsupportedListingLanguage"
} ],
"message" : "Language not supported."
}

Is that possible to get more info, like which language is concerned ?

Thank you, this plugin is just awesome ;)

FileNotFoundException

Did everything as described in readme

after running gradle publishApkRelease I get

java.io.FileNotFoundException: .... /app/build/outputs/play/release

why it is looking by default inside play folder instead off apk?
I'm not running any other plugins, custom tasks

Description

Hi guys!

Thanks for your plugin, it's awesome !
I would like to know if you are going to add the description as for the what's new summary ?
If so, when ?

Best

404 Not Found

Hi,

I have followed the documentation on the gradle-play-publisher and Google API but seem to be getting this error.

com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found
{
"code" : 404,
"errors" : [ {
"domain" : "global",
"location" : "packageName",
"locationType" : "parameter",
"message" : "No application was found for the given package name.",
"reason" : "applicationNotFound"
} ],
"message" : "No application was found for the given package name."
}

There was a similar issue reported before and the suggestion was to link a package name to the project but I did not find such a step in the documentation. Clearly, I am missing something. Can you point me in the right direction?

Thanks!

noFullDescription

Hi,
I just tested the plugin for publishing descriptions , title, shortdescription and whatsnew.
I created 2 folders :

  • fr-FR
    • listing
      • description
      • shortdescription
      • title
    • whatsnew
  • en-US
    • listing
      • description
      • shortdescription
      • title
    • whatsnew

And I'm getting this error:

Error:Execution failed for task ':app:publishListingMyAPKPackage'.
> com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
  {
    "code" : 403,
    "errors" : [ {
      "domain" : "androidpublisher",
      "message" : "This app has no full description for language fr_FR.",
      "reason" : "noFullDescription"
    }, {
      "domain" : "androidpublisher",
      "message" : "This app has no full description for language en_US.",
      "reason" : "noFullDescription"
    } ],
    "message" : "This app has no full description for language fr_FR."
  }```

build error use gradle 2.3

now i use gradle version 2.3
android build gradle version 1.1.3
play-publisher version 1.0.2

the error is

  • What went wrong:
    A problem occurred evaluating project ':app'.

    Could not find method play() for arguments [build_b6dp6swbwb3sfm4ofhfloa9zh$_run_closure4@477c7b19] on project ':app'.

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

but use gradle version 2.2.1 it's can work perfact!

No images uploaded to Google Play

Script do not upload screenshots to Google Play, text listing is updated without any problem. No error message is thrown.

Tested version: 0.14.1

My setup is following:

  1. Screenshots are in correct directories:
  • en-US
    • phoneScreenshots
      • mainscreenshot.png
    • sevenInchScreenshots
      • mainscreenshot.png
    • tenInchScreenshots
      • mainscreenshot.png
  1. Upload images flag is set to true
play {
    serviceAccountEmail = 'acount'
    pk12File = file('certificate.p12')
    uploadImages = true
}

Is there any other settings which I missed?

Use with Cordova?

Hello there, looks like a great tool. I am a cordova dev which means I know JS and not a ton about gradle (even though my build process relies upon it). I'm wondering if you know of anyone using this in the cordova android build process. Specifically I am interested in using this plugin to upload the apks that cordova spits out. Unfortunately I don't even know where to start. Do you have any gradle resources that might help me to shoehorn this into the cordova build pipeline? If not, no worries, but I figured I'd ask.

Thank you!

Specify in README which permissions must be given in API access

Preferably we would like to only use the permissions we need, but currently we only ever get 401 Unauthorized failures. Could you provide any insights regarding to this? Specifically which permissions are necessary and maybe consider specifying them in the README for future users.

Encoding of listing texts

The encoding of characters outside the ascii range are not correct when using the bootstrap-task.
After a quick look I think simply supplying the encoding to FileUtils.writeStringToFile in BootstrapTask should do it (I don't have the possibility to test or pull-request currently)

Unable to update listing details

Hi,

I am trying to upload listing details such as title, fulldescription and shortdescription with a folder structure as mentioned in the documentation. For some reason, only "whatsnew" is updated and everything under the listing directory is ignored. Any thoughts or suggestions on this?

screen shot 2015-03-12 at 9 24 29 am

Support hooking into publish tasks

It would be nice to have some mechanism to hook custom code into the publisher tasks. The main object to expose here would be the current Edits instance. That way we allow developers to perform additional work on the API without implementing every feature request in the main plugin.

Who's interested in this feature?

Perhaps we can collect some use cases here.

Use it with external signing config

Hi, is there a way to use it also with a external signing config?

In my project I have setup a gradle method that reads the signing details from a external file and inject them into the signingconfigs at runtime of a gradle build. I did this to hide my private signing keys and so on.
To help you understand how its done, I added the interesting spots of my gradle file.

    signingConfigs {
        googlePlay {
            //Placeholder which gets automatically filled during project sync. Needs the right setting file.
            //This settings is not in the source control, because it contains sensitive information.
        }
    }
afterEvaluate { project ->

    def props = getExternalProperties();

    setupSigning(props)
    setupFabricApiFile(props)
}
def setupSigning(properties) {
    if (properties == null) {
        System.err.println("Could not set signing config. No properties");
        return;
    }

    def configName = 'googlePlay'

    if (android.signingConfigs.hasProperty(configName)) {

        //Android signing information
        android.signingConfigs[configName].storeFile = file(properties['path'] + '/' + properties['storeFile'])
        android.signingConfigs[configName].storePassword = properties['storePassword']
        android.signingConfigs[configName].keyAlias = properties['keyAlias']
        android.signingConfigs[configName].keyPassword = properties['keyPassword']
        println("Setup keystore settings.")
    }
}

Full version of it -> https://github.com/Poeschl/TryAndRemove/blob/b62e0caf999c9bf2ba601d1c416cf3d95e7c8b79/app/build.gradle

As result of it the process works fine. Also the signing does the right thing. But the android plugin is not generating the zipAlign task at a project sync. I think thats why your plugin complain about the missing zipalign task.
Is it possible to bypass this requirement or replace it with a other test? Like check if you have all of the four nessasary signing parameter?

Cannot upload new apks

Is it possible to upload brand new apks? And I don't mean updates, but the initial apk?

Custom APK path/name

For anyone that sets custom APK names, it would be nice to be able to set the APK name to look for rather than the default

Multiple Service Accounts

I'm working on an application that has two flavours. Each flavour corresponds to a brand/client. Each brand has it's own developer account.

Is it possible to configure a per-flavour service account? do you have plans to add this functionality?

Do you guys know how can I accomplish this in the current state?
Maybe with a task that configures the play plugin for each flavour before actually running the upload?

Thanks

Add dependency for gradle-play-publisher's tasks from client's app script.

We have our store data stored separately from our source code.

I want to have task loadStoreListing, that loads resources from remote server and put them inside 'src/release/play' (as it's required by gradle-play-publisher plug-ing).
I want to make this task executing before generateReleasePlayResources (GeneratePlayResourcesTask).

Here is part of my script to build my project called app

...
preBuild.dependsOn applySettings

/**
 * Loads listing data and resources
 */
task loadStoreListing << {
     //load store listing and images and put them to 'src/release/play' for "play" plug-ing
}

generateReleasePlayResources.dependsOn loadStoreListing

...

First dependency (preBuild.dependsOn applySettings) works fine for me. But when I add 2nd dependency for the task from "play" plug-in I am getting error:

* What went wrong:
A problem occurred evaluating project ':app'.
> Could not find property 'generateReleasePlayResources' on project ':app'.

How can I achieve my goal? Any ideas what I am doing wrong?

Promo Video

Every time a listing update gets pushed, the manually added YouTube-Promo-Video-Link gets deleted.

Manual publish

Hi,

I have noticed that the plugin uploads all the content - like APK and metadata. But it only gets it to the "Read to Publish" state. I had to manually publish the app to get it to the play store. Is this not supported by the plugin or am I missing something here?

Thanks!

How to publish to alpha and beta channesl

Hi,

Could you explain publishPaidRelease , would it go to production..
What should we do to publish to alpha and beta channels..

When I use this plugin

  • What went wrong:
    Execution failed for task ':publishRelease'.

    com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidd
    en
    {
    "code" : 403,
    "errors" : [ {
    "domain" : "androidpublisher",
    "message" : "Testing-track (alpha/beta) APK appears in another track, code
    1",
    "reason" : "testingTrackApkInMultipleTracks"
    } ],
    "message" : "Testing-track (alpha/beta) APK appears in another track, code 1
    "
    }

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug
    option to get more log output.

BUILD FAILED

Regards,
Nagendra

Check to make sure an app exists first

It seems that you must upload an initial APK:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found
{
"code" : 404,
"errors" : [ {
"domain" : "global",
"location" : "packageName",
"locationType" : "parameter",
"message" : "No application was found for the given package name.",
"reason" : "applicationNotFound"
} ],
"message" : "No application was found for the given package name."
}

Metadata for all flavors being packaged into the apk

Hi,

I have noticed that when I have metadata for multiple flavors as shown below, the publishrelease command packages the metadata for all flavors into an apk irrespective of the flavor we try to build. This is causing the apk to exceed size restrictions. Any thoughts why it would not package only the metadata for the flavor that is being built?

  • [src]
    |
    • - [Flavor1]
      |
      • - [play]
        |
        | ....[folders like screenshots and so on]
        |
    • - [Flavor2]
      |
      • - [play]
        |
        | ....[folders like screenshots and so on]
        |

Mention whatsnew character limit in README

Just a suggestion, as the API error response isn't very descriptive. The "what's new" text can be a max of 80 characters (as it's replacing the "Promo Text" field in the store listing").

The response if you exceed this looks like this:

> com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
  {
    "code" : 403,
    "errors" : [ {
      "domain" : "androidpublisher",
      "message" : "The recent changes text for APK version 2565 is too long for language .",
      "reason" : "apkRecentChangesTooLong"
    } ],
    "message" : "The recent changes text for APK version 2565 is too long for language ."
  }

images are not downloaded

I have this gradle file to manage my upload:

apply plugin: 'play'

play {
    serviceAccountEmail = System.getenv("PLAYSTORE_EMAIL")
    pk12File = file(System.getenv("PLAYSTORE_PK12_KEYSTORE"))
    track = 'alpha'
}

When I run bootstrapShowcaseReleasePlayResources(I have a flavor called "Showcase") The images are not beeing downloaded.

Am I doing something wrong or is this feature broken? Is there a way I can tell the plugin to be verbose?

multiple productFlavors

Hi,

Is this possible to have multiple productFlavors, and so multiple 'play directory' ? I would like to have something like this :

  • play
    • productflavor1
      • fr-FR
        • listing
          • description
          • shortdescription
          • title
        • whatsnew
    • productflavor2
      • fr-FR
        • listing
          • description
          • shortdescription
          • title
        • whatsnew

Using custom APK names causes errors

I am using this code in my build.gradle to generate an APK with the version name inside the filename.

applicationVariants.all { variant ->
        def file = variant.outputFile
        variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
      }

This causes an error with the publish task:

/app/build/outputs/apk/app-galway-release.apk (No such file or directory)

Here is the stack trace also

10:22:18.238 [ERROR] [org.gradle.BuildExceptionReporter] 
10:22:18.238 [ERROR] [org.gradle.BuildExceptionReporter] FAILURE: Build failed with an exception.
10:22:18.238 [ERROR] [org.gradle.BuildExceptionReporter] 
10:22:18.238 [ERROR] [org.gradle.BuildExceptionReporter] * What went wrong:
10:22:18.239 [ERROR] [org.gradle.BuildExceptionReporter] Execution failed for task ':app:publishGalwayRelease'.
10:22:18.239 [ERROR] [org.gradle.BuildExceptionReporter] > java.io.FileNotFoundException: /Users/darko/Android/Workspace/dictation-recorder-android/app/build/outputs/apk/app-galway-release.apk (No such file or directory)
10:22:18.239 [ERROR] [org.gradle.BuildExceptionReporter] 
10:22:18.240 [ERROR] [org.gradle.BuildExceptionReporter] * Exception is:
10:22:18.241 [ERROR] [org.gradle.BuildExceptionReporter] org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:publishGalwayRelease'.
10:22:18.241 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
10:22:18.241 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
10:22:18.241 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
10:22:18.242 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
10:22:18.242 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
10:22:18.242 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
10:22:18.242 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
10:22:18.243 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
10:22:18.243 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
10:22:18.243 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:289)
10:22:18.243 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
10:22:18.243 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
10:22:18.244 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
10:22:18.244 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
10:22:18.244 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:86)
10:22:18.244 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
10:22:18.245 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
10:22:18.245 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
10:22:18.245 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67)
10:22:18.245 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
10:22:18.245 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
10:22:18.246 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:54)
10:22:18.246 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:166)
10:22:18.246 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
10:22:18.246 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81)
10:22:18.246 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64)
10:22:18.247 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:76)
10:22:18.247 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:31)
10:22:18.247 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.tooling.internal.provider.ConfiguringBuildAction.run(ConfiguringBuildAction.java:150)
10:22:18.247 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:35)
10:22:18.248 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:45)
10:22:18.248 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
10:22:18.248 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
10:22:18.248 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:42)
10:22:18.248 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
10:22:18.249 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
10:22:18.249 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
10:22:18.249 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
10:22:18.249 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
10:22:18.249 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.ReturnResult.execute(ReturnResult.java:34)
10:22:18.250 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
10:22:18.250 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:71)
10:22:18.250 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:69)
10:22:18.250 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.util.Swapper.swap(Swapper.java:38)
10:22:18.251 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:69)
10:22:18.251 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
10:22:18.251 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
10:22:18.251 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
10:22:18.252 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
10:22:18.252 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:60)
10:22:18.252 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
10:22:18.252 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
10:22:18.252 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:45)
10:22:18.253 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.DaemonStateCoordinator.runCommand(DaemonStateCoordinator.java:186)
10:22:18.253 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy.doBuild(StartBuildOrRespondWithBusy.java:49)
10:22:18.253 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
10:22:18.253 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
10:22:18.254 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.HandleStop.execute(HandleStop.java:36)
10:22:18.254 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
10:22:18.254 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.DaemonHygieneAction.execute(DaemonHygieneAction.java:39)
10:22:18.254 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
10:22:18.254 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.CatchAndForwardDaemonFailure.execute(CatchAndForwardDaemonFailure.java:32)
10:22:18.255 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
10:22:18.255 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.exec.DefaultDaemonCommandExecuter.executeCommand(DefaultDaemonCommandExecuter.java:51)
10:22:18.255 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.handleCommand(DefaultIncomingConnectionHandler.java:155)
10:22:18.255 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.receiveAndHandleCommand(DefaultIncomingConnectionHandler.java:128)
10:22:18.256 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.run(DefaultIncomingConnectionHandler.java:116)
10:22:18.256 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
10:22:18.256 [ERROR] [org.gradle.BuildExceptionReporter] Caused by: org.gradle.internal.UncheckedException: java.io.FileNotFoundException: /Users/darko/Android/Workspace/dictation-recorder-android/app/build/outputs/apk/app-galway-release.apk (No such file or directory)
10:22:18.256 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:39)
10:22:18.256 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:66)
10:22:18.257 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:219)
10:22:18.257 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:212)
10:22:18.257 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:201)
10:22:18.257 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:533)
10:22:18.258 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:516)
10:22:18.258 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
10:22:18.258 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
10:22:18.258 [ERROR] [org.gradle.BuildExceptionReporter]    ... 67 more
10:22:18.258 [ERROR] [org.gradle.BuildExceptionReporter] Caused by: java.io.FileNotFoundException: /Users/darko/Android/Workspace/dictation-recorder-android/app/build/outputs/apk/app-galway-release.apk (No such file or directory)
10:22:18.259 [ERROR] [org.gradle.BuildExceptionReporter]    at com.google.api.client.http.FileContent.getInputStream(FileContent.java:71)
10:22:18.259 [ERROR] [org.gradle.BuildExceptionReporter]    at com.google.api.client.googleapis.media.MediaHttpUploader.resumableUpload(MediaHttpUploader.java:397)
10:22:18.259 [ERROR] [org.gradle.BuildExceptionReporter]    at com.google.api.client.googleapis.media.MediaHttpUploader.upload(MediaHttpUploader.java:336)
10:22:18.259 [ERROR] [org.gradle.BuildExceptionReporter]    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:418)
10:22:18.260 [ERROR] [org.gradle.BuildExceptionReporter]    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
10:22:18.260 [ERROR] [org.gradle.BuildExceptionReporter]    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)
10:22:18.260 [ERROR] [org.gradle.BuildExceptionReporter]    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$execute.call(Unknown Source)
10:22:18.260 [ERROR] [org.gradle.BuildExceptionReporter]    at de.triplet.gradle.play.PlayPublishTask.publish(PlayPublishTask.groovy:50)
10:22:18.260 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
10:22:18.261 [ERROR] [org.gradle.BuildExceptionReporter]    ... 74 more
10:22:18.261 [ERROR] [org.gradle.BuildExceptionReporter] 
10:22:18.261 [LIFECYCLE] [org.gradle.BuildResultLogger] 
10:22:18.261 [LIFECYCLE] [org.gradle.BuildResultLogger] BUILD FAILED
10:22:18.262 [LIFECYCLE] [org.gradle.BuildResultLogger] 

google-api-java-client's Guava dependency conflicts with Android Gradle Plugin's more recent one

More of an FYI that you might want to include in the README.

I'm not sure why it was working fine before, but I ran into this tonight. Basically the google-api-java-client jar that the publisher API depends on uses an old version of Guava (issue here). The Android gradle plugin uses a newer version of Guava, and having these two on the same classpath causes issues. Specifically, builds would fail due to the plugin throwing a NoSuchMethodError exception for asCharSink(...), which was added in Guava 14 and doesn't exist in the older version that the api client uses.

I'll paste an example stacktrace from Gradle at the bottom, but for now here is a workaround. When declaring the plugin classpath, exclude Guava like so:

classpath ('com.github.triplet.gradle:play-publisher:0.0.4') {
    exclude group: 'com.google.guava'
}

This prevents the plugin from accidentally using the older guava version during builds.

Here's an example stacktrace of what would happen:

<...gradle tasks...>
:apps:AppName:collectFlavorReleaseMultiDexComponents UP-TO-DATE
:apps:AppName:packageAllFlavorReleaseReleaseClassesForMultiDex UP-TO-DATE
:apps:AppName:shrinkFlavorReleaseMultiDexComponents UP-TO-DATE
:apps:AppName:createFlavorReleaseMainDexClassList UP-TO-DATE
:apps:AppName:dexFlavorRelease FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':apps:AppName:dexFlavorRelease'.
> com.google.common.io.Files.asCharSink(Ljava/io/File;Ljava/nio/charset/Charset;[Lcom/google/common/io/FileWriteMode;)Lcom/google/common/io/CharSink;

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':apps:AppName:dexFlavorRelease'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:305)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:47)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:35)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.ReturnResult.execute(ReturnResult.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:71)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:69)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:69)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:70)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:45)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator.runCommand(DaemonStateCoordinator.java:258)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy.doBuild(StartBuildOrRespondWithBusy.java:49)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.HandleCancel.execute(HandleCancel.java:36)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.HandleStop.execute(HandleStop.java:30)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.DaemonHygieneAction.execute(DaemonHygieneAction.java:39)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.CatchAndForwardDaemonFailure.execute(CatchAndForwardDaemonFailure.java:32)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.DefaultDaemonCommandExecuter.executeCommand(DefaultDaemonCommandExecuter.java:52)
    at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.handleCommand(DefaultIncomingConnectionHandler.java:154)
    at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.receiveAndHandleCommand(DefaultIncomingConnectionHandler.java:128)
    at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.run(DefaultIncomingConnectionHandler.java:116)
    at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
Caused by: java.lang.NoSuchMethodError: com.google.common.io.Files.asCharSink(Ljava/io/File;Ljava/nio/charset/Charset;[Lcom/google/common/io/FileWriteMode;)Lcom/google/common/io/CharSink;
    at com.android.builder.core.AndroidBuilder.getFilesToAdd(AndroidBuilder.java:1429)
    at com.android.builder.core.AndroidBuilder.convertByteCode(AndroidBuilder.java:1408)
    at com.android.builder.core.AndroidBuilder$convertByteCode$7.call(Unknown Source)
    at com.android.build.gradle.tasks.Dex.doTaskAction(Dex.groovy:136)
    at com.android.build.gradle.tasks.Dex.this$5$doTaskAction(Dex.groovy)
    at com.android.build.gradle.tasks.Dex$this$5$doTaskAction.callCurrent(Unknown Source)
    at com.android.build.gradle.tasks.Dex.taskAction(Dex.groovy:79)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:235)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:222)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 69 more


BUILD FAILED

Total time: 5.648 secs

FileNotFound Exception

Hi,

This seems to be the same issue reported here - #40.

The plugin still seems to looking for the apk in the "play/{variant}release folder instead of apk folder in the outputs directory and fails with an exception. The workaround suggested says add a "play" folder next to a "java" directory. I do not see a "java" directory either.

Any suggestions?

Thanks!

(Idea) Lazily read APK path from variant

Using our setup as an example, we do some processing in applicationVariants.all{...} to format the APK name with some extra information. This however breaks the plugin's ability to find the APK (due to it looking for the default name), so for now we've been using the solution you suggested in #17. This solution isn't really ideal though, as it makes the code depend on an internal field that could change in another release.

What would you think of allowing passing in a map of apkNames, where the key-value schema is defaultApkName -> customApkName. This way, we can inform the plugin what the new name is, and it can find it because it already has the old name.

I would be happy to take a crack at the idea in a pull request if you'd be amenable to it, let me know!

Gradle tasks are not available

Simply put, none of the gradle tasks are available in either command line or Android Studio (1.1.0 and 1.2 P4) and I do not know what to look for. I'm working with a barebones Android Studio project and have followed the Readme. When I get a chance, I'm going to try this process again on a separate PC.

I'm using:
Gradle 2.2.1
Android Tools Gradle 1.1.3
Play-Publisher 1.0.2
on OSX 10.10

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.