oliviergauthier / gradle-appcenter-plugin Goto Github PK
View Code? Open in Web Editor NEWThis gradle plugin allow you to upload each build variant of your android application to separate AppCenter Apps.
License: MIT License
This gradle plugin allow you to upload each build variant of your android application to separate AppCenter Apps.
License: MIT License
Thanks for making this excellent plugin available.
I ran into a hiccup when migrating from a previous HockeyApp plugin I was using to this one. Our project contains a custom gradle task that generates a changelog when executed and makes the text of this changelog available via a property added to the project's ext
container. The changelog is ephemeral; it is generated solely for the APK upload task and is not otherwise written to a file or saved. I wanted to use this generated string as the input to your plugin extension's releaseNotes
property, but setting it from this task had no effect, because the releaseNotes
property on your UploadAppCenterTask
is assigned from an afterEvaluate
closure added when your plugin is applied (during the configuration phase). My task generates the changelog after this has occurred (during the execution phase), which is too late.
I'm far from a Gradle expert, but in the previous plugin we were using the upload task read the values directly from the project extension on-demand, during task execution, rather than baking the values in during the configuration phase. There may be an even better way to do this, but the approach of reading the extension properties on-demand seemed to work well with the other plugin.
Any thoughts on this as a potential enhancement? Thanks for your time.
(FWIW, as a workaround for now we are using File.createTempFile
during the configuration phase and assigning the result to the extension property, then writing to that file during the execution phase. This works fine but has the minor cost of unconditionally creating a temp file during every configuration, even if the upload tasks won't be invoked.)
We are seeing intermittent failures to upload APKs to appcenter. Recently it happens much more often. It seems the failure falls to this line of the plugin. https://github.com/oliviergauthier/gradle-appcenter-plugin/blob/master/src/main/kotlin/com/betomorrow/gradle/appcenter/infra/AppCenterUploader.kt#L74
* What went wrong:
11:01:37 Execution failed for task ':xxx:appCenterUploadApkxxx'.
11:01:37 > com.betomorrow.gradle.appcenter.infra.AppCenterUploaderException: Fetching release id failed: Tried 60 times.
We are running plugin version 1.3.0. Please let us know if you have any suggestion. Thanks!
Good afternoon!
The AGP 3.6.0 is on the path to release. And AppCenter plugin is not compatible with it:
Caused by: java.lang.NoSuchMethodError: com.android.build.gradle.tasks.PackageAndroidArtifact.getOutputDirectory()Ljava/io/File;
at com.betomorrow.gradle.appcenter.AppCenterPlugin.handleVariant(AppCenterPlugin.kt:48)
at com.betomorrow.gradle.appcenter.AppCenterPlugin.access$handleVariant(AppCenterPlugin.kt:12)
at com.betomorrow.gradle.appcenter.AppCenterPlugin$apply$$inlined$with$lambda$1.execute(AppCenterPlugin.kt:29)
at com.betomorrow.gradle.appcenter.AppCenterPlugin$apply$$inlined$with$lambda$1.execute(AppCenterPlugin.kt:12)
...
Looks like today app center disables deprecated API for uploads so I had to switch to 1.3.0 version of this plugin. However it was impossible to use it for.
I've got flavor env
with values dev
, prod
so I use appCenterUploadDevRelease
task for upload of app to appcenter. And I receive such error
Could not determine the dependencies of task ':app:appCenterUploadMappingDevRelease'.
> Task with path 'assembleMappingDevRelease' not found in project ':app'
When I tried to just upload apk with task appCenterUploadApkDevRelease
I got another error
* What went wrong:
Could not determine the dependencies of task ':app:appCenterUploadApkDevRelease'.
> Task with path 'assembleApkDevRelease' not found in project ':app'.
It looks like when trying to add dependencies tasks names of these tasks were wrongly created as I suppose it should be assembleDevRelease
instead of assembleApkDevRelease
or assembleMappingDevRelease
If the env var is not there the call to System.getEnv is not null safe and doesnt return null
private fun getEnvVar(propertyName: String): Long? {
return System.getenv(propertyName).replace(".", "_").toLongOrNull()
}
Should be
private fun getEnvVar(propertyName: String): Long? {
return System.getenv(propertyName)?.replace(".", "_")?.toLongOrNull()
}
When uploading a build type to that does not produce a mapping the plugin will crash whenever uploadMappingFiles
is enabled, this bug was introduced here:
And can be reproduced by running (with: uploadMappingFiles
set to true)
gradlew app:appCenterUploadDebug --stacktrace
Stacktrace:
Caused by: java.lang.IllegalStateException: Expected file collection to contain exactly one file, however, it contains no files.
at org.gradle.api.internal.file.AbstractFileCollection.getSingleFile(AbstractFileCollection.java:86)
at com.betomorrow.gradle.appcenter.AppCenterPlugin$handleVariant$$inlined$let$lambda$1$1$2.invoke(AppCenterPlugin.kt:74)
at com.betomorrow.gradle.appcenter.AppCenterPlugin$handleVariant$$inlined$let$lambda$1$1$2.invoke(AppCenterPlugin.kt:12)
at com.betomorrow.gradle.appcenter.tasks.UploadAppCenterTask.upload(UploadAppCenterTask.kt:40)
Proxy server settings that are specified in gradle.properties file will be ignored when uploading apps to AppCenter.
The following proxy configuration will result in a HTTP error 403 behind my corporate proxy server.
systemProp.https.proxyPort=8080
systemProp.http.proxyHost=proxy
systemProp.https.proxyHost=proxy
systemProp.http.proxyPort=8080
It seems App Center has a max limit of 5000 characters for release notes:
Can't distribute release, code=400, reason={"code":"bad_request","message":"Error: The release notes exceeds the limit of 5000 characters."}
Can you add a flag to truncate it ?
This plugin is awesome! I would like to apply for a non-android project (gradle build support). Please show me how to do that! Thanks you!!!
The issue has been started, Can not push apk to appcenter
Can't prepare release upload, code=404, reason={"message":"Resource not found: /v0.1/apps///release_uploads. Correlation ID: 5737e0d5-edc2-4955-9f51-a22f9dae3273","statusCode":404,"code":"Not Found"}
On Android Gradle plugin version 4.0.1 and Gradle version 6.1.1 everything is working fine. After update to Android Gradle plugin version 4.1.0 and Gradle version 6.5 upload task failed with this output:
Cannot query the value of this property because it has no value available.
Will there be update to support latest Gradle version?
Not sure if its plugin related, i will try to do an upload manually, but do you know why an upload to a group imported from Hockey might fail? It works from the Appcenter UI but it fails silently from the plugin, it will just skip that group. Unfortunately there is no way to test this unless you already have an Hockey imported group and an Hockey account.
Would it be possible to have CHANGELOG for the plugin?
Can we also see a clear history of the releases?
Can you also add compatibility matrix for AGP versions and plugin version?
Hi, could you upload a license file to the project?
Appcenter has Store distribution enabled and connect with play console
Following is the snippet for publishing to store.
appcenter distribute stores publish \ --file /path/to/file.aab \ --store Production \ --app {app_owner}/{app_name} \ --release-notes "Some note."
For more info:
https://docs.microsoft.com/en-us/appcenter/distribution/stores/googleplay
Hello, thank you for your plugin, itβs very helpful
But in last version you remade tasks to give opportunity to upload already assemble apps
But I would like to have tasks to consistently assemble and upload app
Hello,
I need some help the library is not working properly for me.
`
FAILURE: Build failed with an exception.
com.betomorrow.gradle.appcenter.infra.AppCenterUploaderException: Can't prepare release upload, code=404, reason={"message":"Not found. Correlation ID: 2ebbddbb-d1e5-4bb3-93f0-d9bd80f90666","statusCode":404,"code":"Not Found"}
Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
Get more help at https://help.gradle.org
BUILD FAILED in 17s
`
im using :
com.android.tools.build:gradle:3.6.0
gradle.plugin.com.betomorrow.gradle:appcenter-plugin:1.2.1
Does the latest version not support APK uploads? I'm getting this error having just updated from 1.3.0 to 2.0.1. My app doesn't yet support AAB, but this seems like an AAB specific task that has been triggered.
> Task :app:appCenterUploadAabCompanyDebug FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:appCenterUploadAabCompanyDebug'.
> com/android/build/gradle/internal/scope/InternalArtifactType$BUNDLE
I have submitted an attempt at adding support for AGP 7 in pull request 64. Not sure about the contributing guidelines for moving forward with this, but happy to assist in any way I can.
The latest build error seems to be related to configuration of publishing keys, which I may not be able to resolve?
Let me know how I can help.
Hi, I don't have any flavors in my application. I'm using only build types:
buildTypes {
release {
...
}
debug {
...
}
}
Is it possible to use this plugin without flavors?
Ok, I managed to do it, but right now I have error:
* What went wrong:
Execution failed for task ':app:appCenterUploadDebug'.
> okhttp3.HttpUrl.get(Ljava/lang/String;)Lokhttp3/HttpUrl;
This plugin uses deprecated AppCenter APIs as seen here https://openapi.appcenter.ms/#/distribute/releaseUploads_create and
Hi,
I noticed the latest plugin version 1.3.0 doesn't include release notes to the App center upload. Despite they are provided in the Gradle configuration like this:
appcenter {
apiToken = ....
ownerName = "...."
releaseNotes = "...."
apps {......
Is there any known issue or format change in App center?
I got this error when uploading the apk
com.betomorrow.gradle.appcenter.infra.AppCenterUploaderException: Can't prepare release upload, code=500, reason={"code":"internal_server_error","message":"internal error (Support ID: 50d95910-9f21-4c79-8562-6ae9909cd7ee)"}
After checking AppCenter website, I found out that since Dec 8th 2020 (the day I face the error), The
appcenter distribute release command in App Center CLI versions prior to v2.7.0 has stopped functioning
. They also mention that if you are using custom scripts with our swagger API, please adjust your script based off the implementation of App Center CLI
.
I think it affects the plugin and should be fixed.
Is it possible to use this plugin to upload app bundles (.aab files)?
Quick Start documentation is not working. I have checked the src code the implementation is differ from MD file.
Listed all the gradlew tasks. It is not listing appCenterDevDebug task.
Note:
task is not appearing.
Please do a needful and guide me.
Thanks in advance
dependencies {
classpath 'com.android.tools.build:gradle:7.0.3'
classpath "gradle.plugin.com.betomorrow.gradle:appcenter-plugin:2.0.3"
...
}
com.android.tools.build:gradle:7.0.3 - need for other plugins (require 7+ version)
When try to use - task appCenterUploadStageDebug not found (use settings like at readme except names at productFlavors, so should be create such task)
It's very sad because before we use com.teamwanari.appcenter-publish-plugin and it's worked fine with build gradle 7+, but now it's use wrong api urls for upload, so decide to use this plugin, but catch such problem
I see that this parameter exists but default value is false
.
Hi! There is no mapping.txt file uploaded to AppCenter for given .apk. Do you plan to add this?
We want to avoid uploading mapping.txt
file to app center. Is there any way to achieve it?
Caused by: java.lang.NoSuchMethodError: okhttp3.Interceptor$Chain.connectTimeoutMillis()I
at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:107)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:126)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at com.betomorrow.gradle.appcenter.infra.AppCenterAPIFactory$create$builder$1.invoke(AppCenterAPIFactory.kt:21)
at com.betomorrow.gradle.appcenter.infra.AppCenterAPIFactory$create$builder$1.invoke(AppCenterAPIFactory.kt:7)
at com.betomorrow.gradle.appcenter.infra.LambdaInterceptor.intercept(OkHttpBuilder.kt:76)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:212)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:254)
at okhttp3.RealCall.execute(RealCall.java:92)
at retrofit2.OkHttpCall.execute(OkHttpCall.java:188)
at com.betomorrow.gradle.appcenter.infra.AppCenterUploader.uploadApk(AppCenterUploader.kt:21)
at com.betomorrow.gradle.appcenter.tasks.UploadAppCenterTask.upload(UploadAppCenterTask.kt:35)
Does the latest version not support APK uploads? I'm getting this error having just updated from 1.3.0 to 2.0.1. My app doesn't yet support AAB, but this seems like an AAB specific task that has been triggered.
> Task :app:appCenterUploadAabCompanyDebug FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:appCenterUploadAabCompanyDebug'.
> com/android/build/gradle/internal/scope/InternalArtifactType$BUNDLE
com.betomorrow.gradle.appcenter.infra.AppCenterUploaderException: Can't prepare release upload, code=401, reason={"message":"9c103022-b3ce-41f7-b45c-de9ee51b72a1","statusCode":401,"code":"Unauthorized"}
whats the meaning of "message":"9c103022-b3ce-41f7-b45c-de9ee51b72a1"
here ?
My configuration:
dependencies {
classpath "com.android.tools.build:gradle:4.0.0-alpha07"
}
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1-milestone-2-all.zip
Error:
Caused by: java.lang.NoSuchMethodError: com.android.build.gradle.tasks.PackageAndroidArtifact.getOutputDirectory()Ljava/io/File;
at com.betomorrow.gradle.appcenter.AppCenterPlugin.handleVariant(AppCenterPlugin.kt:48)
at com.betomorrow.gradle.appcenter.AppCenterPlugin.access$handleVariant(AppCenterPlugin.kt:12)
at com.betomorrow.gradle.appcenter.AppCenterPlugin$apply$$inlined$with$lambda$1.execute(AppCenterPlugin.kt:29)
at com.betomorrow.gradle.appcenter.AppCenterPlugin$apply$$inlined$with$lambda$1.execute(AppCenterPlugin.kt:12)
at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1.lambda$run$0(DefaultListenerBuildOperationDecorator.java:152)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.reapply(DefaultUserCodeApplicationContext.java:60)
at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1.run(DefaultListenerBuildOperationDecorator.java:152)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction.execute(DefaultListenerBuildOperationDecorator.java:149)
at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:92)
at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:80)
at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42)
at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:231)
at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:150)
at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
... 125 more
Line in the source:
The same value for 'symbol_type' (AndroidProguard
) is used to upload the Proguard mappings file as it is for uploading the symbols zip file. The AppCenter API documentation states that Breakpad
should be used when uploading symbols and AndroidProguard
should be used for the mappings file.
https://docs.microsoft.com/en-us/appcenter/diagnostics/android-ndk
https://openapi.appcenter.ms/#/crash/symbolUploads_create
Something strange is happening.
If I have app at appcenter "Android - App" - it fails to upload:
Task has not declared any outputs despite executing actions.
--> POST https://api.appcenter.ms/v0.1/apps/Company/Android%20-%20App/release_uploads (0-byte body)
<-- 403 Forbidden https://api.appcenter.ms/v0.1/apps/Company/Android%20-%20App/release_uploads (665ms, unknown-length body)
Upload works as soon as I rename it to "Android-App":
--> POST https://api.appcenter.ms/v0.1/apps/Company/Android-App/release_uploads (0-byte body)
<-- 201 Created https://api.appcenter.ms/v0.1/apps/Company/Android-App/release_uploads (1163ms, 253-byte body)
-
I've tried to compare what is going on the fastlane side. Since iOS friends don't have such issue. Unfortunately, my ruby is not fluent to understand the difference https://github.com/microsoft/fastlane-plugin-appcenter/blob/master/lib/fastlane/plugin/appcenter/helper/appcenter_helper.rb#L508
It looks like they don't do url encoding. Am I right? Can it work?
we can manually upload app bundle to appcenter.
can we add a support to upload appbundle to appcenter ?
Since yesterday uploads to App center started to fail with the following error:
Can't prepare release upload, code=400, reason={"error":{"code":400,"message":"One or more invalid parameters:\nParameter file_size must be greater than 0 : 0"}}
Note: The upload was working perfectly fine before. I even tried to update to version 1.3.0 but I'm still getting the same error
FAILURE: Build failed with an exception.
CONFIGURE FAILED in 1s
Cannot add task 'appCenterUploadActualBackendQa' as a task with that name already exists.
My splits configuration
splits {
abi {
enable true
reset()
include "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
universalApk false
}
}
I can not figure how can I upload variants with multi dimensions
example if i have two dimensions flavorDimensions "client", "environment"
stage {
dimension "environment"
applicationIdSuffix ".stage"
}
development {
dimension "environment"
applicationIdSuffix ".development"
}
production {
dimension "environment"
applicationIdSuffix ".production"
}
A {
dimension "client"
}
B {
dimension "client"
}
C {
dimension "client"
}
D {
dimension "client"
}
how can I build APK for all client with stage flavor and all client with development flavor
There are two duplicate issues already in this repo and closed. No thread answers issue. Can you please add an example to use the tasks such as "appCenterUploadBetaRelease"? My gradle command: gradle tasks is giving
Could not get unknown property 'appCenterUploadBetaRelease' for root project
for this below line :
appCenterUploadBetaRelease.dependsOn runMsBuild
Not sure whether I am using this in a right way or not.
Our project has split abi builds. Recently we included 'arm64-v8a'
to the list of ABIs as recently required by Google Play and now the plugin uploads the arm64-build instead of the one we have been uploading before armeabi-v7a
and our testers are unable to install our app due to incorrect ABI.
If it helps, this is where the arm64-binary has this path when built through the plugin:
./app/build/outputs/apk/flavorName/release/app-flavor-name-arm64-v8a-release.apk
while the arm7-binary has this path:
./app/build/outputs/apk/flavorName/release/app-flavor-name-armeabi-v7a-release.apk
android {...
splits {
abi {
enable true
reset()
include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
universalApk false
}
}
...}
After moving our builds to the Kotlin-DSL, the upload task is no longer being registered for the various build flavors.
The kotlin-dsl picks up the appcenter -> apps extensions, but I must use either a create("flavorName") or getByName("flavorName") to get the rest of the extensions configuration.
basically when I now run the: gradlew tasks
I get no entries for the appcenter plugin, where I did before the migration.
Imagine that you have an APK which you would just like to upload. Would be nice if it was not rebuild by the upload script.
Hi,
I get Could not find com.betomorrow.gradle:appcenter-plugin:1.1.1
when using the line classpath "com.betomorrow.gradle:appcenter-plugin:1.1.1"
However classpath "gradle.plugin.com.betomorrow.gradle:appcenter-plugin:1.1.1"
works for me. You might want to update you readme file.
Thanks
I haven't been able to get appName to take an in an environment variable if it has been assigned. I basically want to do something like.
flavorDebug {
appName = "${System.env.APP_NAME}"
}
unfortunately every way I've tried, it ignores it and fails the upload. Only hard coding the name seems to work.
HI, I have question about distributionGroups
settings
appcenter {
// ...
distributionGroups = ["Beta"] // Name of the AppCenter Distribution Group
// ...
}
This example is Beta
Group. How to set it for All users
(of default group) ?
I search the document and cannot find the answers.
Thanks.
I have read these documents
https://docs.microsoft.com/en-us/appcenter/distribution/groups
https://github.com/MicrosoftDocs/appcenter-docs/blob/live/docs/distribution/groups.md
But no instructions about default group.
Hello! I'm unable to see the plugin tasks listed in the README. I am able to see other tasks from other plugins like Crashlytics.
I believe that I'm looking for the following tasks:
appCenterUploadAlphaRelease
appCenterUploadBetaRelease
appCenterUploadProdRelease
but I don't find them in the list of tasks when I run the command ./gradlew tasks --all
Here's my build.gradle
buildscript {
ext.kotlin_version = '1.3.31'
repositories {
google()
jcenter()
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "gradle.plugin.com.betomorrow.gradle:appcenter-plugin:1.1.4"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
Here's my app/build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'io.fabric'
apply plugin: 'com.betomorrow.appcenter'
Properties properties = new Properties()
try {
properties.load(project.rootProject.file("local.properties").newDataInputStream())
} catch(Exception e) {
// do nothing. if file doesn't exist, then environment variables will be used below.
}
def appVersionCode = Integer.valueOf(properties.getProperty("version.code",System.getenv("SAMPLE_APP_VERSION_CODE")))
def appVersionName = properties.getProperty("version.name",System.getenv("SAMPLE_APP_VERSION_NAME"))
def distributionGroup = properties.getProperty("distributionGroup",System.getenv("DISTRIBUTION_GROUP"))
android {
signingConfigs {
sampledistro {
...
}
}
compileSdkVersion 28
defaultConfig {
applicationId "..."
minSdkVersion 19
targetSdkVersion 28
versionCode appVersionCode
versionName appVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// release notes
ext.betaDistributionReleaseNotesFilePath="release_notes.txt"
// add group aliases
ext.betaDistributionGroupAliases=distributionGroup
signingConfig signingConfigs.sampledistro
}
}
dataBinding {
enabled = true
}
}
buildscript {
repositories {
maven { url "https://plugins.gradle.org/m2/" }
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath "gradle.plugin.com.betomorrow.gradle:appcenter-plugin:1.1.4"
classpath 'io.fabric.tools:gradle:1.26.1'
}
}
flavorDimensions "beta"
productFlavors {
beta {
dimension "beta"
applicationIdSuffix ".beta"
versionNameSuffix "-beta"
}
}
appcenter {
apiToken = "" // Api Token from AppCenter user profile
ownerName = "" // Owner Name of the AppCenter Application
distributionGroups = [""] // Name of the AppCenter Distribution Group
releaseNotes = file("../../release-notes.md") // Can be a file or text
notifyTesters = true // Send mail to testers
apps { // Here we manage 3 AppCenter applications : alpha, beta and prod
beta {
dimension = "beta"
appName = "Sample App Android Beta"
}
}
}
Here's the output of the command ./gradlew tasks --all
app:androidDependencies - Displays the Android dependencies of the project.
app:signingReport - Displays the signing info for the base and test modules
app:sourceSets - Prints out all the source sets defined in this project.
app:assemble - Assemble main outputs for all the variants.
app:assembleAndroidTest - Assembles all the Test applications.
app:build - Assembles and tests this project.
app:buildDependents - Assembles and tests this project and all projects that depend on it.
app:buildNeeded - Assembles and tests this project and all projects it depends on.
app:bundle - Assemble bundles for all the variants.
app:clean - Deletes the build directory.
app:cleanBuildCache - Deletes the build cache directory.
app:compileDebugAndroidTestSources
app:compileDebugSources
app:compileDebugUnitTestSources
app:compileReleaseSources
app:compileReleaseUnitTestSources
init - Initializes a new Gradle build.
wrapper - Generates Gradle wrapper files.
app:lintFix - Runs lint on all variants and applies any safe suggestions to the source code.
buildEnvironment - Displays all buildscript dependencies declared in root project 'sample'.
androidkitelibrary-debug:buildEnvironment - Displays all buildscript dependencies declared in project ':androidkitelibrary-debug'.
app:buildEnvironment - Displays all buildscript dependencies declared in project ':app'.
components - Displays the components produced by root project 'sample'. [incubating]
androidkitelibrary-debug:components - Displays the components produced by project ':androidkitelibrary-debug'. [incubating]
app:components - Displays the components produced by project ':app'. [incubating]
dependencies - Displays all dependencies declared in root project 'sample'.
androidkitelibrary-debug:dependencies - Displays all dependencies declared in project ':androidkitelibrary-debug'.
app:dependencies - Displays all dependencies declared in project ':app'.
dependencyInsight - Displays the insight into a specific dependency in root project 'sample'.
androidkitelibrary-debug:dependencyInsight - Displays the insight into a specific dependency in project ':androidkitelibrary-debug'.
app:dependencyInsight - Displays the insight into a specific dependency in project ':app'.
dependentComponents - Displays the dependent components of components in root project 'sample'. [incubating]
androidkitelibrary-debug:dependentComponents - Displays the dependent components of components in project ':androidkitelibrary-debug'. [incubating]
app:dependentComponents - Displays the dependent components of components in project ':app'. [incubating]
help - Displays a help message.
androidkitelibrary-debug:help - Displays a help message.
app:help - Displays a help message.
model - Displays the configuration model of root project 'sample'. [incubating]
androidkitelibrary-debug:model - Displays the configuration model of project ':androidkitelibrary-debug'. [incubating]
app:model - Displays the configuration model of project ':app'. [incubating]
projects - Displays the sub-projects of root project 'sample'.
androidkitelibrary-debug:projects - Displays the sub-projects of project ':androidkitelibrary-debug'.
app:projects - Displays the sub-projects of project ':app'.
properties - Displays the properties of root project 'sample'.
androidkitelibrary-debug:properties - Displays the properties of project ':androidkitelibrary-debug'.
app:properties - Displays the properties of project ':app'.
tasks - Displays the tasks runnable from root project 'sample' (some of the displayed tasks may belong to subprojects).
androidkitelibrary-debug:tasks - Displays the tasks runnable from project ':androidkitelibrary-debug'.
app:tasks - Displays the tasks runnable from project ':app'.
app:installDebug - Installs the Debug build.
app:installDebugAndroidTest - Installs the android (on device) tests for the Debug build.
app:installRelease - Installs the Release build.
app:uninstallAll - Uninstall all applications.
app:uninstallDebug - Uninstalls the Debug build.
app:uninstallDebugAndroidTest - Uninstalls the android (on device) tests for the Debug build.
app:uninstallRelease - Uninstalls the Release build.
Verification tasks
------------------
app:check - Runs all checks.
app:connectedAndroidTest - Installs and runs instrumentation tests for all flavors on connected devices.
app:connectedCheck - Runs all device checks on currently connected devices.
app:connectedDebugAndroidTest - Installs and runs the tests for debug on connected devices.
app:deviceAndroidTest - Installs and runs instrumentation tests using all Device Providers.
app:deviceCheck - Runs all device checks using Device Providers and Test Servers.
app:lint - Runs lint on all variants.
app:lintDebug - Runs lint on the Debug build.
app:lintRelease - Runs lint on the Release build.
app:lintVitalRelease - Runs lint on just the fatal issues in the release build.
app:test - Run unit tests for all variants.
app:testDebugUnitTest - Run unit tests for the debug build.
app:testReleaseUnitTest - Run unit tests for the release build.
Other tasks
-----------
app:assembleDebug - Assembles main output for variant debug
app:assembleDebugAndroidTest - Assembles main output for variant debugAndroidTest
app:assembleDebugUnitTest - Assembles main output for variant debugUnitTest
app:assembleRelease - Assembles main output for variant release
app:assembleReleaseUnitTest - Assembles main output for variant releaseUnitTest
app:buildDebugPreBundle
app:buildReleasePreBundle
app:bundleDebug - Assembles bundle for variant debug
app:bundleDebugAndroidTestClasses
app:bundleDebugAndroidTestResources
app:bundleDebugClasses
app:bundleDebugResources
app:bundleDebugUnitTestClasses
app:bundleRelease - Assembles bundle for variant release
app:bundleReleaseClasses
app:bundleReleaseResources
app:bundleReleaseUnitTestClasses
app:checkDebugAndroidTestDuplicateClasses
app:checkDebugDuplicateClasses
app:checkDebugManifest
app:checkReleaseManifest
clean
app:collectDebugDependencies
app:collectReleaseDependencies
app:compileDebugAidl
app:compileDebugAndroidTestAidl
app:compileDebugAndroidTestJavaWithJavac
app:compileDebugAndroidTestKotlin - Compiles the debugAndroidTest kotlin.
app:compileDebugAndroidTestRenderscript
app:compileDebugAndroidTestShaders
app:compileDebugJavaWithJavac
app:compileDebugKotlin - Compiles the debug kotlin.
app:compileDebugRenderscript
app:compileDebugShaders
app:compileDebugUnitTestJavaWithJavac
app:compileDebugUnitTestKotlin - Compiles the debugUnitTest kotlin.
app:compileLint
app:compileReleaseAidl
app:compileReleaseJavaWithJavac
app:compileReleaseKotlin - Compiles the release kotlin.
app:compileReleaseRenderscript
app:compileReleaseShaders
app:compileReleaseUnitTestJavaWithJavac
app:compileReleaseUnitTestKotlin - Compiles the releaseUnitTest kotlin.
app:configureDebugDependencies
app:configureReleaseDependencies
app:consumeConfigAttr
app:crashlyticsStoreDeobsRelease - Crashlytics target to be invoked after completing release builds.
Cleans up Crashlytics-generated resource files. Caches and uploads deobfuscation
files to Crashlytics servers.
app:crashlyticsUploadDeobsRelease - Uploads stored deobfuscation files to Crashlytics.
app:crashlyticsUploadDistributionDebug - Uploads an APK to Crashlytics for distribution.
app:crashlyticsUploadDistributionRelease - Uploads an APK to Crashlytics for distribution.
app:createDebugCompatibleScreenManifests
app:createMockableJar
app:createReleaseCompatibleScreenManifests
app:dataBindingExportBuildInfoDebug
app:dataBindingExportBuildInfoRelease
app:dataBindingExportFeaturePackageIdsDebug
app:dataBindingExportFeaturePackageIdsRelease
app:dataBindingGenBaseClassesDebug
app:dataBindingGenBaseClassesRelease
app:dataBindingMergeDependencyArtifactsDebug
app:dataBindingMergeDependencyArtifactsRelease
app:dataBindingMergeGenClassesDebug
app:dataBindingMergeGenClassesRelease
app:extractApksForDebug
app:extractApksForRelease
app:extractProguardFiles
app:fabricGenerateResourcesDebug - Injects the build id used by the Fabric SDK.
app:fabricGenerateResourcesRelease - Injects the build id used by the Fabric SDK.
app:generateDebugAndroidTestAssets
app:generateDebugAndroidTestBuildConfig
app:generateDebugAndroidTestResources
app:generateDebugAndroidTestResValues
app:generateDebugAndroidTestSources
app:generateDebugAssets
app:generateDebugBuildConfig
app:generateDebugFeatureMetadata
app:generateDebugFeatureTransitiveDeps
app:generateDebugResources
app:generateDebugResValues
app:generateDebugSources
app:generateDebugUnitTestAssets
app:generateDebugUnitTestResources
app:generateDebugUnitTestSources
app:generateReleaseAssets
app:generateReleaseBuildConfig
app:generateReleaseFeatureMetadata
app:generateReleaseFeatureTransitiveDeps
app:generateReleaseResources
app:generateReleaseResValues
app:generateReleaseSources
app:generateReleaseUnitTestAssets
app:generateReleaseUnitTestResources
app:generateReleaseUnitTestSources
app:javaPreCompileDebug
app:javaPreCompileDebugAndroidTest
app:javaPreCompileDebugUnitTest
app:javaPreCompileRelease
app:javaPreCompileReleaseUnitTest
app:kaptDebugAndroidTestKotlin
app:kaptDebugKotlin
app:kaptDebugUnitTestKotlin
app:kaptGenerateStubsDebugAndroidTestKotlin
app:kaptGenerateStubsDebugKotlin
app:kaptGenerateStubsDebugUnitTestKotlin
app:kaptGenerateStubsReleaseKotlin
app:kaptGenerateStubsReleaseUnitTestKotlin
app:kaptReleaseKotlin
app:kaptReleaseUnitTestKotlin
app:mainApkListPersistenceDebug
app:mainApkListPersistenceDebugAndroidTest
app:mainApkListPersistenceRelease
app:makeApkFromBundleForDebug
app:makeApkFromBundleForRelease
app:mergeDebugAndroidTestAssets
app:mergeDebugAndroidTestJniLibFolders
app:mergeDebugAndroidTestResources
app:mergeDebugAndroidTestShaders
app:mergeDebugAssets
app:mergeDebugJniLibFolders
app:mergeDebugResources
app:mergeDebugShaders
app:mergeDexDebug
app:mergeDexDebugAndroidTest
app:mergeExtDexDebug
app:mergeExtDexDebugAndroidTest
app:mergeReleaseAssets
app:mergeReleaseJniLibFolders
app:mergeReleaseResources
app:mergeReleaseShaders
app:packageDebug
app:packageDebugAndroidTest
app:packageDebugBundle
app:packageDebugUniversalApk
app:packageRelease
app:packageReleaseBundle
app:packageReleaseUniversalApk
app:preBuild
app:preDebugAndroidTestBuild
app:preDebugBuild
app:preDebugUnitTestBuild
app:prepareLintJar
app:prepareLintJarForPublish
app:preReleaseBuild
app:preReleaseUnitTestBuild
app:processDebugAndroidTestJavaRes
app:processDebugAndroidTestManifest
app:processDebugAndroidTestResources
app:processDebugJavaRes
app:processDebugManifest
app:processDebugResources
app:processDebugUnitTestJavaRes
app:processReleaseJavaRes
app:processReleaseManifest
app:processReleaseResources
app:processReleaseUnitTestJavaRes
app:reportBuildArtifactsDebug
app:reportBuildArtifactsRelease
app:reportSourceSetTransformAndroidTest
app:reportSourceSetTransformAndroidTestDebug
app:reportSourceSetTransformDebug
app:reportSourceSetTransformMain
app:reportSourceSetTransformRelease
app:reportSourceSetTransformTest
app:reportSourceSetTransformTestDebug
app:reportSourceSetTransformTestRelease
app:resolveConfigAttr
app:signDebugBundle
app:signingConfigWriterDebug
app:signingConfigWriterDebugAndroidTest
app:signingConfigWriterRelease
app:signReleaseBundle
app:transformClassesAndResourcesWithR8ForRelease
app:transformClassesWithDexBuilderForDebug
app:transformClassesWithDexBuilderForDebugAndroidTest
app:transformNativeLibsWithMergeJniLibsForDebug
app:transformNativeLibsWithMergeJniLibsForDebugAndroidTest
app:transformNativeLibsWithMergeJniLibsForRelease
app:transformResourcesWithMergeJavaResForDebug
app:transformResourcesWithMergeJavaResForDebugAndroidTest
app:transformResourcesWithMergeJavaResForDebugUnitTest
app:transformResourcesWithMergeJavaResForRelease
app:transformResourcesWithMergeJavaResForReleaseUnitTest
app:validateSigningDebug
app:validateSigningDebugAndroidTest
app:validateSigningRelease
app:writeDebugApplicationId
app:writeDebugModuleMetadata
app:writeReleaseApplicationId
app:writeReleaseModuleMetadata
What am I missing? I'm totally new to gradle so please bear with me. Thank you for making this awesome plugin. Excited to use it.
We have an Android app with native libraries and that requires a "symbols.zip" to be uploaded. See https://docs.microsoft.com/en-us/appcenter/sdk/crashes/android#symbolication
Included plugin by adding following to the app/build.gradle as stated here:
plugins { id "com.betomorrow.appcenter" version "1.1.4" }
Not sure if readme is missing something or something is broken but after gradle sync, I can't see any new tasks when trying with:
./gradlew tasks | grep appCenter
In which group new tasks should appear?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.