2016-11-28 49 views
0

我有一個很奇怪的問題,我懷疑相關multidexing(但不知道)。NoClassDefFound在multidex'ed APK

我有一個應用程序模塊和庫模塊。該庫在app start上執行一些代碼,通過主應用程序類的接口獲取庫中定義的類名。

enter image description here

現在奇怪的部分開始。 該應用根據以下指示進行多重索引 - Configure Apps with Over 64K Methods - 我有2種構建類型 - 調試和發佈。在發佈版本中使用proguard來混淆和縮小代碼。在調試版本im不是。

在運行上與Android +21一切設備上的應用程序在這兩種類型的建設工作正常。

當在前棒棒糖版本的設備上運行應用程序時,在發佈構建類型中一切正常,但在調試構建類型即時獲取NoClassDefFoundError,因爲應用程序試圖返回到庫。

Declare classes required in the primary DEX file建議我用APK分析儀在Android Studio中檢查的DEX文件之間的類分佈,看到兩件事情:

  1. 在發佈版本類型只有一個DEX文件。
  2. 在調試構建類型中有2個dex文件,但有問題的類(及其父類)是在主dex文件中定義的。

此外,當我從庫中調用應用程序(圖中的getClassName())與實際的類名稱的一切都工作正常所有建設類型!

作爲最後一次嘗試瞭解這裏發生了什麼,我已經比較了2個apks,一個沒有調用應用程序(用實際的類名稱替代),而唯一的區別是我可以看到的是打電話的圖書館代碼。就dex文件之間的類分佈而言,絕對沒有區別!

有沒有人明白這裏的問題是什麼?謝謝。

+0

「app start」是什麼意思?它是從Application#onCreate()調用的嗎?此外,添加代碼片段將有助於說明您的情況。 –

+0

@AlexLipov onResume()的主要活動。有一個飛濺活動可以正常工作,主要活動緊隨其後。 – AsafK

+0

重新安裝您的調試版本。使用dalvikvm標記查找日誌條目(特別是使用DexOpt或VFY子字符串)。你看到任何相關的東西嗎? –

回答

0

最終還是被COM/NewRelic的/代理/安卓/ API/V2/TraceFieldInterface.class,我必須確保在主DEX文件。

如果有人使用newrelic你可能要注意這一點。