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

Android 真機測試閃退:Android 5.0 權限與適配問題

     編輯:程式設計疑難解答

現象描述

App 在模擬器與 Android 4.0 真機均正常,但在 Android 5.0 (API 21) 真機上啟動即閃退。

常見原因與排查

  1. 儲存權限變更:Android 4.4+ 限制 App 只能存取自有沙箱目錄 (getExternalFilesDir());5.0+ 強制執行。若代碼嘗試寫入公共目錄 (如 Environment.getExternalStorageDirectory()) 且未申請權限,會拋出 SecurityException 導致閃退。
    • 檢查 AndroidManifest.xml 是否宣告 WRITE_EXTERNAL_STORAGE。
    • Android 6.0+ (API 23) 還需**動態申請執行時權限**。
  2. ART 執行環境嚴格檢查:5.0 預設使用 ART 取代 Dalvik,對 JNI、類驗證、未初始化變數使用等檢查更嚴格。檢查 Logcat 是否有 VerifyError、UnsatisfiedLinkError。
  3. 隱式 Intent 限制:5.0+ 禁止隱式 Intent 啟動 Service,需顯式指定包名/類名。
  4. WebView 變更:5.0 更新獨立 WebView,若使用舊版 WebView API 可能崩潰。
  5. 第三方庫不兼容:檢查依賴庫 (如圖片載入、網路、資料庫) 是否支援 API 21+,升級至最新版。

快速定位步驟

  1. 連接真機,開啟 **USB 偵錯**。
  2. 在 Android Studio **Logcat** 過濾應用包名,查看紅色異常堆疊。
  3. 若無電腦,可使用 adb logcat -d > crash.log 導出日誌分析。

典型修復範例

// 動態申請儲存權限 (API 23+)
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) 
        != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
        REQUEST_CODE_STORAGE);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved