Android 在构建中重命名 aar 文件失败
Android failed to rename aar file in build
您好,我正在尝试使用 gradle 构建和重命名我的 aar 文件,但出现上述错误:
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={}}.
这是我在 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()
}
}
我认为您的变体代码可能放错地方了。我尝试了以下方法,它对我有用:
android.applicationVariants.all { variant ->
variant.outputs.each{ output ->
logger.warn('You got to variant: ' + variant + ' and output: ' + output)
}
}
我把它放在 build.gradle 的顶层,而不是在 buildTypes 或其他任何地方,我可以看到:
You got to variant:
com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@3ab912fb
and output:
com.android.build.gradle.internal.api.ApkVariantOutputImpl_Decorated@6441365a
You got to variant:
com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@dc7d23
and output:
com.android.build.gradle.internal.api.ApkVariantOutputImpl_Decorated@b9b8546
所以它确实找到了输出变量并对其进行迭代。
编辑:由于您需要官方资源,请转至此处的 'Manipulating tasks' 部分:http://tools.android.com/tech-docs/new-build-system/user-guide
来自网站:
In Android projects, this is a bit more complicated because there
could be a large number of the same task and their name is generated
based on the Build Types and Product Flavors.
In order 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)
您首先在此处引用 output
:
def alignedOutputFile = output.outputFile
但是,您还没有声明它,这就是为什么您收到 Gradle Could not find property 'output'
.
警告的原因
您需要循环遍历属于您的 variant
的 output
,如 this post:
android.libraryVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = ...
}
}
或完全限定它,例如
def alignedOutPutFile = variant.outputs[0].outputFile
您好,我正在尝试使用 gradle 构建和重命名我的 aar 文件,但出现上述错误:
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={}}.
这是我在 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()
}
}
我认为您的变体代码可能放错地方了。我尝试了以下方法,它对我有用:
android.applicationVariants.all { variant ->
variant.outputs.each{ output ->
logger.warn('You got to variant: ' + variant + ' and output: ' + output)
}
}
我把它放在 build.gradle 的顶层,而不是在 buildTypes 或其他任何地方,我可以看到:
You got to variant: com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@3ab912fb and output: com.android.build.gradle.internal.api.ApkVariantOutputImpl_Decorated@6441365a
You got to variant: com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@dc7d23 and output: com.android.build.gradle.internal.api.ApkVariantOutputImpl_Decorated@b9b8546
所以它确实找到了输出变量并对其进行迭代。
编辑:由于您需要官方资源,请转至此处的 'Manipulating tasks' 部分:http://tools.android.com/tech-docs/new-build-system/user-guide
来自网站:
In Android projects, this is a bit more complicated because there could be a large number of the same task and their name is generated based on the Build Types and Product Flavors.
In order 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)
您首先在此处引用 output
:
def alignedOutputFile = output.outputFile
但是,您还没有声明它,这就是为什么您收到 Gradle Could not find property 'output'
.
您需要循环遍历属于您的 variant
的 output
,如 this post:
android.libraryVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = ...
}
}
或完全限定它,例如
def alignedOutPutFile = variant.outputs[0].outputFile