HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

【一个好用的css】pointer-events;当前元素可不可以被点击,实现穿透点击,穿透层级高的视图,点击层级低的视图

点击事件 css样式 css

官方文档:https://developer.mozilla.org/zh-CN/docs/Web/CSS/pointer-events

pointer-events: auto; 与pointer-events属性未指定时的表现效果相同,对于 SVG 内容,该值与visiblePainted效果相同
pointer-events: none; 元素永远不会成为鼠标事件的target。但是,当其后代元素的pointer-events属性指定其他值时,鼠标事件可以指向后代元素,在这种情况下,鼠标事件将在捕获或冒泡阶段触发父元素的事件侦听器。

下面这个例子是不会触发onTap事件的

<template>  
    <view>  
        <view class="a"></view>  
        <view class="b" @tap="onTap"></view>  
    </view>  
</template>  

<script>  
export default {  
    methods: {  
        onTap() {  
            console.log("点击了b");  
        }  
    }  
}  
</script>  

<style lang="scss" scoped>  
    .a {  
        position: fixed;  
        top: 0;  
        left: 0;  
        right: 0;  
        height: 100vh;  
        z-index: 10;  
    }  
    .b {  
        width: 100px;  
        height: 100px;  
        background-color: aqua;  
    }  
</style>

下面这个例子会触发onTap事件的,在a的样式加上pointer-events: none;,b的样式加上pointer-events: auto;其他不变

<template>  
    <view>  
        <view class="a"></view>  
        <view class="b" @tap="onTap"></view>  
    </view>  
</template>  

<script>  
export default {  
    methods: {  
        onTap() {  
            console.log("点击了b");  
        }  
    }  
}  
</script>  

<style lang="scss" scoped>  
    .a {  
        position: fixed;  
        top: 0;  
        left: 0;  
        right: 0;  
        height: 100vh;  
        z-index: 10;  
        pointer-events: none;  
    }  
    .b {  
        width: 100px;  
        height: 100px;  
        background-color: aqua;  
        pointer-events: auto;  
    }  
</style>

↓↓↓ 各位大佬点点赞

继续阅读 »

官方文档:https://developer.mozilla.org/zh-CN/docs/Web/CSS/pointer-events

pointer-events: auto; 与pointer-events属性未指定时的表现效果相同,对于 SVG 内容,该值与visiblePainted效果相同
pointer-events: none; 元素永远不会成为鼠标事件的target。但是,当其后代元素的pointer-events属性指定其他值时,鼠标事件可以指向后代元素,在这种情况下,鼠标事件将在捕获或冒泡阶段触发父元素的事件侦听器。

下面这个例子是不会触发onTap事件的

<template>  
    <view>  
        <view class="a"></view>  
        <view class="b" @tap="onTap"></view>  
    </view>  
</template>  

<script>  
export default {  
    methods: {  
        onTap() {  
            console.log("点击了b");  
        }  
    }  
}  
</script>  

<style lang="scss" scoped>  
    .a {  
        position: fixed;  
        top: 0;  
        left: 0;  
        right: 0;  
        height: 100vh;  
        z-index: 10;  
    }  
    .b {  
        width: 100px;  
        height: 100px;  
        background-color: aqua;  
    }  
</style>

下面这个例子会触发onTap事件的,在a的样式加上pointer-events: none;,b的样式加上pointer-events: auto;其他不变

<template>  
    <view>  
        <view class="a"></view>  
        <view class="b" @tap="onTap"></view>  
    </view>  
</template>  

<script>  
export default {  
    methods: {  
        onTap() {  
            console.log("点击了b");  
        }  
    }  
}  
</script>  

<style lang="scss" scoped>  
    .a {  
        position: fixed;  
        top: 0;  
        left: 0;  
        right: 0;  
        height: 100vh;  
        z-index: 10;  
        pointer-events: none;  
    }  
    .b {  
        width: 100px;  
        height: 100px;  
        background-color: aqua;  
        pointer-events: auto;  
    }  
</style>

↓↓↓ 各位大佬点点赞

收起阅读 »

vue3 + uniapp 可以直接开发鸿蒙啦!

uniapp

7 月 20 号,uniapp 官网上线了 uniapp 开发鸿蒙应用的文档,标志着 Vue3 + uniapp 开发鸿蒙应用时代的开启。

鸿蒙开发的支持与限制

鸿蒙开发仅支持 Vue3,不支持 Vue2 和 plus,
支持 nvue,nvue 编译到鸿蒙后非原生渲染。

开发环境要求

DevEco-Studio 5.0.3.400 以上 (DevEco-Studio 较大,达10G*)
鸿蒙系统版本 API 12 以上,HBuilderX-alpha-4.22 以上
Windows 系统使用模拟器需开启特定功能,且家庭版需升级。

配置鸿蒙离线 SDK 及相关操作
包括下载、解压、在 DevEco-Studio 中打开、启动模拟器或连接真机、配置签名等步骤。
启动鸿蒙模拟器
分为三步,包括下载、解压、等待 Sync 结束等,还涉及开发者申请。

<​当前缺个机会,缺份工作,想靠大厂外包过渡下的兄弟姐妹们,可以一起来共事,前、后端/测试年前捞人,待遇给的还可以,感兴趣可以来>

安装完模拟器后,点击启动按钮启动模拟器

启动模拟器成功后,如果提示需要先签名,则进行配置签名

连接鸿蒙真机

注意:真机需要鸿蒙系统版本 API 12 以上

打开鸿蒙手机开发者模式,开启USB调试,通过USB线连接电脑,在此处选择你的手机名称,再启动项目即可,如果提示需要先签名,则进行配置签名

配置 HBuilderX 吊起 DevEco-Studio:在 HBuilderX 中进行相关设置,填写 DevEco-Studio 启动路径。
创建 uni-app 工程:在 BuilderX 新建空白项目,选 vue3,在 manifest.json 文件中配置鸿蒙离线 SDK 路径。

配置签名

注意:配置签名需要先启动模拟器或连接真机后才能配置

配置 HBuilderX settings.json
需在 HBuilderX 中进行特定的设置操作

打开HBuilderX,点击上方菜单 - 工具 - 设置,在出现的弹窗右侧窗体新增如下配置
注意:值填你自己的 DevEco-Studio 启动路径

json 代码解读复制代码"harmony.devTools.path" : "D:/Huawei/DevEco Studio"

使用 uts 调用鸿蒙原生 API, 第三方API
调用鸿蒙原生 API
uni-app在Android和iOS平台,支持uts插件和App原生语言插件。目前App原生语言插件已经停止维护。uts插件是主推的扩展方式。
鸿蒙系统有很多原生API,可以通过uts插件方式接入,被uni-app调用。

uts插件介绍
uts插件鸿蒙开发专题

