2017-10-19 121 views
0

我知道这个问题似乎已经问过了,但它们有些不同,而且我找不到解决方案。ClassDefNotFoundError with local aar

我有一个Android应用程序,它依赖于依赖于(纯java)罐子的几个aar库。在Android Studio中开发时,我将所有aars和jar作为来自我公司本地连接的依赖项。这按预期工作。

但是,对于部署,我们有本地的aar文件,这些文件已经在其libs文件夹中包含了它们的jar依赖关系。已部署的build.gradle里面我们有定义,包括他们以下条目:

repositories { 
    jcenter() 
    flatDir { 
     dirs '../../libs' 
    } 

    maven { 
     url "https://maven.google.com" 
    } 
} 

dependencies { 

    compile 'com.android.support:appcompat-v7:26.1.0' 
    compile ":NameOfAarFile:[email protected]" 
    compile ":NameOfAnotherAar:[email protected]" 

    compile fileTree(include: ['*.jar'], dir: 'libs') 
} 

如果我打开在Android Studio中的项目,做的gradle其检查,让我建立它。它会打开,但只要您尝试使用源于罐子里的功能,我就会得到NoClassDefFoundError

所以我从输出中解编apk,通过dex2jar运行它们,并且看着jd-gui的类,以查明它们是否在预期的位置。

现在我真的很想知道NoClassDefFoundError是从哪里来的,或者 - 更重要 - 如何摆脱它?

official documentation提到:

库模块可以包括JAR库

你可以开发一个库模块本身包括JAR库; 但是,您需要手动编辑从属应用程序模块的内部版本 路径并向JAR文件添加路径。

如果可能的话,我真的想离开罐子里面的罐子。

如有需要,我会提供更多信息。

+0

方法的总数是多少?如果它高于65K,则必须启用multidex。 –

+0

如何计算它们?只有Java方法会计入这个限制吗?但我怀疑65k比我得到的更多(估计我甚至没有10k的方法) –

回答

0

我知道发生了什么事。 它可以在Android Studio中禁用InstantRun