($width) AND $width .= 'px';
$style = " style=\"width: $width\"";
}
$value = $value ? $value : date('H:i');
$s = "";
return $s;
}
// form_date('start', '2018-07-05') 为空则当前日期
function form_date($name, $value = 0, $width = FALSE)
{
$style = '';
if (FALSE !== $width) {
is_numeric($width) AND $width .= 'px';
$style = " style=\"width: $width\"";
}
$value = $value ? $value : date('Y-m-d');
$s = "";
return $s;
}
/**用法
*
* echo form_radio_yes_no('radio1', 0);
* echo form_checkbox('aaa', array('无', '有'), 0);
*
* echo form_radio_yes_no('aaa', 0);
* echo form_radio('aaa', array('无', '有'), 0);
* echo form_radio('aaa', array('a'=>'aaa', 'b'=>'bbb', 'c'=>'ccc', ), 'b');
*
* echo form_select('aaa', array('a'=>'aaa', 'b'=>'bbb', 'c'=>'ccc', ), 'a');
*/
?>组保留的标签 余下为需要删除的标签
unset($oldtag[$key]);
}
}
}
if (!empty($oldtag)) {
$tagids = array();
foreach ($oldtag as $tagid => $tagname) {
$tagids[] = $tagid;
}
well_oldtag_delete($tagids, $tid);
}
$r = well_tag_process($tid, $fid, $create_tag, $tagarr);
return $r;
}
// 删除标签和绑定的主题
function well_oldtag_delete($tagids, $tid)
{
$pagesize = count($tagids);
$arrlist = well_tag_find_by_tagids($tagids, 1, $pagesize);
$delete_tagids = array(); // 删除
$tagids = array();
$n = 0;
foreach ($arrlist as $val) {
++$n;
if (1 == $val['count']) {
// 只有一个主题
$delete_tagids[] = $val['tagid'];
} else {
$tagids[] = $val['tagid'];
}
}
!empty($delete_tagids) and well_tag_delete($delete_tagids);
$arlist = well_tag_thread_find_by_tid($tid, 1, $n);
if ($arlist) {
$ids = array();
foreach ($arlist as $val) $ids[] = $val['id'];
well_tag_thread_delete($ids);
}
!empty($tagids) and well_tag_update($tagids, array('count-' => 1));
}
// 标签数据处理 $arr=新提交的数组 $tagarr=保留的旧标签
function well_tag_process($tid, $fid, $new_tags = array(), $tagarr = array())
{
if (empty($tid)) return '';
// 新标签处理入库
if ($new_tags) {
$threadarr = array();
$tagids = array();
$i = 0;
$size = 5;
$n = count($tagarr);
$n = $n > $size ? $size : $size - $n;
foreach ($new_tags as $name) {
++$i;
$name = trim($name);
$name = stripslashes($name);
$name = strip_tags($name);
$name = str_replace(array(' ', '#', "@", "$", "%", "^", '&', '·', '<', '>', ';', '`', '~', '!', '¥', '……', ';', '?', '?', '-', '—', '_', '=', '+', '.', '{', '}', '|', ':', ':', '、', '/', '。', '[', ']', '【', '】', '‘', ' ', ' ', ' ', ' ', ' '), '', $name);
$name = htmlspecialchars($name, ENT_QUOTES);
if ($name && $i <= $n) {
// 查询标签
$read = well_tag_read_name($name);
if ($read) {
// 存在 count+1
$tagids[] = $read['tagid'];
} else {
// 入库
$arr = array('name' => $name, 'count' => 1);
$tagid = well_tag_create($arr);
FALSE === $tagid and message(-1, lang('create_failed'));
$read = array('tagid' => $tagid, 'name' => $name);
}
$tag_thread = array('tagid' => $read['tagid'], 'tid' => $tid);
$threadarr[] = $tag_thread;
$tagarr[$read['tagid']] = $read['name'];
}
}
!empty($threadarr) and tag_thread_big_insert($threadarr);
!empty($tagids) and well_tag_update($tagids, array('count+' => 1));
}
$json = empty($tagarr) ? '' : xn_json_encode($tagarr);
return $json;
}
?>return $r;
}
/**
* @param int $page 页数
* @param int $pagesize 每页显示数量
* @return mixed
*/
function link_find($page = 1, $pagesize = 100)
{
$arr = link__find($cond = array(), array('rank' => -1), $page, $pagesize);
return $arr;
}
/**
* @param $id
* @return bool 返回FALSE失败 TRUE成功
*/
function link_delete($id)
{
if (empty($id)) return FALSE;
$r = link__delete(array('id' => $id));
link_delete_cache();
return $r;
}
//--------------------------kv + cache--------------------------
/**
* @return mixed 返回全部友情链接
*/
function link_get($page = 1, $pagesize = 100)
{
$g_link = website_get('friends_link');
if (empty($g_link)) {
$g_link = link_find($page, $pagesize);
$g_link AND website_set('friends_link', $g_link);
}
return $g_link;
}
// delete kv and cache
function link_delete_cache()
{
website_set('friends_link', '');
return TRUE;
}
?> $v = implode(",", $v);
$temp[] = $v;
}
// 去掉重复的字符串,也就是重复的一维数组
$temp = array_unique($temp);
// 再将拆开的数组重新组装
$output = array();
foreach ($temp as $k => $v) {
if ($stkeep) $k = $starr[$k];
if ($ndformat) {
$temparr = explode(",", $v);
foreach ($temparr as $ndkey => $ndval) $output[$k][$ndarr[$ndkey]] = $ndval;
} else $output[$k] = explode(",", $v);
}
return $output;
}
// 合并二维数组 如重复 值以第一个数组值为准
function array2_merge($array1, $array2, $key = '')
{
if (empty($array1) || empty($array2)) return NULL;
$arr = array();
foreach ($array1 as $k => $v) {
isset($v[$key]) ? $arr[$v[$key]] = array_merge($v, $array2[$k]) : $arr[] = array_merge($v, $array2[$k]);
}
return $arr;
}
/*
* 对二维数组排序 两个数组必须有一个相同的键值
* $array1 需要排序数组
* $array2 按照该数组key排序
* */
function array2_sort_key($array1, $array2, $key = '')
{
if (empty($array1) || empty($array2)) return NULL;
$arr = array();
foreach ($array2 as $k => $v) {
if (isset($v[$key]) && $v[$key] == $array1[$v[$key]][$key]) {
$arr[$v[$key]] = $array1[$v[$key]];
} else {
$arr[] = $v;
}
}
return $arr;
}
?>
将vue项目打包为安卓软件-软件玩家 - 软件改变生活!
前言
在我的前一个文章,有讲如何实现一个笔记系统
点击跳转到:纯vue实现笔记系统
那么我如果想要分享给我的朋友该怎么办呢?
那么我将带大家去实现打包安卓软件
安卓实际打包软件
也为了更信服,这里提供一个我的打包之后的软件给大家,感兴趣的可以下载安卓看看
- 链接: 简易笔记打包安装网盘文件
- 提取码: 9qa6
打包
基于我上面的项目,实现之后,如果我们要打包为安卓软件,那么我们需要先对vue项目进行打包
我的项目是用的vue创建的,非webpack,那么默认给我创建了一个vue.config.js文件,内容如下:
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
})
这个是它的初始内容,因为我们的项目只有纯vue,没有和后端交互,因此我们需要加一句配置即可
publicPath: './'
最终代码是
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
publicPath: './'
})
然后执行我们的打包指令
npm run build
打包完会给你一个提示:
这样我们就打包好了,然后找到我们项目的dist文件夹
需要注意的时候,打包我们打包后的文件不能含有中文名称的文件,如我的这个
下载HbuildX
我们这里使用hbuildx进行安卓打包
HbuildX官网
点击 Download for Windows
然后会获得一个软件的压缩包,解压打开可执行exe文件
打开之后进入主界面是这样的
然后点击左下角进行登录
第一次登录,它会跳转到开发者登录中心
HbuildX开发者登录中心
注意,好像至少需要绑定手机号才能往在后面我要打包的时候进行打到包
使用HbuildX
我们点击文件->新建->项目
然后选择5+App
填写项目名称,如我项目名:singleEditor
选择需要构建项目的路径
选择默认模板
选择创建即可
创建完项目结构如下
然后把打包好的vue文件复制到创建好的项目下面,复制后项目结构如下
接着找到manifest.json文件,这个是进行打包安卓的配置
首先点开这个文件,找到基础配置那一项,我们需要注意这些配置
应用标识(AppID): 一般你登录会自动生成
应用名称: 根据自己项目填名字
应用版本:初始1.0,后续假如有更新内容,并且用起来,可以后面往上加,如
1.1 或1.2,或2.0
应用入口: 默认index.html,不用动
往下选择图标配置
网上找一个图标,可以用阿里云的图标库找一个
阿里云图标矢量库
然后把找到的图标放到自动生成图标栏位上
点击按钮自动生成所有图标并替换
它会生成一个unpackage文件夹,会自动生成适配不同手机的大小的图标
然后点击发行->原生App-云打包
然后勾选Android(apk包)
选择使用公共测试证书
选择打正式包
至于下面的广告,你可以根据自己的需要选择是否勾选,如我要给我朋友,那我是取消勾选的
PS: 2024.09.02更新: 发现它广告突然默认有几个是勾选的,如果需要取消广告,进入这个链接进行登录你在HBuildX注册的账号
HBuildX广告配置
进去,在打包完之后选择关闭广告
点击广告设置,然后会看到你打包的项目,点击你要关闭广告的应用详情
然后将里面涉及开启的广告配置给关闭,一般等个几分钟就会生效配置
这个时候我们点击右下角的打包
它会提示你打包完成安装的时候会报存在安全隐患,因为我们只是用来测试玩。如果有兴趣打包真正可上应用商店的,请根据提示调整配置(PS:博主没有试过)
然后选择继续打包
选择打包之后,我们可以在控制台看到具体打包的情况
他会提示我们打包之后的文件在什么位置
找到提示路径复制出来改个名字发给你朋友,安装看看吧
结语
以上就是我用vue项目打包为安卓软件的全过程了,赶紧试试吧
本文标签:
项目软件Vue
更多相关文章
探索bak文件:电脑中的隐形备份与它的故事
记得那是一个雨夜,我疯狂地在电脑前寻找一份丢失的文档,手指颤抖着翻遍每个文件夹。就在绝望边缘,一个不起眼的.bak文件跳入眼帘——它像一位沉默的守护者,静静躺在角落,挽救了我三天的心血。从那天起,我对这些后缀名为.bak的文件产生了好
桌面快捷方式无法删除的终极解决指南:从排查到彻底清除
你盯着电脑桌面,那个该死的快捷方式就像焊死了一样,右键删除没反应,拖进回收站它又弹回来,一股无名火直冲脑门。这感觉我太懂了,就像鞋子里进了颗石子,不弄出来浑身难受。别慌,今天咱们不扯那些虚的,就一步步把这顽固玩意儿给收拾了。图标为何成
CAD2008注册码:那段寻找序列号的青春记忆与思考
.code-box {background-color: #2d2d2d;color: #f8f8f2;padding: 15px;border-radius: 5px;position: relative;overflow:
了解msiexec.exe:系统软件安装的关键进程
那天下午,我正在电脑前赶工,任务管理器突然弹出一个警告——CPU占用率飙升。我匆忙点开,在一堆进程里,一个名字让我愣住了:msiexec.exe。它安静地躺着,却吃掉了近30%的资源。我的第一反应是:“这该不会是木马吧?”毕竟,以“.
当你的 VMware 虚拟机亮起红灯,这 5 步能救你于水深火热中
Vmware无法安装就出现感叹号 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文
代码运行中遇到的"打开源文件“问题?这个方法超实用!
版本:VS2008Sp1旗舰版 一、无法打开源文件依次点击“项目——配置属性——CC++——常规”,在“附加包含目录”中加入.h文件所在的文件夹路径二、无法打开文件“XXX.lib
电脑配置新手教程:包装箱中的配置宝典,一目了然!
对于经常使用电脑的人来说这不算是问题,但是对于一些刚接触电脑小白。很多人的目光都停留在那个大屏幕的家伙(显示器)上面,认为显示器就是电脑最贵重的部分,认为显示器大气漂亮,就是好电脑,其实如果这样认为的话,就大错特错了,要看电脑配置,性
vcomp100.dll挂掉,代码怎么继续?
在日常使用电脑的过程中,我们可能会遇到一些错误提示,其中之一就是“vcomp100.dll丢失”。那么,vcomp100.dll是什么?它为什么会丢失?对电脑有什么具体影响?如何解决这个问题?本文将为您详细解答这些问题,并提供5种解决
游戏卡壳了?D3DX9_43.dll 丢失?赶紧试试这5种方法,让游戏立刻重启!
启动游戏时候出现d3dx9_43.dll丢失或许找不到d3dx9_43.dll无法继续执行代码怎么办?今天我玩游戏也遇到这个问题,下面我将介绍一下d3dx9_43.dll是什么与d3dx9_43.dll丢失的多种解决方法!
发表评论