我正在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库,因此它包含这些外部依赖项?谢谢!
答案 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'
希望这能解决您的问题!