公司有这个需求生成一个webapp应用。前面一直在使用web与Android混合开发,越是后面你就发现越有意思。hbuildX官网不怎么维护,虽然一直说这是潮流,uni-app开发也挺火的,但是安卓开发特别是适配不同的手机型号,真的是头大。
这是一个适用于Android Studio的模板项目,可让你在几分钟内创建一个android webview应用程序。你可以使用它为您的网站创建一个简单的应用程序,或作为基于 HTML5 的 android 应用程序的起点。
就拿百度的连接来说吧。这个是mainActivity的一个代码。以代码注释的一种方式就行了。
public class MainActivity extends Activity { //private WebView mWebView; private static final String TAG = MainActivity.class.getSimpleName(); WebView webview; String url = "https://www.baidu.com/"; //云端,把这个连接就行一个替换成你得就行了。 @Override @SuppressLint({"SetJavaScriptEnabled", "MissingInflatedId"}) protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webview = (WebView) findViewById(R.id.activity_main_webview); webview.setWebViewClient(new WebViewClient(){ @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){ Log.e("tag"," SslError="+error); //证书信任 handler.proceed(); } }); setUpWebViewDefaults(webview); WebSettings settings = webview.getSettings(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); } settings.setCacheMode(WebSettings.LOAD_NO_CACHE);//支持js settings.setJavaScriptEnabled(true); settings.setUserAgentString("Mozilla/5.0 (android; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Safari/537.36"); //settings.setUserAgentString("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36");//自适应屏幕 settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true);//自动缩放 settings.setBuiltInZoomControls(true); settings.setSupportZoom(true); settings.setDomStorageEnabled(true); settings.setBlockNetworkImage(false); settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true);//支持获取手势焦点 webview.requestFocusFromTouch(); // REMOTE RESOURCE //mWebView.loadUrl("https://github.com/"); //mWebView.loadUrl(url); webview.setWebChromeClient(new WebChromeClient(){ @Override public boolean onConsoleMessage(ConsoleMessage cm) { //在Logcat中显示浏览器的控制台输出 Log.d("MyApplication", cm.message() + " -- From line " + cm.lineNumber() + " of " + cm.sourceId() ); return true; } // @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override //解決打不开webrtc摄像头的问题;有一点十分重要需要手动在安卓权限中允许摄像头权限 public void onPermissionRequest(final PermissionRequest request) { request.grant(request.getResources()); } }); webview.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); // 根据传入的参数再去加载新的网页 return true; // 表示当前WebView可以处理打开新网页的请求,不用借助系统浏览器 } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); view.loadUrl("javascript:function ganen(){ document.getElementsByTagName('meta')['viewport'].content='width=1000px,initial-scale=0.5,minimum-scale=0.2;'}"); view.loadUrl("javascript:ganen();"); } }); webview.setWebViewClient(new WebViewClient() { //解決https 不安全的显示问题 @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {// super.onReceivedSslError(view, handler, error); //handler.cancel();// super中默认的处理方式,WebView变成空白页 if (handler != null) { handler.proceed();//忽略证书 } } }); webview.getSettings().setMediaPlaybackRequiresUserGesture(false); //让摄像头自动播放 webview.loadUrl(url); webview.setWebChromeClient(new WebChromeClient() { @Override public void onPermissionRequest(final PermissionRequest request) { Log.d(TAG, "onPermissionRequest"); MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { if(request.getOrigin().toString().equals(url)) {request.grant(request.getResources()); } else {request.deny(); } } }); } }); //mWebView.loadUrl("https://www.cncwww.cn:9944/call.html"); // LOCAL RESOURCE // mWebView.loadUrl("file:///android_asset/index.html"); } @Override public void onBackPressed() { if(webview.canGoBack()) { webview.goBack(); } else { super.onBackPressed(); } } private void setUpWebViewDefaults(WebView webView) { WebSettings settings = webView.getSettings(); // Enable Javascript settings.setJavaScriptEnabled(true); // Use WideViewport and Zoom out if there is no viewport defined settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); // Enable pinch to zoom without the zoom buttons settings.setBuiltInZoomControls(true); // Allow use of Local Storage settings.setDomStorageEnabled(true); if(Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) { // Hide the zoom controls for HONEYCOMB+ settings.setDisplayZoomControls(false); } // Enable remote debugging via chrome://inspect if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); } webView.setWebViewClient(new WebViewClient()); // AppRTC requires third party cookies to work CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptThirdPartyCookies(webview, true); }}
然后按照步骤进行一个打包,就行了。
注意:这里需要keystore文件才能打包,我是用jdK1.8生成的。然后已经放项目里面了。
关于:test.keystore
key store password: test123key alias: testkey password: test123
把这个地址连接换成你的即可。
缺点:
还没有做一个开屏动画,因为我没有一个素材,打开的,白屏会有点久。后面找时间研究一下。
github地址:https://github.com/wskang12138/webapp
来源地址:https://blog.csdn.net/nihaio25/article/details/131532027