创建自己的 app: html网页直接打包成app;在线网页打包app工具fusionapp、pake

news2024/12/27 16:29:02

1、html网页直接打包成app

主要通过hbuilderx框架工具来进行打包
https://www.dcloud.io/hbuilderx.html

参考:
https://www.bilibili.com/video/BV1XG411r7QZ/
https://www.bilibili.com/video/BV1ZJ411W7Na

1)网页制作
这里做的工具是TodoList 页面,找chatgpt、Claude或者其他大模型工具既可以生成页面
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ldOxmwGn-1721573811659)

生成的代码可以放到菜鸟工具的HTML/CSS/JS 在线工具
https://www.jyshare.com/front-end/61/
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wPG6FSWe-1721573811661)

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>TodoList</title>
    <style>
        /* CSS 样式保持不变 */
        body {
            font-family: Arial, sans-serif;
            max-width: 500px;
            margin: 0 auto;
            padding: 20px;
        }
        h1 {
            text-align: center;
        }
        #todo-form {
            display: flex;
            margin-bottom: 20px;
        }
        #todo-input {
            flex-grow: 1;
            padding: 10px;
            font-size: 16px;
            border: 1px solid #ddd;
            border-radius: 4px 0 0 4px;
        }
        #add-button {
            padding: 10px 20px;
            font-size: 16px;
            background-color: #4CAF50;
            color: white;
            border: none;
            border-radius: 0 4px 4px 0;
            cursor: pointer;
        }
        #todo-list {
            list-style-type: none;
            padding: 0;
        }
        .todo-item {
            display: flex;
            align-items: center;
            padding: 10px;
            background-color: #f9f9f9;
            border: 1px solid #ddd;
            margin-bottom: 10px;
            border-radius: 4px;
        }
        .todo-item.completed {
            text-decoration: line-through;
            opacity: 0.6;
        }
        .todo-item input[type="checkbox"] {
            margin-right: 10px;
        }
        .delete-button {
            margin-left: auto;
            background-color: #f44336;
            color: white;
            border: none;
            padding: 5px 10px;
            border-radius: 4px;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <h1>TodoList</h1>
    <form id="todo-form">
        <input type="text" id="todo-input" placeholder="Enter a new task" required>
        <button type="submit" id="add-button">Add</button>
    </form>
    <ul id="todo-list"></ul>

    <script>
        const todoForm = document.getElementById('todo-form');
        const todoInput = document.getElementById('todo-input');
        const todoList = document.getElementById('todo-list');

        function loadTodos() {
            const todos = JSON.parse(localStorage.getItem('todos')) || [];
            todos.forEach(todo => {
                addTodoToDOM(todo.text, todo.completed);
            });
        }

        function saveTodos() {
            const todos = Array.from(todoList.children).map(li => ({
                text: li.querySelector('span').textContent,
                completed: li.classList.contains('completed')
            }));
            localStorage.setItem('todos', JSON.stringify(todos));
        }

        function addTodoToDOM(text, completed = false) {
            const li = document.createElement('li');
            li.className = 'todo-item' + (completed ? ' completed' : '');
            li.innerHTML = `
                <input type="checkbox" ${completed ? 'checked' : ''}>
                <span>${text}</span>
                <button class="delete-button">Delete</button>
            `;

            li.querySelector('input[type="checkbox"]').addEventListener('change', function() {
                li.classList.toggle('completed');
                if (li.classList.contains('completed')) {
                    todoList.appendChild(li);
                } else {
                    todoList.insertBefore(li, todoList.firstChild);
                }
                saveTodos();
            });

            li.querySelector('.delete-button').addEventListener('click', function() {
                li.remove();
                saveTodos();
            });

            if (completed) {
                todoList.appendChild(li);
            } else {
                todoList.insertBefore(li, todoList.firstChild);
            }
        }

        todoForm.addEventListener('submit', function(e) {
            e.preventDefault();
            if (todoInput.value.trim() === '') return;

            addTodoToDOM(todoInput.value);
            saveTodos();
            todoInput.value = '';
        });

        loadTodos();
    </script>
</body>
</html>

2)hbuilderx下载使用
https://www.dcloud.io/hbuilderx.html
直接下载zip解压既可以
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XhZv25If-1721573811662)
3)打包app
首先创建项目,选择5+app选择创建
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Fl3icaq-1721573811663)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uxIt2Uaj-1721573811663)
项目创建后,把原项目的css js等不用的文件删除,只保留mainfest.json;然后把自己页面的html、css、js复制过来
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3t9VOESX-1721573811664)
点击mainfest.json去构建项目配置
首先需要应用标识获取,需要先注册hbuilderx账号
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5XzIr4Rf-1721573811664)
设置图标上传1024*1024px,并点击生成所有图标并替换
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q7XQxArK-1721573811665)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A53b7FDo-1721573811665)

模块设置里把没有的都不用选择,轻量化app
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sC5PNe0M-1721573811666)
权限配置这里,把android.permission.READ_CONTACTS那行删除,不然后面真正打包报错
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9zt4ySyo-1721573811667)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-amiz2Oua-1721573811667)
然后点击发行生成本地app资源,运行完成会下面显示导出完成,会在unpackage\resources\H5F919204\www下
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jw6fuI2p-1721573811668)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-02ehOXsb-1721573811668)

最终运行打包,点击云打包,打包会下载东西等一会,下载完成再次进行打包需要3-5分钟,最终apk放在unpackage\release\apk下
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bkkxbcma-1721573811669)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xC4NBHQq-1721573811669)
点击继续打包
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BnGQXNrj-1721573811670)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wnc90xv2-1721573811670)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iRuSkGl7-1721573811671)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5QwyG8fa-1721573811671)

手机安装使用:
使用没有问题
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Eloef8iT-1721573811672)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UC3vqdeF-1721573811672)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uQBJLvC0-1721573811673)

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

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

相关文章

数据结构——栈的实现(java实现)与相应的oj题

文章目录 一 栈栈的概念:栈的实现&#xff1a;栈的数组实现默认构造方法压栈获取栈元素的个数出栈获取栈顶元素判断当前栈是否为空 java提供的Stack类Stack实现的接口&#xff1a; LinkedList也可以当Stack使用虚拟机栈&#xff0c;栈帧&#xff0c;栈的三个概念 二 栈的一些算…

Android 11 HAL层集成FFMPEG

1.集成目录&#xff1a; android/vendor/noch/common/external/NoboMediaCodec 2.文件夹目录 3. Android.mk实现 # Copyright #LOCAL_PATH : $(call my-dir)SF_COMMON_MK : $(LOCAL_PATH)/common.mkinclude $(call first-makefiles-under,$(LOCAL_PATH))4.common.mk实现 # #…

Xilinx FPGA DDR4 接口配置基础(PG150)

1. 简介 1.1 DDR4 SDRAM 控制器主要特点 支持8到80位接口宽度的组件&#xff08;支持 RDIMM、LRDIMM、UDIMM 和 SODIMM&#xff09; 最大组件限制为9&#xff0c;此限制仅适用于组件&#xff0c;不适用于 DIMM。密度支持 最高支持 32 GB 的组件密度&#xff0c;64 GB 的 LRDI…

初识godot游戏引擎并安装

简介 Godot是一款自由开源、由社区驱动的2D和3D游戏引擎。游戏开发虽复杂&#xff0c;却蕴含一定的通用规律&#xff0c;正是为了简化这些通用化的工作&#xff0c;游戏引擎应运而生。Godot引擎作为一款功能丰富的跨平台游戏引擎&#xff0c;通过统一的界面支持创建2D和3D游戏。…

数字集成电路(3)

光刻&#xff08;photolithography&#xff09; 工艺步骤&#xff1a; 扩散和离子注入&#xff1a;900~1100℃ 淀积 刻蚀 平面化 衬底选择&#xff1a;常用&#xff08;100&#xff09;晶面&#xff08;原因&#xff1a;面密度小&#xff0c;界面态少&#xff09; 设计规…

【vue教程】四. Vue 计算属性和侦听器

目录 本章涵盖知识点回顾计算属性&#xff08;Computed&#xff09;创建计算属性计算属性的多样性计算属性的数组过滤计算属性的复杂表达式 计算属性 vs 方法计算属性的实例演示 侦听器&#xff08;Watchers&#xff09;创建侦听器侦听器的高级用法侦听器的深度观察侦听器的立即…

【ffmpeg命令基础】过滤处理

文章目录 前言过滤处理的介绍两种过滤类型简单滤波图简单滤波图是什么简单滤波示例 复杂滤波图复杂滤波是什么区别示例 总结 前言 FFmpeg是一款功能强大的开源音视频处理工具&#xff0c;广泛应用于音视频的采集、编解码、转码、流化、过滤和播放等领域。1本文将重点介绍FFmpe…

mysql存储引擎和备份

索引 事务 存储引擎 概念&#xff1a;存储引擎&#xff0c;就是一种数据库存储数据的机制&#xff0c;索引的技巧&#xff0c;锁定水平。 存储引擎。存储的方式和存储的格式。 存储引擎也属于mysql当中的组件&#xff0c;实际上操作的&#xff0c;执行的就是数据的读写I/O。…

ROC曲线和AUC

