android模拟器手机打开本地网页

本地电脑网页代码

复制代码
const express = require('express');
const path = require('path');
const app = express();
const port = 8080;

app.use(express.static(path.join(__dirname, 'public')));
app.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, 'public', 'index.html'));
});

app.listen(port, '0.0.0.0', () => {
    console.log(`Server running at http://localhost:${port}`);
});

\ok\public

index.html

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My Local Web Server</title>
</head>
<body>
    <h1>Welcome to My Local Server!</h1>
    <p>This page is hosted locally using Node.js and Express.</p>
</body>
</html>

MainActivity.java代码

复制代码
package com.example.openwifi;

import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        webView = new WebView(this);
        setContentView(webView);

        webView.setWebViewClient(new WebViewClient()); // 内部加载网页
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true); // 如需要JS

        // 模拟器访问本机服务地址(10.0.2.2 是 host 机器)
        webView.loadUrl("http://10.0.2.2:8080");
    }
}

这个错误是因为从 Android 9.0(API 级别 28) 开始,默认不允许通过 HTTP 明文协议访问网络地址(只允许 HTTPS) ,所以你访问 http://10.0.2.2:8080/ 会被系统拒绝,提示:

复制代码
net::ERR_CLEARTEXT_NOT_PERMITTED

✅ 解决办法:允许明文 HTTP 请求

你需要修改 AndroidManifest.xml 和配置 network_security_config.xml


✅ 步骤一:创建网络安全配置文件

  1. res/xml 目录下创建一个新文件:network_security_config.xml

    (如果没有 xml 文件夹,可以手动创建)

内容如下:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">10.0.2.2</domain>
    </domain-config>
</network-security-config>

✅ 步骤二:修改 AndroidManifest.xml

<application> 标签中添加:

复制代码
android:networkSecurityConfig="@xml/network_security_config"

完整示例:

复制代码
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:networkSecurityConfig="@xml/network_security_config">
    ...
</application>

✅ 补充说明

  • 10.0.2.2 是 Android 模拟器访问主机(你电脑)的特殊 IP。

  • 如果你使用的是 HTTPS,不会出现此问题。

  • 如果你访问的是其他 IP 或域名,请将 <domain> 改成相应地址。


配置完成后重新运行你的 Android App,就可以通过 http://10.0.2.2:8080/ 成功访问本地电脑服务了。