调用第三方 API
新增于 HBuilderX 4.25,有特定的使用流程和限制。
鸿蒙的包用法和npm包差不多,在鸿蒙项目里面用ohpm安装三方库后,在 /uni_modules/uts插件名/utssdk/app-harmony/index.uts 内即可直接 import
注意:只能在满足uts插件 /uni_modules//utssdk/app-harmony/.uts 的文件下使用,无法直接在项目的pages中使用
具体使用流程:在项目的pages引入uts插件,uts插件内再引入鸿蒙第三方库调用
发布鸿蒙应用
鸿蒙官方文档提供了如何发布鸿蒙应用,详见 文档

注意事项

移植已有的 uni-app 项目源码时,如有其他 npm 依赖,请自行安装
现阶段条件编译仅 APP-HARMONY、APP 可以命中鸿蒙平台
每次HBuilderX改动源码后,DevEco-Studio 内需要点重新运行才能生效
如果模拟器白屏了,尝试重启软件 DevEco-Studio,再重启项目
如果模拟器无法连接了,尝试重启电脑
在HBuilderX里运行后,需要再去鸿蒙 DevEco Studio里运行
在HBuilderX里修改代码后,需要去鸿蒙 DevEco Studio里重新运行
如果有多个uni-app项目要编译到鸿蒙,那么鸿蒙离线sdk需要放置多份,每个uni-app的manifest中配置不同的离线sdk地址,否则会冲突,鸿蒙设备上目前没有基座概念

总结
这样我们就有了一个初始的鸿蒙项目,并且可以在鸿蒙模拟器上运行。关于更多 uniapp 开发鸿蒙的 API,大家可以直接参考 uniapp 官方文档

——转载自作者:码上解忧铺

继续阅读 »

7 月 20 号,uniapp 官网上线了 uniapp 开发鸿蒙应用的文档,标志着 Vue3 + uniapp 开发鸿蒙应用时代的开启。

鸿蒙开发的支持与限制

鸿蒙开发仅支持 Vue3,不支持 Vue2 和 plus,
支持 nvue,nvue 编译到鸿蒙后非原生渲染。

开发环境要求

DevEco-Studio 5.0.3.400 以上 (DevEco-Studio 较大,达10G*)
鸿蒙系统版本 API 12 以上,HBuilderX-alpha-4.22 以上
Windows 系统使用模拟器需开启特定功能,且家庭版需升级。

配置鸿蒙离线 SDK 及相关操作
包括下载、解压、在 DevEco-Studio 中打开、启动模拟器或连接真机、配置签名等步骤。
启动鸿蒙模拟器
分为三步,包括下载、解压、等待 Sync 结束等,还涉及开发者申请。

<​当前缺个机会,缺份工作,想靠大厂外包过渡下的兄弟姐妹们,可以一起来共事,前、后端/测试年前捞人,待遇给的还可以,感兴趣可以来>

安装完模拟器后,点击启动按钮启动模拟器

启动模拟器成功后,如果提示需要先签名,则进行配置签名

连接鸿蒙真机

注意:真机需要鸿蒙系统版本 API 12 以上

打开鸿蒙手机开发者模式,开启USB调试,通过USB线连接电脑,在此处选择你的手机名称,再启动项目即可,如果提示需要先签名,则进行配置签名

配置 HBuilderX 吊起 DevEco-Studio:在 HBuilderX 中进行相关设置,填写 DevEco-Studio 启动路径。
创建 uni-app 工程:在 BuilderX 新建空白项目,选 vue3,在 manifest.json 文件中配置鸿蒙离线 SDK 路径。

配置签名

注意:配置签名需要先启动模拟器或连接真机后才能配置

配置 HBuilderX settings.json
需在 HBuilderX 中进行特定的设置操作

打开HBuilderX,点击上方菜单 - 工具 - 设置,在出现的弹窗右侧窗体新增如下配置
注意:值填你自己的 DevEco-Studio 启动路径

json 代码解读复制代码"harmony.devTools.path" : "D:/Huawei/DevEco Studio"

使用 uts 调用鸿蒙原生 API, 第三方API
调用鸿蒙原生 API
uni-app在Android和iOS平台,支持uts插件和App原生语言插件。目前App原生语言插件已经停止维护。uts插件是主推的扩展方式。
鸿蒙系统有很多原生API,可以通过uts插件方式接入,被uni-app调用。

uts插件介绍
uts插件鸿蒙开发专题

调用第三方 API
新增于 HBuilderX 4.25,有特定的使用流程和限制。
鸿蒙的包用法和npm包差不多,在鸿蒙项目里面用ohpm安装三方库后,在 /uni_modules/uts插件名/utssdk/app-harmony/index.uts 内即可直接 import
注意:只能在满足uts插件 /uni_modules//utssdk/app-harmony/.uts 的文件下使用,无法直接在项目的pages中使用
具体使用流程:在项目的pages引入uts插件,uts插件内再引入鸿蒙第三方库调用
发布鸿蒙应用
鸿蒙官方文档提供了如何发布鸿蒙应用,详见 文档

注意事项

移植已有的 uni-app 项目源码时,如有其他 npm 依赖,请自行安装
现阶段条件编译仅 APP-HARMONY、APP 可以命中鸿蒙平台
每次HBuilderX改动源码后,DevEco-Studio 内需要点重新运行才能生效
如果模拟器白屏了,尝试重启软件 DevEco-Studio,再重启项目
如果模拟器无法连接了,尝试重启电脑
在HBuilderX里运行后,需要再去鸿蒙 DevEco Studio里运行
在HBuilderX里修改代码后,需要去鸿蒙 DevEco Studio里重新运行
如果有多个uni-app项目要编译到鸿蒙,那么鸿蒙离线sdk需要放置多份,每个uni-app的manifest中配置不同的离线sdk地址,否则会冲突,鸿蒙设备上目前没有基座概念

总结
这样我们就有了一个初始的鸿蒙项目,并且可以在鸿蒙模拟器上运行。关于更多 uniapp 开发鸿蒙的 API,大家可以直接参考 uniapp 官方文档

——转载自作者:码上解忧铺

收起阅读 »

app打包 Error code = -5001 Error message: Error: invalid uni ID in mainfest.json!

云端打包发布常见问题

UNI4013F8F

Error code = -5001 Error message: Error: invalid uni ID in mainfest.json!

UNI4013F8F

Error code = -5001 Error message: Error: invalid uni ID in mainfest.json!

scroll-into-view使用注意事项

scroll_view

1:不能写成死值
<scroll-view :scroll-into-view="scrollIntoView" scroll-with-animation class="index-container" scroll-y="true" @scroll="handleScroll">
2:且要变化,否则再次触发返回顶部的时候 会失效

        let scrollIntoView = ref('')  

    function handleScroll(event) {  

        scrollIntoView.value = ''  

    }  

    function backToTop() {  
        scrollIntoView.value = "top"  
    }
