在Android应用程序中自定义域名到IP的映射

时间:2016-09-27 19:28:24

标签: android webview dns

我有一个在webviewview中呈现的webapp。当用户单击按钮时,将呈现URL http://www.mywebapp.com/

是否可以将此域映射到本地网络中的IP,仅用于我的Android应用程序?

类似的东西,

192.168.33.10 mywebapp.com

由于我自己编译Android应用程序,我希望可能有一些基于代码的解决方案来解决这个问题。

拒绝方法:

  1. 植根Android设备以编辑其hosts文件。我正在尝试使用我办公室中的共享测试设备。

  2. 在网络上设置自定义DNS服务器并让android手机指向它 - 这是一个全局变化 - 无论使用什么解决方案,它应该只影响Android应用程序的行为而不是其他任何东西。此外,我对办公室wifi没有任何控制/权限。

2 个答案:

答案 0 :(得分:1)

您可以使用android模拟器来实现

第1步。下载带有X-86系统映像的模拟器(重要)。不要选择Google Play API的映像enter image description here

步骤2。设置好仿真器后,打开终端并运行此命令以可写模式打开仿真器。

emulator -avd <Your_emulator_name> -partition-size 280 -writable-system

步骤3.打开模拟器后。打开一个新终端,然后运行此命令以下载模拟器的主机文件以进行更改。

 adb pull /system/etc/hosts <Your_system_path_to_download_host_file. Example /home/bharath/Desktop/newHost>

它将在桌面上创建一个名为newHost的新文件夹,并将主机文件存储在其中。

您必须在文本编辑器中打开此文件并进行更改(以添加所需的IP主机条目)

I added a sample host name (dev.something.com) pointing to 192.168.21.1

第4步。现在,我们必须在android仿真器中替换此已编辑的主机文件。

为此,我们必须运行这些命令。

4.i。检查是否已连接模拟器

   adb devices

它将返回已连接的设备/仿真器列表。

4.ii。我们必须拥有root权限才能写入文件。

   adb root

它将返回以root身份重新启动adbd的消息

4.iii。接下来,我们必须重新安装系统以向其中写入文件

   adb remount

重新安装成功后,它将返回消息。

4.iv。接下来,我们必须将编辑后的文件推送到android仿真器中

   adb push <your edited host file path.Example /home/PFIN/bharath.shet/Desktop/newHost/hosts> /system/etc/hosts

它将返回文件大小

第5步。为了验证主机更改,您可以在仿真器中下载终端应用程序,并使用ping命令查看更改。

 ping dev.something.com

它将ping到IP 192.168.21.1

答案 1 :(得分:0)

我认为自定义WebViewClient可以解决问题。

WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient());

private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (Uri.parse(url).getHost().equals("www.example.com")) {
            view.loadUrl(myIp);
        }
        // Else the WebView handles it as normal
        return false; // Indicates the WebView is handling the loading
    }
}

来自https://developer.android.com/guide/webapps/webview.html