使用android studio将网站打包成apk(可以直接使用替换为自己的网站连接即可)

news2025/1/11 10:00:33

公司有这个需求生成一个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();
        }
    }

    /**
     * Convenience method to set some generic defaults for a
     * given WebView
     *
     * @param webView
     */
    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: test123
key alias: test
key password: test123

把这个地址连接换成你的即可。
在这里插入图片描述
缺点:
还没有做一个开屏动画,因为我没有一个素材,打开的,白屏会有点久。后面找时间研究一下。
github地址:https://github.com/wskang12138/webapp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/717109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解JS 作用域与作用域链、IIFE模式、js执行过程

文章目录 一、什么是作用域二. 全局作用域、函数作用域、块级作用域全局作用域函数作用域注意 if、for循环、while循环变量 块级作用域 二、什么是作用域链1. 什么是自由变量2.什么是作用域链3. 关于自由变量的取值 三、IIFE模式由来语法基本语法带参 四、JavaScript 执行过程编…

C++ 数据结构B 树

目录 1. 常见的搜索结构 2. B树概念 3. B-树的插入分析 4. B-树的插入实现 4.1 B-树的节点设计 4.2 插入key的过程 4.4 B-树的简单验证 4.5 B-树的性能分析 4.6 B-树的删除 5. B树和B*树 5.1 B树 5.2 B*树 5.3 总结 6. B-树的应用 6.1 索引 6.2 MySQL索引简介 6…

浅谈建筑项目中的智能照明系统的设计

张心志 安科瑞电气股份有限公司 上海嘉定 201801 【摘要】:建筑智能照明工程中智能照明控制系统发展迅速,具有舒适性和节能性两方面优势。智能照明控制系统已经处于模块化高速发展阶段,如今更好的控制方案成为制约系统发展的瓶颈。文章在研…

工作总是忙不完是什么原因?时间管理软件帮你解决问题

随着市场竞争的激烈,有不少上班族都感受到了工作的压力,每天越来越多的工作任务需要完成。于是我们经常会听到这样的抱怨:“工作太多了,总是忙不完!”那么工作总是忙不完是什么原因呢?其实一般来说工作总是…

GB50255-2014电气装置安装工程电力变流设备施工及验收规范

为了保证电力变流设备安装工程的施工质量,促进施工技术的提高,保证电力变流设备的安全稳定运行,制定本规范。 本规范适用于电力系统中除高压直流输电和柔性交流输电以外的电力变换设备的施工、调试及验收。 电力变流设备的施工、调试及验收…

linux epoll/select使用区分和实例对比

Linux内核poll,ppoll,epoll,select代码位置: poll,ppoll,select相关内核实现在在fs/select.c中; epoll_ctl和epoll_wait相关函数在fs/eventpoll.c中 epoll实测不支持监听普通文件,select可以…

医院中医临床护理中医理论考试题库及答案

本题库是根据最新考试大纲要求,结合近年来考试真题的重难点进行汇编整理组成的全真模拟试题,考生们可以进行专项训练,查漏补缺巩固知识点。本题库对热点考题和重难点题目都进行了仔细的整理和编辑,相信考生在经过了针对性的刷题练…

测试员拒绝当“背锅侠”,软件质量不是“测”出来的!

以前有个朋友跟我说:做测试这行就是在隐忍中负重前行。因为测试是软件发布前的最后一个环节,被称作质量出口儿,测试环节之前所有未做好的工作所带来的不良后果,似乎都能被轻松甩锅给测试人员。软件一旦出现问题,我们经…

django疫情防控常态化下疫情物资管理可视化系统-计算机毕设 附源码73893

django疫情防控常态化下疫情物资管理可视化系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。…

YOLOv5改进系列(13)——更换激活函数之SiLU,ReLU,ELU,Hardswish,Mish,Softplus,AconC系列等

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制

javaWeb中的Ajax_待后期增加

前言: Ajax是一种在JavaWeb开发中常用的技术,通过它可以实现异步通信和动态加载数据,提升用户体验。 正文: 首先我们得明白异步通信,客户端发出请求后可以继续执行其他操作 由于原生的Ajax过于复杂 so: …

FastDFS【SpringBoot操作FastDFS、复习】(三)-全面详解(学习总结---从入门到深化)

目录 SpringBoot操作FastDFS 复习: SpringBoot操作FastDFS 由GitHub大牛tobato在原作者YuQing与yuqih发布的JAVA客户端基 础上进行了大量重构工作,并于GitHub上发布了FastDFS-Client1.26.5。 主要特性 1 对关键部分代码加入了单元测试,便于…

leetcode 21.合并两个有序链表

⭐️ 往期相关文章 💫链接1:链表中倒数第k个结点(快慢指针问题) 💫链接2:leetcode 876.链表的中间结点(快慢指针问题) 💫链接3:leetcode 206.反转链表 💫链接4:leetcode 203.移除链…

蓝牙Beacon+Loa网关推出人员隔离监管解决方案

三年新冠已经过去,以空间换时间的防疫策略让疑似、确诊、有接触史人员得以有效控制,其中居家隔离的防疫措施对新冠的防控是行之有效的。 不过,在“画地为牢”的隔离区也有些需隔离观察人员私自外出,对防疫工作带来相当程度上的影…

数据库性能测试报告总结模板

目录 1计划概述 2参考资料 3术语解释 4系统简介 5测试环境 6测试指标 7测试工具和测试策略 8测试数据收集 9测试结果数据以及截图 9.1Jmeter性能指标 9.2硬件指标图 10 测试结论 需要完整报告模板记得文章末尾找我哦。 1计划概述 目的:找出系统潜在的…

Android Studio中配置aliyun maven库

Android Studio中配置aliyun maven库 在项目的根build.gradle里面(不是module)buildscriptde对应位置添加配置: buildscript {repositories {maven {url http://maven.aliyun.com/nexus/content/groups/public/allowInsecureProtocol true…

深入了解gradio库的Interpretation模块

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

解码大数据时代的信息安全:低代码开发平台的先锋之道

前言 随着大数据时代的到来,信息安全成为了不可忽视的重要议题。随之而来的是技术的迅速发展和创新,为信息安全领域带来了挑战,也为其提供了前所未有的机遇。在这个背景下,低代码开发平台作为一种创新的解决方案崭露头角&#xff…

速看,多设备上使用 WhatsApp的最完整指南

速看!多设备上使用 WhatsApp的最完整指南! 在过去的几年里,WhatsApp一直在不断更新。最近它正在推出一项新功能:允许移动和非手机设备使用该服务,而不需要将注册的手机连接到互联网。也就是说,您可以不再需…

cancal 同步mysql数据到es中

1.环境: windocs service2012 、 jdk版本1.8 、canal版本1.5、mysql版本5.7、 注意:canal版本1.5需要的jdk是1.8 如果你下载的是canal1.6,jdk是1.8,那样会报错。 下载地址 Releases alibaba/canal GitHub 下载并上传到服…