HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

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章录音这个文件名中包含了句号
.

项目启动后没有报错,任何平台都是空白页

main.js 文件最后不能写注释!!!
不然就会出现空白页!

像第一张图,最后一行是注释,把最后一行注释删掉,或者换个地方就可以了。

官网文档里关于main.js部分,也没有对此的提醒,真无奈啊~

main.js 文件最后不能写注释!!!
不然就会出现空白页!

像第一张图,最后一行是注释,把最后一行注释删掉,或者换个地方就可以了。

官网文档里关于main.js部分,也没有对此的提醒,真无奈啊~

关于uni.showModal(OBJECT)建议

弹窗提示

需求:统一确认取消按钮位置
当前问题:在微信、H5、App-iOS中,确认按钮默认在右边,而Android默认在左边,官方的建议是把按钮文字进行替换,即“确定”按钮的文字其实可以设置为“取消”

经过测试,这套方案行不通,因为点击原始取消按钮和返回键返回结果是一样的,无法区分,如果强行替换按钮文字,导致的结果就是,返回按钮会导致触发确认按钮的事件,希望官方能多给出一个参数,能够区分App按钮点击和返回键

另外还做过测试,plus.key.addEventListener()和onBackPress()在弹窗过程中无效,所以也不能用他们来控制返回键的默认事件

继续阅读 »

需求:统一确认取消按钮位置
当前问题:在微信、H5、App-iOS中,确认按钮默认在右边,而Android默认在左边,官方的建议是把按钮文字进行替换,即“确定”按钮的文字其实可以设置为“取消”

经过测试,这套方案行不通,因为点击原始取消按钮和返回键返回结果是一样的,无法区分,如果强行替换按钮文字,导致的结果就是,返回按钮会导致触发确认按钮的事件,希望官方能多给出一个参数,能够区分App按钮点击和返回键

另外还做过测试,plus.key.addEventListener()和onBackPress()在弹窗过程中无效,所以也不能用他们来控制返回键的默认事件

收起阅读 »

【Linux HBuilderX Cli 测试版】,欢迎大家测试反馈。

Linux HBuilderX CLI linux

说明


Linux HBuilderX Cli 已完成开发,欢迎大家试用反馈。

这个cli的用途是让开发者可以在linux服务器上调用HBuilderX cli,来实现程序化操作打包app、上传unicloud云函数。

为持续集成、自动化发布、类saas业务的自动化给客户部署等业务提供支持。

请注意是cli程序,不是HBuilderX可视化编辑器。仅适用于Linux命令行调用。

目前我们仅在Ubuntu 24.04.1 LTS系统上进行了测试,并没有在其它Linux发行版上测试,如有问题,请在本帖反馈

下载地址


Linux HBuilderX cli 4.55-正式版 下载地址
Linux HBuilderX cli 4.54-Alpha版 下载地址
Linux HBuilderX cli 4.57-Alpha版 下载地址

备注:

  1. 4.53-alpha版,压缩包中缺少amazon-corretto。amazon-corretto下载地址

常见使用命令


1. 安装包下载解压

wget -c https://download1.dcloud.net.cn/download/HBuilderX.4.51.2025010802-dev.linux_x64.full.tar.gz  
tar -zxvf HBuilderX.4.51.2025010802-dev.linux_x64.full.tar.gz

2. 使用cli启动HBuilderX程序

cd HBuilderX目录  
./cli open 

启动后,可使用ps -ef | grep HBuilderX查看HBuilderX是否启动。

3. app打包操作命令

# HBuilderX登录。注意app打包必须登录。原因:国家相关部门要求  
cli user login --username <用户名>  --password <密码>  

# 导入要打包的项目  
cli project open --path <项目路径>  

# android ios打包。文档:https://hx.dcloud.net.cn/cli/pack  
cli pack --config 配置文件

完整的cli文档见:https://hx.dcloud.net.cn/cli/README

报Bug

如果大家遇到问题,请大家到https://issues.dcloud.net.cn/pages/issues/report-req?mid=pluginsCLI.linux报Bug。提交问题,请包含以下内容:

  1. 操作系统信息
  2. 详细的命令示例、截图
继续阅读 »

说明


Linux HBuilderX Cli 已完成开发,欢迎大家试用反馈。

这个cli的用途是让开发者可以在linux服务器上调用HBuilderX cli,来实现程序化操作打包app、上传unicloud云函数。

为持续集成、自动化发布、类saas业务的自动化给客户部署等业务提供支持。

请注意是cli程序,不是HBuilderX可视化编辑器。仅适用于Linux命令行调用。

目前我们仅在Ubuntu 24.04.1 LTS系统上进行了测试,并没有在其它Linux发行版上测试,如有问题,请在本帖反馈

下载地址


Linux HBuilderX cli 4.55-正式版 下载地址
Linux HBuilderX cli 4.54-Alpha版 下载地址
Linux HBuilderX cli 4.57-Alpha版 下载地址

备注:

  1. 4.53-alpha版,压缩包中缺少amazon-corretto。amazon-corretto下载地址

常见使用命令


1. 安装包下载解压

wget -c https://download1.dcloud.net.cn/download/HBuilderX.4.51.2025010802-dev.linux_x64.full.tar.gz  
tar -zxvf HBuilderX.4.51.2025010802-dev.linux_x64.full.tar.gz

2. 使用cli启动HBuilderX程序

cd HBuilderX目录  
./cli open 

