如何在Android库中包含远程maven依赖项

时间:2015-04-07 19:19:09

标签: android maven jar gradle aar

我有一个非常复杂的问题。我的公司开发了一个SDK,结果是一个AAR文件,该文件已在远程Maven存储库(可以匿名访问)上发布。但是,此AAR具有多个依赖项,例如:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile files('libs/BluetoothLeLibrary-0.0.2.jar')
    compile 'com.google.code.gson:gson:2.3'

    compile 'com.company.sdk.client:sdk-client-lib:1.2.1.1@jar'
    compile 'com.company.internal.commons:enums:1.0@jar'

    compile 'com.google.android.gms:play-services-location:6.5.87'
    compile 'com.android.support:support-v4:21.0.3'
    compile 'com.google.guava:guava:18.0'
    compile 'com.google.api-client:google-api-client-android:1.17.0-rc'
    compile('com.google.api-client:google-api-client:1.17.0-rc') {
        exclude(group: 'xpp3', module: 'xpp3')
        exclude(group: 'org.apache.httpcomponents', module: 'httpclient')
        exclude(group: 'junit', module: 'junit')
        exclude(group: 'com.google.android', module: 'android')
    }
    compile('com.google.http-client:google-http-client-android:1.17.0-rc') {
        exclude(group: 'com.google.android', module: 'android')
    }
}

以com.company开头的是我们公司使用的私有库。它们位于另一个Maven仓库中,只有员工和协作者使用用户名和密码才能访问。

现在,任何开发人员都可以使用此AAR文件来访问其功能。但是,如果依赖项添加如代码示例A所示,则构建过程会中断,因为它需要访问Android Manifest中使用的Google Play Services变量@ integer / google_play_services_version。我找到了两个解决方法,如代码示例B和C所示。但是,通过使用代码示例B,使用SDK的应用程序尝试下载并访问公司的私有库;但由于它们只能通过用户和密码访问,因此gradle无法找到它们。另一方面,代码示例C使应用程序无法在这些库上找到类和方法;奇怪的是,代码编译并运行,但应用程序崩溃了java.lang.VerifyError并拒绝了SDK的类。

如何将这些私有库添加到AAR中,以避免应用程序尝试下载它们?或者我怎么能解决这个问题?

代码示例A:

compile 'com.company.sdk:library:1.3.0.0@aar'

代码示例B:

compile ('com.company.sdk:library:1.3.0.0@aar'){
    transitive=true
}

代码示例C:

compile 'com.google.android.gms:play-services-location:6.5.87'
compile ('com.company.cc.sdk:library:1.3.0.2@aar'){
    exclude(group: 'com.google.android.gms', module:'play-services-location')
}

0 个答案:

没有答案