继续阅读 »

1:不能写成死值
<scroll-view :scroll-into-view="scrollIntoView" scroll-with-animation class="index-container" scroll-y="true" @scroll="handleScroll">
2:且要变化,否则再次触发返回顶部的时候 会失效

        let scrollIntoView = ref('')  

    function handleScroll(event) {  

        scrollIntoView.value = ''  

    }  

    function backToTop() {  
        scrollIntoView.value = "top"  
    }
收起阅读 »

springboot vue uniapp 仿小红书 1:1 还原 (含源码演示)

小红书小程序 分享源码 源码分享 源码

线上预览:

移动端 http://8.146.211.120:8081/

管理端 http://8.146.211.120:8088/

小红书凭借优秀的产品体验 和超高人气 目前成为笔记类产品佼佼者

此项目将详细介绍如何使用Vue.js和Spring Boot 集合uniapp

开发一个仿小红书的城应用,凭借uniapp 可以在h5 小程序 app等多端使用

技术栈

移动端 uniapp graceui

管理端 vue element

后台 springboot springsecurity mybatisPlus tio-websocket

主要功能

  • 笔记创建 编辑 发布

  • 点赞笔记、评论

  • 回复笔记、评论

  • 私信、客服聊天

  • 后台笔记编辑 下架

  • 后台博主冻结

  • 后台客服系统

  • 系统消息维护

思维导图

项目展示

项目启动

后台运行环境

  • jdk1.8

  • mysql5.7

  • redis

启动步骤

1.下载pom文件依赖

2.导入项目中的sql

3.修改yml参数(端口号 数据库名)

4.如果 mysql 报错 order by和group by 执行sql报错sql_mode=only_full_group_by问题解决


SELECT @@GLOBAL.sql_mode;  

SELECT @@SESSION.sql_mode;  

set @@GLOBAL.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';  

set @@SESSION.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';  

FLUSH PRIVILEGES;  

5.打包 mvn clean package -Dmaven.test.skip=true 打包后jar文件可以正常运行

管理端前台运行环境

  • node v14.21.3

  • elementui 2.15.14

  • vue 2.6.14

启动步骤

1.cd 根目录的web文件夹下

2.执行npm install下载依赖

3.执行npm run dev启动

4.修改.env.xx修改测试环境和正式环境端口

5.npm run build进行打包

6.如果出现lemon imui 依赖报错 解压根目录下dist.rar文件夹到lemon imui根目录下即可

移动端前台

hbudiler 3.99

vue 3

移动端前台使用了graceUi6.0 需授权后找我覆盖文件

包结构说名

后端

  • 目前后端功能基本能满足我们需求

  • 后续开发建立和system同级目录 进行功能开发即可

写到最后

代码地址 https://gitee.com/ddeatrr/springboot_vue_xhs

继续阅读 »

线上预览:

移动端 http://8.146.211.120:8081/

管理端 http://8.146.211.120:8088/

小红书凭借优秀的产品体验 和超高人气 目前成为笔记类产品佼佼者

此项目将详细介绍如何使用Vue.js和Spring Boot 集合uniapp

开发一个仿小红书的城应用,凭借uniapp 可以在h5 小程序 app等多端使用

技术栈

移动端 uniapp graceui

管理端 vue element

后台 springboot springsecurity mybatisPlus tio-websocket

主要功能

  • 笔记创建 编辑 发布

  • 点赞笔记、评论

  • 回复笔记、评论

  • 私信、客服聊天

  • 后台笔记编辑 下架

  • 后台博主冻结

  • 后台客服系统

  • 系统消息维护

思维导图

项目展示

项目启动

后台运行环境

  • jdk1.8

  • mysql5.7

  • redis

启动步骤

1.下载pom文件依赖

2.导入项目中的sql

3.修改yml参数(端口号 数据库名)

4.如果 mysql 报错 order by和group by 执行sql报错sql_mode=only_full_group_by问题解决


SELECT @@GLOBAL.sql_mode;  

SELECT @@SESSION.sql_mode;  

set @@GLOBAL.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';  

set @@SESSION.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';  

FLUSH PRIVILEGES;  

5.打包 mvn clean package -Dmaven.test.skip=true 打包后jar文件可以正常运行

管理端前台运行环境

  • node v14.21.3

  • elementui 2.15.14

  • vue 2.6.14

启动步骤

1.cd 根目录的web文件夹下

2.执行npm install下载依赖

3.执行npm run dev启动

4.修改.env.xx修改测试环境和正式环境端口

5.npm run build进行打包

6.如果出现lemon imui 依赖报错 解压根目录下dist.rar文件夹到lemon imui根目录下即可

移动端前台

hbudiler 3.99

vue 3

移动端前台使用了graceUi6.0 需授权后找我覆盖文件

包结构说名

后端

  • 目前后端功能基本能满足我们需求

  • 后续开发建立和system同级目录 进行功能开发即可

写到最后

代码地址 https://gitee.com/ddeatrr/springboot_vue_xhs

收起阅读 »

我写了一个插件在uniapp上使用echarts-gl,支持Vue3,并配上了demo

echart uniapp

插件地址
这个就是一个对echarts的renderjs的封装。
用法也很简单。就是<uc-charts :option="option"/>
option变化自动更新。
app和web项目都是支持的。web的话你如果设置了web的根路径需要改下uc-charts.vue的文件的引用路径

继续阅读 »

插件地址
这个就是一个对echarts的renderjs的封装。
用法也很简单。就是<uc-charts :option="option"/>
option变化自动更新。
app和web项目都是支持的。web的话你如果设置了web的根路径需要改下uc-charts.vue的文件的引用路径

收起阅读 »

uni-app-x记账App完整源码&ApiFox接口实战项目

uni-app-x

简介
掌握真实项目开发技能!
本源码提供了一个完整的、已经实现的记账应用程序,使用了流行的uni-app-x框架进行前端构建,配合Apifox定义的API接口完成所有前后端交互逻辑。这不仅是一个学习如何在uni-app-x中创建高效、用户友好的界面的机会,更是一次深入了解实际项目开发流程的宝贵经验。
适合人群
无论是初学者还是有一定基础的开发者,这套源码都是提升技能的理想选择。对于那些渴望深入理解uni-app-x以及移动应用开发的人来说,这无疑是一笔值得投资的知识财富。

获取源码

继续阅读 »