启动后,可使用ps -ef | grep HBuilderX查看HBuilderX是否启动。

3. app打包操作命令

# HBuilderX登录。注意app打包必须登录。原因:国家相关部门要求  
cli user login --username <用户名>  --password <密码>  

# 导入要打包的项目  
cli project open --path <项目路径>  

# android ios打包。文档:https://hx.dcloud.net.cn/cli/pack  
cli pack --config 配置文件

完整的cli文档见:https://hx.dcloud.net.cn/cli/README

报Bug

如果大家遇到问题,请大家到https://issues.dcloud.net.cn/pages/issues/report-req?mid=pluginsCLI.linux报Bug。提交问题,请包含以下内容:

  1. 操作系统信息
  2. 详细的命令示例、截图
收起阅读 »

一套代码打包两个APP,证书APPid,包名都换了但是还是报错

一套代码打包两个APP,证书APPid,包名都换了但是还是报错Can't install because provider name uni.UNIBE1CDD0 (in package com.hn.xx) is already used by com.xx.xx]

继续阅读 »

一套代码打包两个APP,证书APPid,包名都换了但是还是报错Can't install because provider name uni.UNIBE1CDD0 (in package com.hn.xx) is already used by com.xx.xx]

收起阅读 »

【Mac Arm芯片 - HBuilderX 测试版】适配M1、M2...., 欢迎大家测试

mac arm芯片 Apple芯片 HBuilderX

HBuilderX Mac arm芯片(M1、M2....)安装包来了,适配Arm芯片,启动速度更快。欢迎大家测试。

注意:下列包不支持intel芯片,intel芯片的苹果电脑不要安装。

4.51-alpha下载地址: https://www.dcloud.io/hbuilderx.html

继续阅读 »

HBuilderX Mac arm芯片(M1、M2....)安装包来了,适配Arm芯片,启动速度更快。欢迎大家测试。

注意:下列包不支持intel芯片,intel芯片的苹果电脑不要安装。

4.51-alpha下载地址: https://www.dcloud.io/hbuilderx.html

收起阅读 »

movable-area 在 app中页面超过一屏,movable-view 会跟随滚动问题

height设为 100vh 而不能设为 100%

<movable-area style="width: 100%; height: 100vh;">  
  <movable-view class="home-movable-view" :x="movableInfo.x" :y="movableInfo.y" direction="all">  
   </movable-view>  
   <!-- swiper -->  
   <view style="width: 100%; height: 100%; overflow-y: scroll;">  
  </view>  
</movable-area>
继续阅读 »

height设为 100vh 而不能设为 100%

<movable-area style="width: 100%; height: 100vh;">  
  <movable-view class="home-movable-view" :x="movableInfo.x" :y="movableInfo.y" direction="all">  
   </movable-view>  
   <!-- swiper -->  
   <view style="width: 100%; height: 100%; overflow-y: scroll;">  
  </view>  
</movable-area>
收起阅读 »

【广告联盟】我有个想法,可以开发一种推送广告,在用户使用或者离线时候推送一下

广告联盟

uniad充斥着关不掉和诈骗广告可恶至极。

但是也有好的一面,我偶尔会看到uniad大商家比如京东淘宝等等把,这些促销广告和薅羊毛广告确实赚了很多小便宜省了不少钱,而且买到很多不错东西,而且也让人喜欢上广告和只要不是诈骗和忽悠人或模棱两可广告,应该效果很好。

我有个想法,要是能把推送和广告整合在一起,主要推送正规大商家一些促销商品和活动,应该会很不错。
既增加了开发者收入,也让用户不错过促销信息,又增加APP唤醒率,感觉是一石三鸟。

继续阅读 »

uniad充斥着关不掉和诈骗广告可恶至极。

但是也有好的一面,我偶尔会看到uniad大商家比如京东淘宝等等把,这些促销广告和薅羊毛广告确实赚了很多小便宜省了不少钱,而且买到很多不错东西,而且也让人喜欢上广告和只要不是诈骗和忽悠人或模棱两可广告,应该效果很好。

我有个想法,要是能把推送和广告整合在一起,主要推送正规大商家一些促销商品和活动,应该会很不错。
既增加了开发者收入,也让用户不错过促销信息,又增加APP唤醒率,感觉是一石三鸟。

收起阅读 »

突然看到隔壁taro发展也好快

taro

世界变化真是快啊,一转眼uniapp的对手如云了

世界变化真是快啊,一转眼uniapp的对手如云了

ios 内购

ipad os 18.2 的时候会触发requestOrder 请求商品回调成功、失败都不触发 、测试了很多iphone、8、13、14、ios版本在14~15.几的版本是可以成功的、并且支付流程是可以走完的、我们在ipad os 18.2上去下载其它软件也是无法购买商品、所以是怀疑是系统的问题、有没有遇到同样情况的呀????求答复

继续阅读 »

ipad os 18.2 的时候会触发requestOrder 请求商品回调成功、失败都不触发 、测试了很多iphone、8、13、14、ios版本在14~15.几的版本是可以成功的、并且支付流程是可以走完的、我们在ipad os 18.2上去下载其它软件也是无法购买商品、所以是怀疑是系统的问题、有没有遇到同样情况的呀????求答复

收起阅读 »

app热更新失败:安装wgt文件失败[-1205]:WGT安装包中manifest.json文件的version版本不匹配

wgt升级

增加节流,一般是因为触发连续多次安装导致的

增加节流,一般是因为触发连续多次安装导致的