打包android库并在生成的aar中包含其他库

时间:2014-04-17 09:00:12

标签: android android-gradle

我想构建一个包含其他库的android库。我有两个这样的工作区:

/workspace1
  /libA
  /myLib

/workspace2
  /myApp

android库myLib依赖于libA。

android应用程序myApp依赖于myLib(并使用libA中的类)。

我想为myLib生成AAR到我的本地maven存储库(没关系)。但是生成的AAR不包含来自libA的类和资源。

请参阅workspace1:

下的build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.+'
        classpath 'com.github.dcendents:android-maven-plugin:1.0'
    }
}

def groupVal = "com.mycompany.android"
def versionVal = "0.1-SNAPSHOT"

def compileSdkVersionVal = 19
def buildToolsVersionVal = "19.0.3"
def minSdkVersionVal = 10
def targetSdkVersionVal = 19

allprojects {
    group = groupVal
    version = versionVal

    repositories {
        mavenCentral()
        mavenLocal()
    }

}

project(':libA') {
    apply plugin: 'android-library'

    android {
        compileSdkVersion compileSdkVersionVal
        buildToolsVersion buildToolsVersionVal

        defaultConfig {
            minSdkVersion minSdkVersionVal
            targetSdkVersion targetSdkVersionVal
            versionCode 1
            versionName versionVal
        }

        lintOptions {
            abortOnError false
        }

        packagingOptions {
            exclude 'META-INF/ASL2.0'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/LICENSE.txt'
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/NOTICE.txt'
        }

    }

}


project(':myLib') {
    apply plugin: 'android-library'
    apply plugin: 'android-maven'

    android {
        compileSdkVersion compileSdkVersionVal
        buildToolsVersion buildToolsVersionVal

        defaultConfig {
            minSdkVersion minSdkVersionVal
            targetSdkVersion targetSdkVersionVal
            versionCode 1
            versionName versionVal
        }

        lintOptions {
            abortOnError false
        }

        packagingOptions {
            exclude 'META-INF/ASL2.0'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/LICENSE.txt'
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/NOTICE.txt'
        }

    }
    dependencies {
        compile project(':libA') {
            export = true
        }
    }
}

你有什么建议吗?

非常感谢,

利奥

2 个答案:

答案 0 :(得分:0)

您应该在myLib项目中依赖libA.jar而不是libA.aar。然后,假设您正在通过myApp / pom.xml构建apk,您应该依赖于该pom文件中的libA.aar。

  • 如果libA.jar不存在,您必须使用' maven install ...'手动创建并将其安装到您的maven存储库(例如.m2)中。命令能够依赖它。

答案 1 :(得分:-1)

如果你希望myLib包含它的依赖关系的类和资源,你需要创建一个所谓的“胖子”'从中。这意味着所有(或选定的)依赖项将与代码本身一起打包到单个存档中。

请注意,通过这种方式,库的使用者将无法动态调整依赖关系版本,因为他们将无法使用您打包到库中的内容。