首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 調用 system/framework Jar 包報 NoClassDefFoundError 排查

     編輯:程式設計疑難解答

錯誤日誌

java.lang.NoClassDefFoundError: org.simalliance.openmobileapi.service.SmartcardService$7
at org.simalliance.openmobileapi.service.SmartcardService.(SmartcardService.java:1201)

原因分析

  • 應用通過 <uses-library> 引用共享庫(如 org.simalliance.openmobileapi)。
  • Manifest 中聲明 android:required="true" 表示**必須**存在該庫,否則安裝失敗/運行崩潰。
  • 開發者在 Manifest 殘留了**不存在的舊庫聲明**,導致系統嘗試加載缺失的類,拋出 NoClassDefFoundError。
  • 報錯行號指向實際存在的類,但根因是類加載器預驗證階段發現依賴缺失。

解決步驟

  1. 檢查 AndroidManifest.xml 中所有 <uses-library 標籤。
  2. 移除不再使用的庫聲明,或將 android:required="false"(API 23+ 支持)。
  3. 確保目標設備/模擬器確實預裝了該共享庫(/system/framework/xxx.jar、/system/etc/permissions/xxx.xml)。
  4. 清理項目 Build → Clean Project,重新安裝。

關鍵點

NoClassDefFoundError 不等於 ClassNotFoundException:前者表示類文件找到但**初始化失敗**(靜態代碼塊異常、依賴類缺失),後者表示類文件完全找不到。本例屬依賴共享庫缺失導致初始化失敗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved