首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的库如何在Android中导入另一个库?

我的库如何在Android中导入另一个库?
EN

Stack Overflow用户
提问于 2016-03-28 20:02:41
回答 1查看 2.2K关注 0票数 1

我从Android中的库开始,并设法在我的应用程序中以这种方式导入了一个库:

  1. 在.aar文件夹中添加/libs文件
  2. 添加build.gradle: 存储库{ flatDir {dirs‘’libs‘}依赖{.编译(名称:‘mylibrary1 1’,ext:'aar') }

这很好,但是我在mylibrary1中做了mylibrary1和重复步骤1和2,所以现在mylibrary1可以使用mylibrary2了。

总之,我希望我的应用程序导入mylibrary1mylibrary1导入mylibrary2

问题在我的应用程序中,当我从mylibrary2调用一个方法时,我得到了一个例外:java.lang.NoClassDefFoundError,我希望有人能帮我

这里是stackstrace,以防有帮助:

代码语言:javascript
复制
E/AndroidRuntime: FATAL EXCEPTION: main
 Process: ar.com.tally.myapplication, PID: 30197
 java.lang.NoClassDefFoundError: Failed resolution of: Lar/com/tally/mylibrary2/Class2;
     at ar.com.tally.mylibrary1.Class1.get1(Class1.java:10)
     at ar.com.tally.myapplication.MainActivity$1.onClick(MainActivity.java:28)
     at android.view.View.performClick(View.java:5076)
     at android.view.View$PerformClick.run(View.java:20279)
     at android.os.Handler.handleCallback(Handler.java:739)
     at android.os.Handler.dispatchMessage(Handler.java:95)
     at android.os.Looper.loop(Looper.java:135)
     at android.app.ActivityThread.main(ActivityThread.java:5910)
     at java.lang.reflect.Method.invoke(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:372)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
  Caused by: java.lang.ClassNotFoundException: Didn't find class "ar.com.tally.mylibrary2.Class2" on path: DexPathList[[dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-support-annotations-23.2.1_d668123607e57c7aa4406ba98a4276e21606428b-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-internal_impl-23.2.1_eca880fd3aaa2f093d820f9d7b8841aa1fa00b4f-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-intermediates-exploded-aar-mylibrary1_7763b008eb2396101d055fb29b3e03d5ee273add-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-com.android.support-support-vector-drawable-23.2.1_5e6bcbbe4699b2a562a7ba7b6349f8bbfbef9fb4-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-com.android.support-support-v4-23.2.1_c564c185a6a1edef108674e96bf4712114e0c95a-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-com.android.support-recyclerview-v7-23.2.1_a1ec4cea5854a30b896e5f639d2fd95cd214b2b1-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-com.android.support-design-23.2.1_2c4b9902e86719e2bd0652ddfba695894bed0a47-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-com.android.support-appcompat-v7-23.2.1_01059d3db947a24736ebcedd233fd40b734ccf3e-classes.dex", dex file "/data/data/ar.com.tally.myapplication/files/instant-run/dex/slice-com.android.support-animated-vector-drawable-23.2.1_69d3f470bac3bccd2f54179c6363fce8b9091976-classes.dex"],nativeLibraryDirectories=[/vendor/lib, /system/lib, /vendor/lib, /system/lib]]
     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
     at com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader.findClass(IncrementalClassLoader.java:90)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
     at ar.com.tally.mylibrary1.Class1.get1(Class1.java:10) 
     at ar.com.tally.myapplication.MainActivity$1.onClick(MainActivity.java:28) 
     at android.view.View.performClick(View.java:5076) 
     at android.view.View$PerformClick.run(View.java:20279) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5910) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 
     Suppressed: java.lang.ClassNotFoundException: Didn't find class "ar.com.tally.mylibrary2.Class2" on path: DexPathList[[zip file "/data/app/ar.com.tally.myapplication-1
EN

回答 1

Stack Overflow用户

发布于 2016-03-28 20:20:51

因此,当您制作mylibrary2时,您也更改了mylibrary1,因此您需要用新的aars来替换aars,清理并重新构建。

但是,如果您将这些库与模块放在同一个项目中,我建议您将它们作为项目导入,而不是手动处理。

compile project(':mylibrary1') compile project(':mylibrary2')

或者,如果在不同的项目中,如本例所示,您可以在存储库中添加mavenLocal():

代码语言:javascript
复制
    repositories {
     mavenLocal()
...
}

在lib项目中,您可以添加maven插件:

代码语言:javascript
复制
apply plugin: 'maven'

然后你需要打电话:

分级安装

它将在本地maven repo中安装lib。所以你不需要手动复制它们

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36270178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档