简介
掌握真实项目开发技能!
本源码提供了一个完整的、已经实现的记账应用程序,使用了流行的uni-app-x框架进行前端构建,配合Apifox定义的API接口完成所有前后端交互逻辑。这不仅是一个学习如何在uni-app-x中创建高效、用户友好的界面的机会,更是一次深入了解实际项目开发流程的宝贵经验。
适合人群
无论是初学者还是有一定基础的开发者,这套源码都是提升技能的理想选择。对于那些渴望深入理解uni-app-x以及移动应用开发的人来说,这无疑是一笔值得投资的知识财富。

获取源码

收起阅读 »

Android请求对所有文件的访问权限

清单文件添加文件读写权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />  
class FileUtils {  

          static checkPermission() {  
                const Build = plus.android.importClass('android.os.Build');  
                if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R){  
                    const Environment =  plus.android.importClass("android.os.Environment");  
                    return Environment.isExternalStorageManager();  
                }  
                return true  
          }  

          static applyPermission(fn) {  
              const Build = plus.android.importClass('android.os.Build');  
              if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R){  
                var Intent = plus.android.importClass("android.content.Intent");  
                var Settings = plus.android.importClass("android.provider.Settings");  
                var Uri = plus.android.importClass("android.net.Uri");  
                var mainActivity = plus.android.runtimeMainActivity();  

                var intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);  
                var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);  
                intent.setData(uri);  
                // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
                mainActivity.startActivity(intent);   
              }  
              fn({state:'ok'})  
          }  
    }
if(FileUtils.checkPermission()==false){  
                    that.showLoading("请稍等")  
                    FileUtils.applyPermission(res => {  
                        uni.hideLoading()  
                    })  
                    return  
                }
继续阅读 »

清单文件添加文件读写权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />  
class FileUtils {  

          static checkPermission() {  
                const Build = plus.android.importClass('android.os.Build');  
                if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R){  
                    const Environment =  plus.android.importClass("android.os.Environment");  
                    return Environment.isExternalStorageManager();  
                }  
                return true  
          }  

          static applyPermission(fn) {  
              const Build = plus.android.importClass('android.os.Build');  
              if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R){  
                var Intent = plus.android.importClass("android.content.Intent");  
                var Settings = plus.android.importClass("android.provider.Settings");  
                var Uri = plus.android.importClass("android.net.Uri");  
                var mainActivity = plus.android.runtimeMainActivity();  

                var intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);  
                var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);  
                intent.setData(uri);  
                // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
                mainActivity.startActivity(intent);   
              }  
              fn({state:'ok'})  
          }  
    }
if(FileUtils.checkPermission()==false){  
                    that.showLoading("请稍等")  
                    FileUtils.applyPermission(res => {  
                        uni.hideLoading()  
                    })  
                    return  
                }
收起阅读 »

还学鸿蒙原生?vue3 + uniapp 可以直接开发鸿蒙啦!

鸿蒙next

7月20号,uniapp 官网“悄咪咪”的上线了 uniapp 开发鸿蒙应用 的文档,算是正式开启了 Vue3 + uniapp 开发鸿蒙应用 的时代。

<顺便吆喝一声,技术大厂年前捞人,前后端测试,待遇给的还不错,感兴趣可以试试~>

开发鸿蒙的前置准备
想要使用 uniapp 开发鸿蒙,我们需要具备三个条件:

DevEco-Studio 5.0.3.400 以上(下载地址:https://developer.huawei.com/consumer/cn/deveco-studio/)
鸿蒙系统版本 API 12 以上 (DevEco-Studio有内置鸿蒙模拟器)
HBuilderX-alpha-4.22 以上

PS: 这里不得不吐槽一下,一个 DevEco-Studio 竟然有 10 个 G......

安装好之后,我们就可以通过 开发工具 运行 示例代码

运行时,需要用到 鸿蒙真机或者模拟器。但是这里需要 注意: Windows系统需要经过特殊配置才可以启动,mac 系统最好保证系统版本在 mac os 12 以上
windows 系统配置方式(非 windows 用户可跳过):
打开控制面板 - 程序与功能 - 开启以下功能

Hyper-V
Windows 虚拟机监控程序平台
虚拟机平台

注意: 需要win10专业版或win11专业版才能开启以上功能,家庭版需先升级成专业版或企业版

启动鸿蒙模拟器
整个过程分为三步(中间会涉及到鸿蒙开发者申请):

下载 uni-app 鸿蒙离线SDK template-1.3.4.tgz (下载地址:https://web-ext-storage.dcloud.net.cn/uni-app/harmony/zip/template-1.3.4.tgz)
解压刚下载的压缩包,将解压后的模板工程在 DevEco-Studio 中打开

等待 Sync 结束,再 启动鸿蒙模拟器 或 连接鸿蒙真机(如无权限,则需要申请(一般 3 个工作日),申请地址:https://developer.huawei.com/consumer/cn/activity/201714466699051861/signup)

配置 HBuilderX 吊起 DevEco-Studio
打开HBuilderX,点击上方菜单 - 工具 - 设置,在出现的弹窗右侧窗体新增如下配置

注意:值填你自己的 DevEco-Studio 启动路径
js 代码解读复制代码"harmony.devTools.path" : "/Applications/DevEco-Studio.app"

创建 uni-app 工程

BuilderX 新建一个空白的 uniapp 项目,选vue3
在 manifest.json 文件中配置鸿蒙离线SDK路径(SDK 路径可在 DevEco-Studio -> Preferences(设置) z中获取)

编辑 manifest.json 文件,新增如下配置:

然后点击 运行到鸿蒙即可

总结
这样我们就有了一个初始的鸿蒙项目,并且可以在鸿蒙模拟器上运行。关于更多 uniapp 开发鸿蒙的 API,大家可以直接参考 uniapp 官方文档:https://zh.uniapp.dcloud.io/tutorial/harmony/dev.html#nativeapi

——转载自作者:程序员Sunday

继续阅读 »

7月20号,uniapp 官网“悄咪咪”的上线了 uniapp 开发鸿蒙应用 的文档,算是正式开启了 Vue3 + uniapp 开发鸿蒙应用 的时代。

<顺便吆喝一声,技术大厂年前捞人,前后端测试,待遇给的还不错,感兴趣可以试试~>

开发鸿蒙的前置准备
想要使用 uniapp 开发鸿蒙,我们需要具备三个条件:

DevEco-Studio 5.0.3.400 以上(下载地址:https://developer.huawei.com/consumer/cn/deveco-studio/)
鸿蒙系统版本 API 12 以上 (DevEco-Studio有内置鸿蒙模拟器)
HBuilderX-alpha-4.22 以上

PS: 这里不得不吐槽一下,一个 DevEco-Studio 竟然有 10 个 G......

安装好之后,我们就可以通过 开发工具 运行 示例代码

运行时,需要用到 鸿蒙真机或者模拟器。但是这里需要 注意: Windows系统需要经过特殊配置才可以启动,mac 系统最好保证系统版本在 mac os 12 以上
windows 系统配置方式(非 windows 用户可跳过):
打开控制面板 - 程序与功能 - 开启以下功能

Hyper-V
Windows 虚拟机监控程序平台
虚拟机平台

注意: 需要win10专业版或win11专业版才能开启以上功能,家庭版需先升级成专业版或企业版

启动鸿蒙模拟器
整个过程分为三步(中间会涉及到鸿蒙开发者申请):

下载 uni-app 鸿蒙离线SDK template-1.3.4.tgz (下载地址:https://web-ext-storage.dcloud.net.cn/uni-app/harmony/zip/template-1.3.4.tgz)
解压刚下载的压缩包,将解压后的模板工程在 DevEco-Studio 中打开

等待 Sync 结束,再 启动鸿蒙模拟器 或 连接鸿蒙真机(如无权限,则需要申请(一般 3 个工作日),申请地址:https://developer.huawei.com/consumer/cn/activity/201714466699051861/signup)

配置 HBuilderX 吊起 DevEco-Studio
打开HBuilderX,点击上方菜单 - 工具 - 设置,在出现的弹窗右侧窗体新增如下配置

注意:值填你自己的 DevEco-Studio 启动路径
js 代码解读复制代码"harmony.devTools.path" : "/Applications/DevEco-Studio.app"

创建 uni-app 工程

BuilderX 新建一个空白的 uniapp 项目,选vue3
在 manifest.json 文件中配置鸿蒙离线SDK路径(SDK 路径可在 DevEco-Studio -> Preferences(设置) z中获取)

编辑 manifest.json 文件,新增如下配置:

然后点击 运行到鸿蒙即可

总结
这样我们就有了一个初始的鸿蒙项目,并且可以在鸿蒙模拟器上运行。关于更多 uniapp 开发鸿蒙的 API,大家可以直接参考 uniapp 官方文档:https://zh.uniapp.dcloud.io/tutorial/harmony/dev.html#nativeapi

——转载自作者:程序员Sunday

收起阅读 »

uniapp Android 原生插件开发-Module扩展为例-从开发到测试到部署到uniapp项目

uniapp原生插件

参考博客uniapp Android 原生插件开发(Module 扩展为例·2022)

首先在这里贴上官方文档- uni原生语言插件开发教程,有官方文档了,还要写这篇文章是因为我在根据文档开发插件的过程中,还是碰到了很多问题,在Google,查阅官方论坛之后还是没有解决,最后自己摸索解决了,所以在这里记录一下。

前言

本篇文章重在介绍开发完插件后测试部署的过程,Android Studio的使用不做介绍

准备

根据官方文档下载并导入UniPlugin-Hello-AS工程到Android Studio

插件开发

在官方提供的项目中新建library的Module,复制uniplugin_module模块的build.gradle配置到新建module的build.gradle,可根据实际情况修改compileSdkVersion和targetSdkVersion。接下来创建Module类,写扩展方法。这一步骤官方文档写的也很详细。

插件调试

对于需求明确,有一定专业知识的开发者来说,开发一个插件并不难。关键是要调试,这里官方文档写的就不是很详细了。

首先说明一点:做好的插件最终是要放在uniapp项目中的。其实开发好的插件不经过调试直接放在uniapp也可以,但是谁也不能保证一次就能把插件写的很完美,而每一次修改插件放在uniapp后都需要重新打包自定义插件。而打包自定义插件可能是一个痛苦的过程--可能需要等待的时间很长,打包次数也有限制

所以要在UniPlugin-Hello-AS工程下进行调试,这个工程相当于App离线打包,只是官方配置号了一个必要的环境

离线打包调试

离线打包调试的必要条件是要有Appkey,而申请AppKey需要有Android 签名文件,如果没有可以自己百度搜索创建Android 签名文件或者在Dcloud开发者后台创建签名文件,可参考官方文档申请Appkey

在Android Studio中修改配置文件

有了AppKey之后,修改UniPlugin-Hello-AS工程app模块的配置文件

  1. 修改namespace和applicationId为自己的包名-要和开发者后台中的一致
  2. 修改签名文件配置(signingConfigs),其中keyAlias、keyPassword、storeFile都要使用自己申请AppKey时使用的签名文件信息
  3. 修改清单文件(AndroidManifest)里的dcloud_appkey的value--就是申请的之前申请的AppKey
  4. 在assets资源目录下的dcloud_uniplugins.json配置文件增加自己的插件配置,参考官方文档其中name属性要记住,之后用得到
  5. 再修改assets/data/dcloud_control.xml中的appid的值,是自己的uniapp应用对应的AppID

至此UniPlugin-Hello-AS工程app模块的配置文件修改完成

引入插件

通过使用uni.requireNativePlugin获取插件对象。

const pluginImpl = uni.requireNativePlugin('插件 name')//这里的插件name就是刚才在dcloud_uniplugins.json文件里配置的插件的name

生成本地App打包资源

在自己的uniapp项目里选择 发行--->APP-本地打包--->生成本地打包App资源 等待资源生成

等待资源生成后复制生成的资源,要复制www文件夹上一层的文件夹,即__UNI__878995A这个格式的文件夹,复制这个文件夹到UniPlugin-Hello-AS工程app模块的assets\apps目录下

至此测试准别工作完成,可以在Android Studio里运行UniPlugin-Hello-AS项目进行测试了,测试没问题后就可以生成uniapp插件了

生成uniapp插件

网上的文档都是选择Android Studio的可视化编译命令进行生成aar文件的,好多同学说找不到assembleRelease,也有同学给出了处理方案,这其实就是一个命令,完全可以自己执行命令,如下图,其中uniapp-ext是自己编写插件是新建的module名称

构建成功之后就可以在build/outputs/arr目录下找到编译好的插件

引入插件到uniapp项目

创建目录:在uniapp项目中创建nativeplugins目录(如有可忽略这一步),然后准备相关文件,官方示例如下

|-- DCloud-RichAlert --->插件id命名的文件夹(个人认为这里是一插件库id命名的文件夹,就是这个插件库里可以有很多个插件,这些很多个插件公用这个插件库id)  
   |-- android       --->安卓插件目录  
      |--libs  
         - xxx.jar    --->依赖的jar  
         - libxxx.so  --->依赖的so文件  
      - vendor.aar   --->依赖的aar  
      - unipluginRichAlert.aar --->插件module的aar  

创建package.json文件并填写必要的信息。放入到android目录下,这里对package.json做一下说明,因为我在这个文件上吃了大坑。package.json里有一些可选配置,如果在编写插件时使用了,就一定要加上,否则也有可能提示当前运行的基座不包含原生插件的提示,比如dependenciespermissionsuseAndroidX,因为我的插件使用了这些配置,可能导致生成自定义基座时,其实插件是没有生成成功的,最后导致使用requireNativePlugin的时候一致提示当前运行的基座不包含原生插件<u>所以你的插件使用的一些额外的配置一定要在package.json里都配置上</u>

{  
    "name": "插件名称",  
    "id": "DCloud-RichAlert", // 插件库标识(这里一定要和上面创建的文件夹名称一致,即插件库的id)  
    "version": "插件版本号",  
    "description": "插件描述信息",  
    "_dp_type":"nativeplugin",  
    "_dp_nativeplugin":{  
        "android": {  
            "plugins": [  
                {  
                    "type": "module",  
                    //这个name就是dcloud_uniplugins.json文件里配置的插件的name,也是使用requireNativePlugin时的参数  
                    "name": "DCloud-RichAlert_TestModule", //id为前缀 这里的name也可以和插件库标识一致,也可以一插件库标识为前缀  
                    "class": "uni.dcloud.io.uniplugin_richalert.TestModule"  
                },  
                {  
                    "type": "component",  
                    "name": "DCloud-RichAlert_TestComponent",  
                    "class": "uni.dcloud.io.uniplugin_richalert.TestComponent"  
                }  
            ]  
        }  
    }  
    ...  
    ...  

<u>在uniapp项目的manifest.json文件中添加配置好的插件</u>,这一步也很重要。

至此引入完成

继续阅读 »

参考博客uniapp Android 原生插件开发(Module 扩展为例·2022)

首先在这里贴上官方文档- uni原生语言插件开发教程,有官方文档了,还要写这篇文章是因为我在根据文档开发插件的过程中,还是碰到了很多问题,在Google,查阅官方论坛之后还是没有解决,最后自己摸索解决了,所以在这里记录一下。

前言

本篇文章重在介绍开发完插件后测试部署的过程,Android Studio的使用不做介绍

准备

根据官方文档下载并导入UniPlugin-Hello-AS工程到Android Studio

插件开发

在官方提供的项目中新建library的Module,复制uniplugin_module模块的build.gradle配置到新建module的build.gradle,可根据实际情况修改compileSdkVersion和targetSdkVersion。接下来创建Module类,写扩展方法。这一步骤官方文档写的也很详细。

插件调试

对于需求明确,有一定专业知识的开发者来说,开发一个插件并不难。关键是要调试,这里官方文档写的就不是很详细了。

首先说明一点:做好的插件最终是要放在uniapp项目中的。其实开发好的插件不经过调试直接放在uniapp也可以,但是谁也不能保证一次就能把插件写的很完美,而每一次修改插件放在uniapp后都需要重新打包自定义插件。而打包自定义插件可能是一个痛苦的过程--可能需要等待的时间很长,打包次数也有限制

所以要在UniPlugin-Hello-AS工程下进行调试,这个工程相当于App离线打包,只是官方配置号了一个必要的环境

离线打包调试

离线打包调试的必要条件是要有Appkey,而申请AppKey需要有Android 签名文件,如果没有可以自己百度搜索创建Android 签名文件或者在Dcloud开发者后台创建签名文件,可参考官方文档申请Appkey

在Android Studio中修改配置文件

有了AppKey之后,修改UniPlugin-Hello-AS工程app模块的配置文件

  1. 修改namespace和applicationId为自己的包名-要和开发者后台中的一致
  2. 修改签名文件配置(signingConfigs),其中keyAlias、keyPassword、storeFile都要使用自己申请AppKey时使用的签名文件信息
  3. 修改清单文件(AndroidManifest)里的dcloud_appkey的value--就是申请的之前申请的AppKey
  4. 在assets资源目录下的dcloud_uniplugins.json配置文件增加自己的插件配置,参考官方文档其中name属性要记住,之后用得到
  5. 再修改assets/data/dcloud_control.xml中的appid的值,是自己的uniapp应用对应的AppID

至此UniPlugin-Hello-AS工程app模块的配置文件修改完成

引入插件

通过使用uni.requireNativePlugin获取插件对象。

const pluginImpl = uni.requireNativePlugin('插件 name')//这里的插件name就是刚才在dcloud_uniplugins.json文件里配置的插件的name

生成本地App打包资源

在自己的uniapp项目里选择 发行--->APP-本地打包--->生成本地打包App资源 等待资源生成

等待资源生成后复制生成的资源,要复制www文件夹上一层的文件夹,即__UNI__878995A这个格式的文件夹,复制这个文件夹到UniPlugin-Hello-AS工程app模块的assets\apps目录下

至此测试准别工作完成,可以在Android Studio里运行UniPlugin-Hello-AS项目进行测试了,测试没问题后就可以生成uniapp插件了

生成uniapp插件

网上的文档都是选择Android Studio的可视化编译命令进行生成aar文件的,好多同学说找不到assembleRelease,也有同学给出了处理方案,这其实就是一个命令,完全可以自己执行命令,如下图,其中uniapp-ext是自己编写插件是新建的module名称

构建成功之后就可以在build/outputs/arr目录下找到编译好的插件

引入插件到uniapp项目

创建目录:在uniapp项目中创建nativeplugins目录(如有可忽略这一步),然后准备相关文件,官方示例如下

|-- DCloud-RichAlert --->插件id命名的文件夹(个人认为这里是一插件库id命名的文件夹,就是这个插件库里可以有很多个插件,这些很多个插件公用这个插件库id)  
   |-- android       --->安卓插件目录  
      |--libs  
         - xxx.jar    --->依赖的jar  
         - libxxx.so  --->依赖的so文件  
      - vendor.aar   --->依赖的aar  
      - unipluginRichAlert.aar --->插件module的aar  

创建package.json文件并填写必要的信息。放入到android目录下,这里对package.json做一下说明,因为我在这个文件上吃了大坑。package.json里有一些可选配置,如果在编写插件时使用了,就一定要加上,否则也有可能提示当前运行的基座不包含原生插件的提示,比如dependenciespermissionsuseAndroidX,因为我的插件使用了这些配置,可能导致生成自定义基座时,其实插件是没有生成成功的,最后导致使用requireNativePlugin的时候一致提示当前运行的基座不包含原生插件<u>所以你的插件使用的一些额外的配置一定要在package.json里都配置上</u>

{  
    "name": "插件名称",  
    "id": "DCloud-RichAlert", // 插件库标识(这里一定要和上面创建的文件夹名称一致,即插件库的id)  
    "version": "插件版本号",  
    "description": "插件描述信息",  
    "_dp_type":"nativeplugin",  
    "_dp_nativeplugin":{  
        "android": {  
            "plugins": [  
                {  
                    "type": "module",  
                    //这个name就是dcloud_uniplugins.json文件里配置的插件的name,也是使用requireNativePlugin时的参数  
                    "name": "DCloud-RichAlert_TestModule", //id为前缀 这里的name也可以和插件库标识一致,也可以一插件库标识为前缀  
                    "class": "uni.dcloud.io.uniplugin_richalert.TestModule"  
                },  
                {  
                    "type": "component",  
                    "name": "DCloud-RichAlert_TestComponent",  
                    "class": "uni.dcloud.io.uniplugin_richalert.TestComponent"  
                }  
            ]  
        }  
    }  
    ...  
    ...  

<u>在uniapp项目的manifest.json文件中添加配置好的插件</u>,这一步也很重要。

至此引入完成

收起阅读 »

uniapp Android 原生插件开发-Module扩展为例-从开发到测试到部署到uniapp项目

uniapp原生插件

参考博客uniapp Android 原生插件开发(Module 扩展为例·2022)

首先在这里贴上官方文档- uni原生语言插件开发教程,有官方文档了,还要写这篇文章是因为我在根据文档开发插件的过程中,还是碰到了很多问题,在Google,查阅官方论坛之后还是没有解决,最后自己摸索解决了,所以在这里记录一下。

前言

本篇文章重在介绍开发完插件后测试部署的过程,Android Studio的使用不做介绍

准备

根据官方文档下载并导入UniPlugin-Hello-AS工程到Android Studio

插件开发

在官方提供的项目中新建library的Module,复制uniplugin_module模块的build.gradle配置到新建module的build.gradle,可根据实际情况修改compileSdkVersion和targetSdkVersion。接下来创建Module类,写扩展方法。这一步骤官方文档写的也很详细。

插件调试

对于需求明确,有一定专业知识的开发者来说,开发一个插件并不难。关键是要调试,这里官方文档写的就不是很详细了。

首先说明一点:做好的插件最终是要放在uniapp项目中的。其实开发好的插件不经过调试直接放在uniapp也可以,但是谁也不能保证一次就能把插件写的很完美,而每一次修改插件放在uniapp后都需要重新打包自定义插件。而打包自定义插件可能是一个痛苦的过程--可能需要等待的时间很长,打包次数也有限制

所以要在UniPlugin-Hello-AS工程下进行调试,这个工程相当于App离线打包,只是官方配置号了一个必要的环境

离线打包调试

离线打包调试的必要条件是要有Appkey,而申请AppKey需要有Android 签名文件,如果没有可以自己百度搜索创建Android 签名文件或者在Dcloud开发者后台创建签名文件,可参考官方文档申请Appkey

在Android Studio中修改配置文件

有了AppKey之后,修改UniPlugin-Hello-AS工程app模块的配置文件

  1. 修改namespace和applicationId为自己的包名-要和开发者后台中的一致
  2. 修改签名文件配置(signingConfigs),其中keyAlias、keyPassword、storeFile都要使用自己申请AppKey时使用的签名文件信息
  3. 修改清单文件(AndroidManifest)里的dcloud_appkey的value--就是申请的之前申请的AppKey
  4. 在assets资源目录下的dcloud_uniplugins.json配置文件增加自己的插件配置,参考官方文档其中name属性要记住,之后用得到
  5. 再修改assets/data/dcloud_control.xml中的appid的值,是自己的uniapp应用对应的AppID

至此UniPlugin-Hello-AS工程app模块的配置文件修改完成

引入插件

通过使用uni.requireNativePlugin获取插件对象。

const pluginImpl = uni.requireNativePlugin('插件 name')//这里的插件name就是刚才在dcloud_uniplugins.json文件里配置的插件的name

生成本地App打包资源

在自己的uniapp项目里选择 发行--->APP-本地打包--->生成本地打包App资源 等待资源生成

等待资源生成后复制生成的资源,要复制www文件夹上一层的文件夹,即__UNI__878995A这个格式的文件夹,复制这个文件夹到UniPlugin-Hello-AS工程app模块的assets\apps目录下

至此测试准别工作完成,可以在Android Studio里运行UniPlugin-Hello-AS项目进行测试了,测试没问题后就可以生成uniapp插件了

生成uniapp插件

网上的文档都是选择Android Studio的可视化编译命令进行生成aar文件的,好多同学说找不到assembleRelease,也有同学给出了处理方案,这其实就是一个命令,完全可以自己执行命令,如下图,其中uniapp-ext是自己编写插件是新建的module名称
![1736406487791](D:\WeChatFiles\WeChat Files\k330756854\FileStorage\Temp\1736406487791.jpg)

构建成功之后就可以在build/outputs/arr目录下找到编译好的插件

引入插件到uniapp项目

创建目录:在uniapp项目中创建nativeplugins目录(如有可忽略这一步),然后准备相关文件,官方示例如下

|-- DCloud-RichAlert --->插件id命名的文件夹(个人认为这里是一插件库id命名的文件夹,就是这个插件库里可以有很多个插件,这些很多个插件公用这个插件库id)  
   |-- android       --->安卓插件目录  
      |--libs  
         - xxx.jar    --->依赖的jar  
         - libxxx.so  --->依赖的so文件  
      - vendor.aar   --->依赖的aar  
      - unipluginRichAlert.aar --->插件module的aar  

创建package.json文件并填写必要的信息。放入到android目录下,这里对package.json做一下说明,因为我在这个文件上吃了大坑。package.json里有一些可选配置,如果在编写插件时使用了,就一定要加上,否则也有可能提示当前运行的基座不包含原生插件的提示,比如dependenciespermissionsuseAndroidX,因为我的插件使用了这些配置,可能导致生成自定义基座时,其实插件是没有生成成功的,最后导致使用requireNativePlugin的时候一致提示当前运行的基座不包含原生插件<u>所以你的插件使用的一些额外的配置一定要在package.json里都配置上</u>

{  
    "name": "插件名称",  
    "id": "DCloud-RichAlert", // 插件库标识(这里一定要和上面创建的文件夹名称一致,即插件库的id)  
    "version": "插件版本号",  
    "description": "插件描述信息",  
    "_dp_type":"nativeplugin",  
    "_dp_nativeplugin":{  
        "android": {  
            "plugins": [  
                {  
                    "type": "module",  
                    //这个name就是dcloud_uniplugins.json文件里配置的插件的name,也是使用requireNativePlugin时的参数  
                    "name": "DCloud-RichAlert_TestModule", //id为前缀 这里的name也可以和插件库标识一致,也可以一插件库标识为前缀  
                    "class": "uni.dcloud.io.uniplugin_richalert.TestModule"  
                },  
                {  
                    "type": "component",  
                    "name": "DCloud-RichAlert_TestComponent",  
                    "class": "uni.dcloud.io.uniplugin_richalert.TestComponent"  
                }  
            ]  
        }  
    }  
    ...  
    ...  

<u>在uniapp项目的manifest.json文件中添加配置好的插件</u>,这一步也很重要。

至此引入完成

继续阅读 »

参考博客uniapp Android 原生插件开发(Module 扩展为例·2022)

首先在这里贴上官方文档- uni原生语言插件开发教程,有官方文档了,还要写这篇文章是因为我在根据文档开发插件的过程中,还是碰到了很多问题,在Google,查阅官方论坛之后还是没有解决,最后自己摸索解决了,所以在这里记录一下。

前言

本篇文章重在介绍开发完插件后测试部署的过程,Android Studio的使用不做介绍

准备

根据官方文档下载并导入UniPlugin-Hello-AS工程到Android Studio

插件开发

在官方提供的项目中新建library的Module,复制uniplugin_module模块的build.gradle配置到新建module的build.gradle,可根据实际情况修改compileSdkVersion和targetSdkVersion。接下来创建Module类,写扩展方法。这一步骤官方文档写的也很详细。

插件调试

对于需求明确,有一定专业知识的开发者来说,开发一个插件并不难。关键是要调试,这里官方文档写的就不是很详细了。

首先说明一点:做好的插件最终是要放在uniapp项目中的。其实开发好的插件不经过调试直接放在uniapp也可以,但是谁也不能保证一次就能把插件写的很完美,而每一次修改插件放在uniapp后都需要重新打包自定义插件。而打包自定义插件可能是一个痛苦的过程--可能需要等待的时间很长,打包次数也有限制

所以要在UniPlugin-Hello-AS工程下进行调试,这个工程相当于App离线打包,只是官方配置号了一个必要的环境

离线打包调试

离线打包调试的必要条件是要有Appkey,而申请AppKey需要有Android 签名文件,如果没有可以自己百度搜索创建Android 签名文件或者在Dcloud开发者后台创建签名文件,可参考官方文档申请Appkey

在Android Studio中修改配置文件

有了AppKey之后,修改UniPlugin-Hello-AS工程app模块的配置文件

  1. 修改namespace和applicationId为自己的包名-要和开发者后台中的一致
  2. 修改签名文件配置(signingConfigs),其中keyAlias、keyPassword、storeFile都要使用自己申请AppKey时使用的签名文件信息
  3. 修改清单文件(AndroidManifest)里的dcloud_appkey的value--就是申请的之前申请的AppKey
  4. 在assets资源目录下的dcloud_uniplugins.json配置文件增加自己的插件配置,参考官方文档其中name属性要记住,之后用得到
  5. 再修改assets/data/dcloud_control.xml中的appid的值,是自己的uniapp应用对应的AppID

至此UniPlugin-Hello-AS工程app模块的配置文件修改完成

引入插件

通过使用uni.requireNativePlugin获取插件对象。

const pluginImpl = uni.requireNativePlugin('插件 name')//这里的插件name就是刚才在dcloud_uniplugins.json文件里配置的插件的name

生成本地App打包资源

在自己的uniapp项目里选择 发行--->APP-本地打包--->生成本地打包App资源 等待资源生成

等待资源生成后复制生成的资源,要复制www文件夹上一层的文件夹,即__UNI__878995A这个格式的文件夹,复制这个文件夹到UniPlugin-Hello-AS工程app模块的assets\apps目录下

至此测试准别工作完成,可以在Android Studio里运行UniPlugin-Hello-AS项目进行测试了,测试没问题后就可以生成uniapp插件了

生成uniapp插件

网上的文档都是选择Android Studio的可视化编译命令进行生成aar文件的,好多同学说找不到assembleRelease,也有同学给出了处理方案,这其实就是一个命令,完全可以自己执行命令,如下图,其中uniapp-ext是自己编写插件是新建的module名称
![1736406487791](D:\WeChatFiles\WeChat Files\k330756854\FileStorage\Temp\1736406487791.jpg)

构建成功之后就可以在build/outputs/arr目录下找到编译好的插件

引入插件到uniapp项目

创建目录:在uniapp项目中创建nativeplugins目录(如有可忽略这一步),然后准备相关文件,官方示例如下

|-- DCloud-RichAlert --->插件id命名的文件夹(个人认为这里是一插件库id命名的文件夹,就是这个插件库里可以有很多个插件,这些很多个插件公用这个插件库id)  
   |-- android       --->安卓插件目录  
      |--libs  
         - xxx.jar    --->依赖的jar  
         - libxxx.so  --->依赖的so文件  
      - vendor.aar   --->依赖的aar  
      - unipluginRichAlert.aar --->插件module的aar  

创建package.json文件并填写必要的信息。放入到android目录下,这里对package.json做一下说明,因为我在这个文件上吃了大坑。package.json里有一些可选配置,如果在编写插件时使用了,就一定要加上,否则也有可能提示当前运行的基座不包含原生插件的提示,比如dependenciespermissionsuseAndroidX,因为我的插件使用了这些配置,可能导致生成自定义基座时,其实插件是没有生成成功的,最后导致使用requireNativePlugin的时候一致提示当前运行的基座不包含原生插件<u>所以你的插件使用的一些额外的配置一定要在package.json里都配置上</u>

{  
    "name": "插件名称",  
    "id": "DCloud-RichAlert", // 插件库标识(这里一定要和上面创建的文件夹名称一致,即插件库的id)  
    "version": "插件版本号",  
    "description": "插件描述信息",  
    "_dp_type":"nativeplugin",  
    "_dp_nativeplugin":{  
        "android": {  
            "plugins": [  
                {  
                    "type": "module",  
                    //这个name就是dcloud_uniplugins.json文件里配置的插件的name,也是使用requireNativePlugin时的参数  
                    "name": "DCloud-RichAlert_TestModule", //id为前缀 这里的name也可以和插件库标识一致,也可以一插件库标识为前缀  
                    "class": "uni.dcloud.io.uniplugin_richalert.TestModule"  
                },  
                {  
                    "type": "component",  
                    "name": "DCloud-RichAlert_TestComponent",  
                    "class": "uni.dcloud.io.uniplugin_richalert.TestComponent"  
                }  
            ]  
        }  
    }  
    ...  
    ...  

<u>在uniapp项目的manifest.json文件中添加配置好的插件</u>,这一步也很重要。

至此引入完成

收起阅读 »

上传音频文件等文件时,遇到类型错误

当你上传的文件名字中包含.时会造成上传失败,显示类型错误。比如你上传一个音频文件“1.2章录音.m4a”,不是因为m4a不对,而是因为1.2章录音这个文件名中包含了句号
.

当你上传的文件名字中包含.时会造成上传失败,显示类型错误。比如你上传一个音频文件“1.2章录音.m4a”,不是因为m4a不对,而是因为1.2章录音这个文件名中包含了句号
.