Android could not rename aar file in assembly

Hi, I am trying to build and rename my aar file using gradle, but get the above error:

A problem occurred evaluating project ':app'. > Could not find property 'outputs' on BuildType_Decorated{name=variant, debuggable=false, testCoverageEnabled=false, jniDebuggable=false, pseudoLocalesEnabled=false, renderscriptDebuggable=false, renderscriptOptimLevel=3, applicationIdSuffix=null, versionNameSuffix=null, minifyEnabled=false, zipAlignEnabled=true, signingConfig=null, embedMicroApp=true, mBuildConfigFields={}, mResValues={}, mProguardFiles=[], mConsumerProguardFiles=[], mManifestPlaceholders={}}. 

Here is my full build script on gradle

  apply plugin: 'com.android.library' android.libraryVariants.all { variant -> def alignedOutputFile = output.outputFile def unalignedOutputFile = output.packageApplication.outputFile logger.warn('You got to variant: ' + variant + ' and output: ' + output) // Customise APK filenames (to include build version) if (variant.buildType.zipAlignEnabled) { // normal APK output.outputFile = new File(alignedOutputFile.parent, alignedOutputFile.name.replace(".aar", "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".aar")) } // 'unaligned' APK output.packageApplication.outputFile = new File(unalignedOutputFile.parent, unalignedOutputFile.name.replace(".aar", "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".aar")) } android { compileSdkVersion 21 buildToolsVersion '21.1.2' repositories { flatDir { dirs 'libs' } } defaultConfig { minSdkVersion 14 targetSdkVersion 21 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } /* Both Joda-Time imports have these 2 files and they conflict with each other. 'exclude' is the workaround. */ android.packagingOptions { exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.3' compile(name: 'etsdk-3.5.0', ext: 'aar') // 3rd Party Libraries Required for SDK integration compile 'com.fasterxml.jackson.core:jackson-annotations:2.4.4' compile 'com.fasterxml.jackson.core:jackson-databind:2.0.6' compile 'org.joda:joda-convert:1.7' compile 'joda-time:joda-time:2.6' compile 'com.j256.ormlite:ormlite-android:4.48' compile 'com.j256.ormlite:ormlite-core:4.48' compile 'com.belladati:httpclientandroidlib:4.3.0' compile 'com.radiusnetworks:AndroidIBeaconLibrary:0.7.6' compile 'com.google.android.gms:play-services:4.0.30' } // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.1.+' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } 
+5
source share
2 answers

I think you might have your version of the code in the wrong place. I tried the following and it worked for me:

 android.applicationVariants.all { variant -> variant.outputs.each{ output -> logger.warn('You got to variant: ' + variant + ' and output: ' + output) } } 

I put this at the top level in build.gradle and not in buildTypes or something else, and I see this:

You got to the option: com.and roid.build.gradle.internal.api.ApplicationVariantImpl_Decorated@ 3ab912fb and the output: com.a ndroid.build.gradle.internal.api.ApkVariantOutputImpl_Decorated@ 6441365a

You got to the option: com.and roid.build.gradle.internal.api.ApplicationVariantImpl_Decorated@ dc7d23 and the output: com.a ndroid.build.gradle.internal.api.ApkVariantOutputImpl_Decorated@ b9b8546

to find the output variable and iterate over it.

Edit: since you want to use official sources, go to the “Manipulating Tasks” section here: http://tools.android.com/tech-docs/new-build-system/user-guide

From the site:

In Android projects, this is a little more complicated because it can be a large number of the same task, and their name is generated based on assembly types and products.

To fix this, the android object has two properties:

 applicationVariants (only for the app plugin) libraryVariants (only for the library plugin) testVariants (for both plugins) 
+3
source

You first reference output here:
def alignedOutputFile = output.outputFile

However, you did not declare it, so you get a warning that Gradle Could not find property 'output' .

You need to either go through the output belonging to your variant , as in this post :

 android.libraryVariants.all { variant -> variant.outputs.each { output -> output.outputFile = ... } } 

or fully qualify him, for example,
def alignedOutPutFile = variant.outputs[0].outputFile

+4
source

All Articles