库模块中的依赖关系

时间:2016-08-08 19:03:24

标签: android gradle aar

我正在Android Studio中构建一个库,它有多个Gradle依赖项,例如estimote和firebase sdk。当我将库导出为aar然后将其导入示例项目时,我收到运行时错误:

E/UncaughtException: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/estimote/sdk/BeaconManager;
                                                                                   at com.mgenio.sdk.BeaconSDK.init(BeaconSDK.java:87)
                                                                                   at com.mgenio.sdk.BeaconSDK.checkSDK(BeaconSDK.java:214)
                                                                                   at com.mgenio.sdk.BeaconSDK.access$800(BeaconSDK.java:33)
                                                                                   at com.mgenio.sdk.BeaconSDK$3.onResponse(BeaconSDK.java:186)
                                                                                   at com.mgenio.sdk.BeaconSDK$3.onResponse(BeaconSDK.java:182)
                                                                                   at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60)
                                                                                   at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
                                                                                   at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
                                                                                   at android.os.Handler.handleCallback(Handler.java:739)
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                   at android.os.Looper.loop(Looper.java:158)
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:7229)
                                                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
                                                                                Caused by: java.lang.ClassNotFoundException: Didn't find class "com.estimote.sdk.BeaconManager" on path: DexPathList[[zip file "/data/app/com.mgenio.smartscansample-1/base.apk"],nativeLibraryDirectories=[/data/app/com.mgenio.smartscansample-1/lib/arm64, /vendor/lib64, /system/lib64]]
                                                                                   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)

是否有一种特殊的方法可以导出我的aar库,因此它包含这些外部依赖项?谢谢!

4 个答案:

答案 0 :(得分:1)

几个月前我遇到过类似的问题,如果您要在存储库中发布库,那么您必须添加一个xml或其他类型的文件,其中包含您的库所依赖的文件。

如果您需要使用任何类的依赖项,当您在应用程序模块的gradle文件中编译库时,必须添加transitive=true才能访问此类或此类资源

compile('mx.segundamano.doubleseekbarview'){
    transitive=true
}

修改

如果您要发布到Bintray - Maven存储库,请将此行添加到您的bintray配置所在的同级别的gradle文件中

task generateSourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier 'sources'
}

artifacts {
    archives generateSourcesJar
}

答案 1 :(得分:0)

  

是否有一种特殊的方法可以导出我的aar库,因此它包含这些外部依赖项?

没有

将您的aar部署到maven或ivy存储库中。

答案 2 :(得分:0)

您只需将相同的依赖项添加到示例项目中,然后让Gradle处理它。

答案 3 :(得分:0)

这些aar依赖本身具有一些内置功能,例如ic-launcher图标,图像,徽标,动画等等。 Dhamija Dependency就是其中之一。例如: -

compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.daimajia.easing:library:1.0.0@aar'
    compile 'com.daimajia.androidanimations:library:1.0.8@aar

但你可以在aar内使用最好的商业依赖删除上面的依赖并使用它:

implementation 'com.airbnb.android:lottie:2.5.4'

希望这能解决您的问题!