項目中有 HTML 文件需隨 APK 打包,運行時在手機上加載測試功能。
project/
├── app/
│ ├── src/
│ │ ├── main/
│ │ │ ├── assets/ ← 核心目錄
│ │ │ │ └── html/
│ │ │ │ └── whatsnew.html
│ │ │ ├── java/...
│ │ │ └── res/...
│ └── build.gradle
WebView webView = new WebView(this);
webView.getSettings().setJavaScriptEnabled(true); // 若 HTML 含 JS
webView.loadUrl("file:///android_asset/html/whatsnew.html");
setContentView(webView);
| assets 下路徑 | loadUrl 參數 |
|---|---|
assets/whatsnew.html | file:///android_asset/whatsnew.html |
assets/html/whatsnew.html | file:///android_asset/html/whatsnew.html |
assets/data/test.json | file:///android_asset/data/test.json |
固定前綴:file:///android_asset/ + 相對 assets 根目錄的路徑。
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);
WhatsNew.html ≠ whatsnew.html。getFilesDir()。res/raw 或動態下載。webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)。| 特性 | assets | res/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 載入本地網頁資源的標準、穩定方案。