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

Android 讀取 assets 目錄下 HTML 文件:WebView 加載本地資源完整方案

     編輯:程式設計綜合問答

問題場景

項目中有 HTML 文件需隨 APK 打包,運行時在手機上加載測試功能。

標準方案:assets 目錄 + WebView

1. 文件放置位置

project/
├── app/
│   ├── src/
│   │   ├── main/
│   │   │   ├── assets/           ← 核心目錄
│   │   │   │   └── html/
│   │   │   │       └── whatsnew.html
│   │   │   ├── java/...
│   │   │   └── res/...
│   └── build.gradle

2. WebView 加載代碼

WebView webView = new WebView(this);
webView.getSettings().setJavaScriptEnabled(true); // 若 HTML 含 JS
webView.loadUrl("file:///android_asset/html/whatsnew.html");
setContentView(webView);

3. 關鍵路徑規則

assets 下路徑loadUrl 參數
assets/whatsnew.htmlfile:///android_asset/whatsnew.html
assets/html/whatsnew.htmlfile:///android_asset/html/whatsnew.html
assets/data/test.jsonfile:///android_asset/data/test.json

固定前綴:file:///android_asset/ + 相對 assets 根目錄的路徑。

進階:動態讀取 HTML 字符串 (非 WebView)

public String readAssetFile(String fileName) {
    try (InputStream is = getAssets().open(fileName);
         BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"))) {
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) sb.append(line).append('\n');
        return sb.toString();
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

// 用法
String html = readAssetFile("html/whatsnew.html");
webView.loadDataWithBaseURL("file:///android_asset/", html, "text/html", "UTF-8", null);

常見坑點

  • 文件名大小寫敏感:Linux 文件系統區分大小寫,WhatsNew.html ≠ whatsnew.html。
  • assets 文件不可寫入:僅讀,需修改請複製到內部存儲 getFilesDir()。
  • 單文件超過 1MB:舊版 Android 壓縮 APK 時不壓縮 assets,大文件建議放 res/raw 或動態下載。
  • WebView 硬件加速衝突:某些機型需 webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)。

對比:res/raw vs assets

特性assetsres/raw
目錄結構支持多級子目錄僅平級文件
訪問方式AssetManager / file:///android_asset/R.raw.xxx / openRawResource
編譯時處理原封不動打包生成 R.id 整型 ID
適合場景HTML/JS/CSS/字體/數據庫/大配置文件短視頻/音頻/小型二進制資源

總結

**HTML 文件放入 assets/html/,WebView 用 file:///android_asset/html/xxx.html 加載**。這是 Android 載入本地網頁資源的標準、穩定方案。

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