2017-10-19 123 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