ROC曲线能更稳定反映模型的性能&#xff0c;对测试集合中数据分布的变化不敏感 AUC&#xff1a;当随机挑选一个正样本和一个负样本&#xff0c;根据当前的分类器计算得到的score将这个正样本排在负样本前面的概率 从AUC判断分类器&#xff08;预测模型&#xff09;优劣的标准&a…

【QT开发(19)】2023-QT 5.14.2实现Android开发,使用新版SDK,试图支持 emulator -avd 虚拟机

之前的博客【QT开发&#xff08;17&#xff09;】2023-QT 5.14.2实现Android开发&#xff0c;SDK是24.x版本的&#xff0c;虚拟机是32位的&#xff0c;但是现在虚拟机是64位的了&#xff0c;需要升级SDK匹配虚拟机 文章目录 最后的效果1.1 下载最新版 SDK tools (仅限命令行工…

JavaWeb-【3】DOM

笔记系列持续更新&#xff0c;真正做到详细&#xff01;&#xff01;本次系列重点讲解后端&#xff0c;那么第一阶段先讲解前端【续上篇CSS和JavaScript】 目录 1、dom介绍 2、html-dom 3、document 4、应用实例 ①、应用实例1 ②、多选框案例 ③、图片切换案例 ④、添…

高性能图数据库Neo4j从入门到实战

图数据库Neo4j介绍 什么是图数据库&#xff08;graph database&#xff09; 随着社交、电商、金融、零售、物联网等行业的快速发展&#xff0c;现实社会织起了了一张庞大而复杂的关系网&#xff0c;传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随数据量呈…

密码学基础-Hash、MAC、HMAC 的区别与联系

密码学基础-Hash、MAC、HMAC 的区别与联系 Hash Hash 是一种从一段数据中创建小的数字“指纹”的方法。就像一个人的指纹代表一个人的信息一样&#xff0c;Hash 对输入的数据进行整理&#xff0c;生成一个代表该输入数据的“指纹” 数据。通常该指纹数据也可称之为摘要、散列…

CefSharp音视频编译与免费下载

注&#xff1a;Cefharp 音频和视频播放编译&#xff0c;生成相应的dll文件&#xff0c;从而支持项目开发。 建议编译至少 16G 的 RAM和至少 250G 的 SSD。该脚本以 E 盘为例&#xff0c;您需要在 E 盘上手动创建 cef 文件夹。禁止在转载后通过发布其他平台向用户收取下载费用。…

全国区块链职业技能大赛第八套区块链产品需求分析与方案设计

任务1-1:区块链产品需求分析与方案设计 医疗健康平台中涉及到医院、医生、患者等参与方,他们需要在区块链医疗健康平台中完成账户注册、身份上链、挂号就诊、查询病例等多种业务活动。通过对业务活动的功能分析,可以更好的服务系统的开发流程。基于医疗健康平台系统架构,以…

【数据结构进阶】二叉搜索树

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; C || 数据结构 目录 &#x1f308;前言&#x1f525;二叉搜索树&#x1f525; 二叉搜索树的实现Insert&#xff08;插入&#xff09;find&#xff08;查找&#xff09;erase(删除)destro…

毕业/期刊论文发表必备:YOLOv5 / v7 / v8 /v10算法网络结构图【文末提供原型文件下载地址】

前言:Hello大家好,我是小哥谈。同学们在写YOLO算法相关毕业论文/期刊论文的时候,不可避免的会用到相关版本的网络结构图,曾有很多小伙伴私信我索要原型文件,本文就给大家提供YOLOv5/v7/v8/v10版本算法网络结构图及原型文件下载地址。🌈 目录 🚀1.网络结构图 �…

Fiddler 导出请求为curl格式

来自:https://www.cnblogs.com/yudongdong/p/15418181.html Fiddler 下载地址: https://downloads.getfiddler.com/fiddler-classic/FiddlerSetup.5.0.20243.10853-latest.exe 这段代码加到类中 public static RulesOption("关闭请求体转代码", "生成代码&qu…

简单页表和多级页表

地址转换(Address Translation) 内存需要被分成固定大小的页(Page)然后再通过虚拟内存地址(Virtual Address) 到物理内存地址(Physical Address) 的地址转换(Address Translation)才能到达实际存放数据的物理内存位置 简单页表 页表的概念 想要把虚拟内存地址&#xff0c;映…

ip地址是电脑还是网线决定的

在数字化时代的浪潮中&#xff0c;网络已经成为了我们日常生活和工作不可或缺的一部分。当我们谈论网络时&#xff0c;IP地址无疑是一个核心的概念。然而&#xff0c;关于IP地址的分配和决定因素&#xff0c;很多人可能存在误解。有些人认为IP地址是由电脑决定的&#xff0c;而…