我开始在 Android 上开发一个应用程序,所以我没有太多。到目前为止,我所拥有的只是一个 WebView。我在 Android Studio 中创建了项目,我的项目被设置为 Android InstantApp。我不确定为什么/如何,但我的猜测是我在创建项目时忽略了它的一个选项。
我从 WebView 中收到错误消息 net::ERR_CLEARTEXT_NOT_PERMITTED。当我搜索错误时,我看到当应用程序是 InstantApp 时,WebViews 只能加载 HTTPS 的站点,而不能加载 HTTP 站点。
这个应用程序的目的是成为一个仅用于一个站点的极其简单的 Flash 播放器。这是为了在运行需要 Flash 的游戏时获得更好的性能。该游戏位于 darkorbit.com,即 HTTPS。
MainActivity.java:
package com.tylerr147.darkorbit; import android.content.ComponentName; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.webkit.WebSettings; import android.webkit.WebView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView wv = findViewById(R.id.webView1); wv.loadUrl("https://darkorbit.com/"); wv.setWebViewClient(new CustomWebViewClient()); WebSettings webSettings = wv.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setPluginState(WebSettings.PluginState.ON); } }
和 CustomWebViewClient.java
package com.tylerr147.darkorbit; import android.webkit.WebView; import android.webkit.WebViewClient; public class CustomWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }
我的问题:如何将我的应用程序禁用为 InstantApp,或者如何让这个 WebView 显示网站?
我觉得这很重要,我还提到了一些其他细节:在显示 WebView 的应用程序中,它还显示“无法加载http://darkorbit.com/上的网页”,因为:net::ERR_CLEARTEXT_NOT_PERMITTED
请注意,即使 URL 的字符串是“… http://darkorbit.com/上的站点…”,而不是“… https://darkorbit.com/上的站点 …”是硬编码的,上面写着“ https://darkorbit.com/ ”。此外,我正在一个设置为运行 Android 9 的 Google Pixel 2 的模拟器上测试该应用程序。
任何帮助,将不胜感激。谢谢你。
解决方案:
application在您的标签中添加以下行:
application
android:usesCleartextTraffic="true"
如下所示:
<application .... android:usesCleartextTraffic="true" ....>
更新: 如果您有网络安全配置,例如:android:networkSecurityConfig="@xml/network_security_config"
android:networkSecurityConfig="@xml/network_security_config"
无需如上图所示将明文流量设置为 true,而是使用以下代码:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> .... .... </domain-config> <base-config cleartextTrafficPermitted="false"/> </network-security-config>
设置cleartextTrafficPermitted为true
cleartextTrafficPermitted
true