
发布鸿蒙元服务,领取现金奖励
> 如果你是服务商、外包商,承诺上架25个元服务,欢迎点此联系我们,我们可提供单独技术支持,以及可帮助协调免费的鸿蒙测试机。
为了丰富鸿蒙生态,为国产操作系统生态做贡献,DCloud联合华为推出开发者激励计划,uni-app开发者只需将 uni-app 项目发行为鸿蒙元服务,即可获得现金激励,欢迎各位开发者积极提交。
激励规则
根据应用是否在华为应用市场,或者其他手机终端厂商(仅指荣耀、小米、OPPO、vivo、Apple)应用市场、小程序平台(微信、支付宝、抖音、小红书)面向中国境内(不含中国香港、中国澳门、中国台湾)上架发布,将应用分为以下两类:
- 成熟应用:在2024年9月30日前(含当日)在上述应用分发平台为在架状态;
- 新应用:新开发的应用,在2024年9月30日前(含当日)未在上述应用分发平台上架;
说明:
- 成熟应用的名称需要与此前在上述应用分发平台上架的应用名称一样。
- 按照华为的政策,应用市场仅包含如上华为、荣耀、小米、OPPO、vivo、Apple几家应用市场,不含应用宝、360等三方应用商店;
- 小程序平台仅含微信、支付宝、抖音、小红书四家,不含百度、京东等;
成熟应用
评选规则:
- 2024年12月31日之前,完成元服务上架评审并正式上架;
奖励规则:
- 满足如上评选条件,即可获得600元现金奖励,以及价值6000元的流量扶持赠送金;
新应用
评选规则:
- 2024年12月31日之前,完成元服务上架评审并正式上架;
- 应用完成上架后次日起7日累计活跃设备数达到100;因为华为的评审截止日为12月31日,故建议在2024年12月23日之前完成上架;
奖励规则:
- 同时满足如上两个评选条件,即可获得600元现金奖励,以及价值6000元的流量扶持赠送金;
参与细则
1、开发者需将DCloud绑定为鸿蒙商店服务商,并在线签订激励分享承诺函,详见元服务发行与上架
2、激励发放前,DCloud及华为有权再次核实计划申请人资格和相关信息。开发者需保证提交信息真实有效,若存在欺诈或不当行为(如恶意刷量、提供虚假APP备案证明等作弊行为、侵犯他人知识产权,或者存在任何违法违规或违反本计划协议的行为),DCloud有权追回已发放激励等权益,取消参与本计划资格,并追究其法律责任;
3、开发者应确保提供其真实有效的收款账号信息,若其自身原因(包括但不限于账号注销、被冻结、无法收款等)导致激励发放失败,由此引发的后果和损失由开发者自行承担;
4、现金激励为含税金额;
5、为了确保活动的公平性和正向激励导向,DCloud在法律允许范围内可优化本计划规则,请您以最新发布的规则为准。
6、如您对本计划的规则有任何疑问,请通过uni-im与我们联系。
> 如果你是服务商、外包商,承诺上架25个元服务,欢迎点此联系我们,我们可提供单独技术支持,以及可帮助协调免费的鸿蒙测试机。
为了丰富鸿蒙生态,为国产操作系统生态做贡献,DCloud联合华为推出开发者激励计划,uni-app开发者只需将 uni-app 项目发行为鸿蒙元服务,即可获得现金激励,欢迎各位开发者积极提交。
激励规则
根据应用是否在华为应用市场,或者其他手机终端厂商(仅指荣耀、小米、OPPO、vivo、Apple)应用市场、小程序平台(微信、支付宝、抖音、小红书)面向中国境内(不含中国香港、中国澳门、中国台湾)上架发布,将应用分为以下两类:
- 成熟应用:在2024年9月30日前(含当日)在上述应用分发平台为在架状态;
- 新应用:新开发的应用,在2024年9月30日前(含当日)未在上述应用分发平台上架;
说明:
- 成熟应用的名称需要与此前在上述应用分发平台上架的应用名称一样。
- 按照华为的政策,应用市场仅包含如上华为、荣耀、小米、OPPO、vivo、Apple几家应用市场,不含应用宝、360等三方应用商店;
- 小程序平台仅含微信、支付宝、抖音、小红书四家,不含百度、京东等;
成熟应用
评选规则:
- 2024年12月31日之前,完成元服务上架评审并正式上架;
奖励规则:
- 满足如上评选条件,即可获得600元现金奖励,以及价值6000元的流量扶持赠送金;
新应用
评选规则:
- 2024年12月31日之前,完成元服务上架评审并正式上架;
- 应用完成上架后次日起7日累计活跃设备数达到100;因为华为的评审截止日为12月31日,故建议在2024年12月23日之前完成上架;
奖励规则:
- 同时满足如上两个评选条件,即可获得600元现金奖励,以及价值6000元的流量扶持赠送金;
参与细则
1、开发者需将DCloud绑定为鸿蒙商店服务商,并在线签订激励分享承诺函,详见元服务发行与上架
2、激励发放前,DCloud及华为有权再次核实计划申请人资格和相关信息。开发者需保证提交信息真实有效,若存在欺诈或不当行为(如恶意刷量、提供虚假APP备案证明等作弊行为、侵犯他人知识产权,或者存在任何违法违规或违反本计划协议的行为),DCloud有权追回已发放激励等权益,取消参与本计划资格,并追究其法律责任;
3、开发者应确保提供其真实有效的收款账号信息,若其自身原因(包括但不限于账号注销、被冻结、无法收款等)导致激励发放失败,由此引发的后果和损失由开发者自行承担;
4、现金激励为含税金额;
5、为了确保活动的公平性和正向激励导向,DCloud在法律允许范围内可优化本计划规则,请您以最新发布的规则为准。
6、如您对本计划的规则有任何疑问,请通过uni-im与我们联系。

项目运行到鸿蒙手机,应用图标一直是H,应用名一直是HBuilder问题
项目运行到鸿蒙手机,应用图标一直是H,应用名一直是HBuilder问题
应用运行到鸿蒙手机和鸿蒙模拟器,应用图标一直是H,应用名一直是HBuilder,在自动生成的harmony-configs文件夹下也没有配置的文件,
- 这时候需要你将DevEco Studio 下生成的resource 文件复制一份,放在相应的文件夹下。
- 修改根据module.json5文件中的"icon": "$media:layered_image",
"label": "$string:EntryAbility_label",
"startWindowIcon": "$media:startIcon",修改对应文件夹下的字符串或者图片资源。 - 重新运行到鸿蒙设备。如果运行到手机上的应用图标还是H,名字还是HBuilder。这是因为有缓存的问题。
- 找到unpackage 文件夹删除里面的debug文件夹(编译时候自动生成的)。打包鸿蒙app的时候遇到上面情况,删掉release文件夹重新运行。
就可以解决以上问题。
项目运行到鸿蒙手机,应用图标一直是H,应用名一直是HBuilder问题
应用运行到鸿蒙手机和鸿蒙模拟器,应用图标一直是H,应用名一直是HBuilder,在自动生成的harmony-configs文件夹下也没有配置的文件,
- 这时候需要你将DevEco Studio 下生成的resource 文件复制一份,放在相应的文件夹下。
- 修改根据module.json5文件中的"icon": "$media:layered_image",
"label": "$string:EntryAbility_label",
"startWindowIcon": "$media:startIcon",修改对应文件夹下的字符串或者图片资源。 - 重新运行到鸿蒙设备。如果运行到手机上的应用图标还是H,名字还是HBuilder。这是因为有缓存的问题。
- 找到unpackage 文件夹删除里面的debug文件夹(编译时候自动生成的)。打包鸿蒙app的时候遇到上面情况,删掉release文件夹重新运行。
就可以解决以上问题。
收起阅读 »
uniapp 微信自动播放背景音乐插件
现在不管是 audio 还是 video(带音频) 都没办法做自动播放,受到浏览器阻止自动播放策略的约束;
还好微信内置浏览器拥有一些特殊api,可以实现自动播放。闲话少说直接看效果,微信扫一扫下面的二维码查看
其实 iOS 实现起来比较简单,只需要监听 WeixinJSBridgeReady
或者 weixin. ready
就可以正常播放 audio 元素的音频;
Android 实现起来相对麻烦一点,需要借助 soundjs 库来完成。这里我参考借鉴 superzdd 大佬的实验 wechat-h5-backgound-music-survey,有兴趣的可以去了解一下~
这里面比较麻烦的一个事情是。。。。 iOS方案和Android方案相互是不兼容的!
所以我把他封装成了一个 jssdk 插件,可以快速使用并且完美兼容微信 Android
和 iOS
以及一般手机浏览器 (触摸)
好省去一些时间浪费在做兼容这件事上,有兴趣的欢迎前来使用~ 并且项目长期维护, 有问题可以直接提交问题
现在不管是 audio 还是 video(带音频) 都没办法做自动播放,受到浏览器阻止自动播放策略的约束;
还好微信内置浏览器拥有一些特殊api,可以实现自动播放。闲话少说直接看效果,微信扫一扫下面的二维码查看
其实 iOS 实现起来比较简单,只需要监听 WeixinJSBridgeReady
或者 weixin. ready
就可以正常播放 audio 元素的音频;
Android 实现起来相对麻烦一点,需要借助 soundjs 库来完成。这里我参考借鉴 superzdd 大佬的实验 wechat-h5-backgound-music-survey,有兴趣的可以去了解一下~
这里面比较麻烦的一个事情是。。。。 iOS方案和Android方案相互是不兼容的!
所以我把他封装成了一个 jssdk 插件,可以快速使用并且完美兼容微信 Android
和 iOS
以及一般手机浏览器 (触摸)
好省去一些时间浪费在做兼容这件事上,有兴趣的欢迎前来使用~ 并且项目长期维护, 有问题可以直接提交问题
插件地址:https://ext.dcloud.net.cn/plugin?id=20174
收起阅读 »
quill-delta-converter 公共模块不存在,请在 uniCloud/database 目录右击“配置schema扩展公共模块“添加 quill-delta-converter 模块
问题描述1
在uni-admin项目中,导入uni-cms运行,通常就会出现如下报错,quill-delta-converter 公共模块不存在,请在 uniCloud/database 目录右击"配置schema扩展公共模块"添加 quill-delta-converter 模块。
解决办法1
只需要按照上面的方法,在uniCloud目录下找到database目录,右击添加 quill-delta-converter 模块即可解决
可以看一下database目录下面创建了一个新文件package.json,代码如下所示,就说明已经关联好了,可以简单看一下即可
{
"name": "database",
"dependencies": {
"quill-delta-converter": "file:../../uni_modules/uni-cms/uniCloud/cloudfunctions/common/quill-delta-converter"
},
"extensions": {}
}
通常来讲,这样操作完成之后,再刷新项目,之前的报错将不会存在,保险起见,可以重新启动一下项目,即可解决第一个问题。
问题描述2
在“本地云函数”调试uniadmin以及uni-cms,完全正常,没有问题,上线之前,将cloudfunction以及database全部上传到云端,然后在本地“连接云端云函数”,发现上面的问题再次出现,用户端项目使用的是uni-cms-article,也报同样的错误,明明我们已经安装第一种方法配置schema扩展公共模块quill-delta-converter,那为什么还报错那?
解决办法2
上传到云端,不单单是将cloudfunctions和database全部上传,如果你在database关联了公共模块或者扩展库,那么就需要“上传Schema扩展Js的配置”,这个很关键,这个过程其实相当于你的npm i安装一样,只有配置项,没有安装依赖,那云端肯定是不行的。
总结
我做项目出现这个问题的时候,花了好久的时间才看报错知道的这个问题,在这里记录一下,如果你也遇到了这个问题,帮你解决了,请给点赞支持一下哦,我是咸虾米_感谢大家。
问题描述1
在uni-admin项目中,导入uni-cms运行,通常就会出现如下报错,quill-delta-converter 公共模块不存在,请在 uniCloud/database 目录右击"配置schema扩展公共模块"添加 quill-delta-converter 模块。
解决办法1
只需要按照上面的方法,在uniCloud目录下找到database目录,右击添加 quill-delta-converter 模块即可解决
可以看一下database目录下面创建了一个新文件package.json,代码如下所示,就说明已经关联好了,可以简单看一下即可
{
"name": "database",
"dependencies": {
"quill-delta-converter": "file:../../uni_modules/uni-cms/uniCloud/cloudfunctions/common/quill-delta-converter"
},
"extensions": {}
}
通常来讲,这样操作完成之后,再刷新项目,之前的报错将不会存在,保险起见,可以重新启动一下项目,即可解决第一个问题。
问题描述2
在“本地云函数”调试uniadmin以及uni-cms,完全正常,没有问题,上线之前,将cloudfunction以及database全部上传到云端,然后在本地“连接云端云函数”,发现上面的问题再次出现,用户端项目使用的是uni-cms-article,也报同样的错误,明明我们已经安装第一种方法配置schema扩展公共模块quill-delta-converter,那为什么还报错那?
解决办法2
上传到云端,不单单是将cloudfunctions和database全部上传,如果你在database关联了公共模块或者扩展库,那么就需要“上传Schema扩展Js的配置”,这个很关键,这个过程其实相当于你的npm i安装一样,只有配置项,没有安装依赖,那云端肯定是不行的。
总结
我做项目出现这个问题的时候,花了好久的时间才看报错知道的这个问题,在这里记录一下,如果你也遇到了这个问题,帮你解决了,请给点赞支持一下哦,我是咸虾米_感谢大家。
收起阅读 »
个人接单,经验丰富,页面 小程序 APP开发均可
工作之余,想整点外快 找合作开发也可 --联系方式vx:Y1910710026
工作之余,想整点外快 找合作开发也可 --联系方式vx:Y1910710026

nativejs android获取wifi强度及状态
const Context = plus.android.importClass("android.content.Context");
const WifiManager = plus.android.importClass("android.net.wifi.WifiManager");
const wifiManager = plus.android.runtimeMainActivity().getSystemService(Context.WIFI_SERVICE);
const WifiInfo = plus.android.importClass("android.net.wifi.WifiInfo");
const isWifiEnabled = wifiManager.isWifiEnabled();
if (!isWifiEnabled) {
// 未开启wifi
// ....
return;
}
const connectionInfo = wifiManager.getConnectionInfo();
const ipAddress = connectionInfo.getIpAddress();
if (!ipAddress) {
// WiFi未连接
// ....
return;
}
// wifi已连接
const rssi = connectionInfo.getRssi();
// 0格 rssi<=-100
// 1格 (-100, -88]
// 2格 (-88, -77]
// 3格 (-77, -55]
// 4格 rssi>=-55
const Context = plus.android.importClass("android.content.Context");
const WifiManager = plus.android.importClass("android.net.wifi.WifiManager");
const wifiManager = plus.android.runtimeMainActivity().getSystemService(Context.WIFI_SERVICE);
const WifiInfo = plus.android.importClass("android.net.wifi.WifiInfo");
const isWifiEnabled = wifiManager.isWifiEnabled();
if (!isWifiEnabled) {
// 未开启wifi
// ....
return;
}
const connectionInfo = wifiManager.getConnectionInfo();
const ipAddress = connectionInfo.getIpAddress();
if (!ipAddress) {
// WiFi未连接
// ....
return;
}
// wifi已连接
const rssi = connectionInfo.getRssi();
// 0格 rssi<=-100
// 1格 (-100, -88]
// 2格 (-88, -77]
// 3格 (-77, -55]
// 4格 rssi>=-55
收起阅读 »

Uniappx 离线打包配置
Uniapp-x的离线打包
准备(我的配置)
-
HBuilder X (4.29版本及以上)
-
uniapp x SDK (4.29),是uniapp x的SDK,不要跟uniapp的搞混了,下载地址Uniapp x SDK
-
android studio (2023/2024都行)
其它:gradle版本为8.7。gradle插件版本为8.6.0。kotlin插件版本为1.9.0
1. 新建一个Android空项目
打开 android studio,点击顶部的 New Project –> Phone And Tablet –> No Activity,如下图:出现下面的界面
- Name 是你的项目名称
- Package name是你的包名
- Language 要选择 Kotlin
- Min Sdk 建议21
点击Finsh,这是空项目模板
我这里是gradle构建之后的目录,后面的都是基于构建完成的
- 一般称app为主模块,它下面的 build.gradle.kts 是主模块的编译配置文件,也是项目级别的编译配置文件,一定要跟其它的区分开来
下面的步骤就是跟官网一致了!
2. 新建uni-app x模块
点击File->New->New Module...
点击左侧Templates
的Android Library
。
Language
选择Kotlin
。
Module name
建议设置为uniappx
。
点击Finish
。
构建之后会多出一个uniappx目录
基础库配置
- 在uni-app x模块下新建目录
libs
,跟src
同级别 ,将uts-runtime-release.aar,android-gif-drawable-1.2.28.aar,app-common-release.aar,app-runtime-release.aar,breakpad-build-release.aar,dcloud-layout-release.aar, framework-release.aar,uni-exit-release.aar,uni-getAccessibilityInfo-release.aar,uni-getAppAuthorizeSetting-release.aar,uni-getAppBaseInfo-release.aar, uni-getSystemSetting-release.aar,uni-openAppAuthorizeSetting-release.aar,uni-prompt-release.aar,uni-storage-release.aar,uni-getDeviceInfo-release.aar, uni-getSystemInfo-release.aar,uni-rpx2px-release.aar,uni-theme-release.aar共19个aar拷贝到libs下,参考下图
修改uniappx模块下的build.gradle
- 添加依赖
将下面的依赖信息添加到build.gradle中
dependencies {
···
implementation fileTree(include: ['*.aar'], dir: './libs')
implementation "androidx.core:core-ktx:1.10.1"
implementation "androidx.recyclerview:recyclerview:1.3.2"
implementation "androidx.appcompat:appcompat:1.0.0"
implementation "androidx.exifinterface:exifinterface:1.3.6"
implementation "androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar"
implementation "androidx.constraintlayout:constraintlayout:2.1.4"
implementation "androidx.webkit:webkit:1.6.0"
implementation "com.google.android.material:material:1.4.0"
implementation "androidx.viewpager2:viewpager2:1.1.0-beta02"
implementation "com.alibaba:fastjson:1.2.83"
implementation "com.facebook.fresco:fresco:3.1.3"
implementation "com.facebook.fresco:middleware:3.1.3"
implementation "com.facebook.fresco:animated-gif:3.1.3"
implementation "com.facebook.fresco:webpsupport:3.1.3"
implementation "com.facebook.fresco:animated-webp:3.1.3"
implementation "com.github.bumptech.glide:glide:4.9.0"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4"
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.8.10"
implementation "org.jetbrains.kotlin:kotlin-reflect:1.8.10"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1"
implementation "com.squareup.okhttp3:okhttp:3.12.12"
implementation "com.github.getActivity:XXPermissions:18.63"
}
- 添加aaptOptions配置
将aaptOptions配置添加到android节点下
aaptOptions {
additionalParameters '--auto-add-overlay'
ignoreAssetsPattern '!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~'
}
- 修改app主模块的配置(不要漏掉了)
在build.gradle
的dependencies
节点添加下面两行
implementation(fileTree(mapOf("include" to listOf("*.aar"), "dir" to "../uniappx/libs")))
implementation(project(":uniappx"))
配置gradle插件
1.下载的SDK压缩包里面有一个plugins
文件,将它复制到你的项目根目录
2.在项目根目录的build.gradle的顶部添加gradle插件的依赖
buildscript {
dependencies {
classpath(files("plugins/uts-kotlin-compiler-plugin-0.0.1.jar"))
classpath(files("plugins/uts-kotlin-gradle-plugin-0.0.1.jar"))
}
}
- 然后在uniappx模块的build.gradle下添加插件io.dcloud.uts.kotlin的依赖
plugins {
...
id 'io.dcloud.uts.kotlin'
}
修改项目的settings.gradle
- 在项目根路径下的settings.gradle中添加jitpack的maven的仓库地址和本地gradle插件的路径配置
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
...
maven { url = uri("https://jitpack.io") }
flatDir { dirs('./plugins/') }
}
}
修改项目的gradle.properties
- 在项目根路径下的gradle.properties中追加如下内容
android.useAndroidX=true
android.enableJetifier=true
修改app主模块下的AndroidManifest.xml
- 添加activity,将下面内容拷贝到application节点下
完成的AndroidManifest.xml
如下
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:name="io.dcloud.uniapp.UniApplication"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Offlinenative"
tools:targetApi="31" >
<activity
android:name="io.dcloud.uniapp.UniAppActivity"
android:configChanges="orientation|keyboard|keyboardHidden|smallestScreenSize|screenLayout|screenSize|mcc|mnc|fontScale|navigation|uiMode"
android:exported="true"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/UniAppX.Activity.DefaultTheme"
android:windowSoftInputMode="adjustResize"
tools:replace="android:label,android:exported,android:theme,android:configChanges,android:windowSoftInputMode,android:screenOrientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
修改uniappx模块下的AndroidManifest.xml
- 添加appid,在application节点下添加
DCLOUD_UNI_APPID
节点
<application>
<meta-data
android:name="DCLOUD_UNI_APPID"
android:value="你的appid" />
</application>
拷贝资源文件
-
导出uni-app x项目的资源文件:选择项目,然后点击:发行 -> 原生App-本地打包 -> 生成本地打包App资源,导出成功之后会在项目的unpackage/resources目录下生成资源文件
-
将app-android目录下与appid对应的目录拷贝到uniappx的
assets/apps
目录下,需要自己先创建
- 拷贝kt文件:需要将
unkackage/resource/app-android/uniappx/app-android/src/
目录下的所有文件拷贝到项目的uniappx
模块下的src/main/java
下,src/main/java
下的包名文件夹可以删掉
如果你的项目没有uts插件,到这一步已经可以使用As运行啦
配置uts插件
资源导出成功之后,uts插件资源位于unpackage/resource/app-android/uni_modules下
为方便区分,uts插件指前端封装的uni_modules插件;android uts插件指根据编译后的uts插件生成的安卓原生模块
新建android uts插件模块,跟新建uniappx
一样,下面以插件wow-scankit
为例子,下面所有都是基于wow-scankit
的配置示例
-
点击左侧Templates的Android Library。
-
Language选择Kotlin。
-
Module name建议与uts插件模块名称一致。
-
点击Finish。
注意:
- Templates一定要选择Android Library。
- Language一定要选择Kotlin。
- Build configuration language建议选择Groovy DSL(build.gradle)。以下教程均按照此模式进行
添加gradle插件
- 在
`wow-scankit
插件模块的build.gradle的plugins节点下添加io.dcloud.uts.kotlin的依赖
plugins {
...
id 'io.dcloud.uts.kotlin'
}
- 添加依赖
将下面内容拷贝到build.gradle中,添加到原有的dependencies节点,不要删掉原有的
dependencies {
compileOnly fileTree(include: ['*.aar'], dir: '../uniappx/libs')
compileOnly fileTree(include: ['*.aar'], dir: './libs')
compileOnly "com.alibaba:fastjson:1.2.83"
compileOnly "androidx.core:core-ktx:1.10.1"
compileOnly 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8'
compileOnly 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8'
}
根据config.json配置应用
如果uts插件的config.json
有内容
下面是插件wow-scankit
的配置
minSdkVersion
在插件wow-scankit
的android节点的defaultConfig的minSdk设置此字段
{
"minSdkVersion": "21",
"dependencies": ["com.huawei.hms:scan:2.12.0.301"]
}
dependencies
在插件wow-scankit
的dependencies 添加 implementation 'com.huawei.hms:scan:2.12.0.301'
- 在项目的
settings.gradle.jks
文件需要添加仓库地址
完整的dependencyResolutionManagement
如下
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven {
url = uri("https://jitpack.io")
}
maven {
url = uri("https://developer.huawei.com/repo/")
}
flatDir {
dirs("./plugins/")
}
}
}
- 将插件添加到
uniappx
模块
implementation project(":wow-scankit")
复制资源(如果有就复制)
libs
将src目录下的所有文件拷贝到android uts插件模块/src/main/java目录下(wow-scankit
插件没有)
assets
将assets文件夹拷贝到wow-scankit
插件模块/src/main/
目录下
res
将res文件夹拷贝到wow-scankit
插件模块/src/main/
目录下。
AndroidManifest.xml
将AndroidManifest.xml
拷贝到wow-scankit
插件模块/src/main/
目录下
添加到主项目
将wow-scankit
插件模块的依赖添加到uniappx模块
的build.gradle的依赖中
implementation project(':wow-scankit')
配置完成后重新构建
如果前面步骤没有出错的话,到这里就已经完成了
Uniapp-x的离线打包
准备(我的配置)
-
HBuilder X (4.29版本及以上)
-
uniapp x SDK (4.29),是uniapp x的SDK,不要跟uniapp的搞混了,下载地址Uniapp x SDK
-
android studio (2023/2024都行)
其它:gradle版本为8.7。gradle插件版本为8.6.0。kotlin插件版本为1.9.0
1. 新建一个Android空项目
打开 android studio,点击顶部的 New Project –> Phone And Tablet –> No Activity,如下图:出现下面的界面
- Name 是你的项目名称
- Package name是你的包名
- Language 要选择 Kotlin
- Min Sdk 建议21
点击Finsh,这是空项目模板
我这里是gradle构建之后的目录,后面的都是基于构建完成的
- 一般称app为主模块,它下面的 build.gradle.kts 是主模块的编译配置文件,也是项目级别的编译配置文件,一定要跟其它的区分开来
下面的步骤就是跟官网一致了!
2. 新建uni-app x模块
点击File->New->New Module...
点击左侧Templates
的Android Library
。
Language
选择Kotlin
。
Module name
建议设置为uniappx
。
点击Finish
。
构建之后会多出一个uniappx目录
基础库配置
- 在uni-app x模块下新建目录
libs
,跟src
同级别 ,将uts-runtime-release.aar,android-gif-drawable-1.2.28.aar,app-common-release.aar,app-runtime-release.aar,breakpad-build-release.aar,dcloud-layout-release.aar, framework-release.aar,uni-exit-release.aar,uni-getAccessibilityInfo-release.aar,uni-getAppAuthorizeSetting-release.aar,uni-getAppBaseInfo-release.aar, uni-getSystemSetting-release.aar,uni-openAppAuthorizeSetting-release.aar,uni-prompt-release.aar,uni-storage-release.aar,uni-getDeviceInfo-release.aar, uni-getSystemInfo-release.aar,uni-rpx2px-release.aar,uni-theme-release.aar共19个aar拷贝到libs下,参考下图
修改uniappx模块下的build.gradle
- 添加依赖
将下面的依赖信息添加到build.gradle中
dependencies {
···
implementation fileTree(include: ['*.aar'], dir: './libs')
implementation "androidx.core:core-ktx:1.10.1"
implementation "androidx.recyclerview:recyclerview:1.3.2"
implementation "androidx.appcompat:appcompat:1.0.0"
implementation "androidx.exifinterface:exifinterface:1.3.6"
implementation "androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar"
implementation "androidx.constraintlayout:constraintlayout:2.1.4"
implementation "androidx.webkit:webkit:1.6.0"
implementation "com.google.android.material:material:1.4.0"
implementation "androidx.viewpager2:viewpager2:1.1.0-beta02"
implementation "com.alibaba:fastjson:1.2.83"
implementation "com.facebook.fresco:fresco:3.1.3"
implementation "com.facebook.fresco:middleware:3.1.3"
implementation "com.facebook.fresco:animated-gif:3.1.3"
implementation "com.facebook.fresco:webpsupport:3.1.3"
implementation "com.facebook.fresco:animated-webp:3.1.3"
implementation "com.github.bumptech.glide:glide:4.9.0"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4"
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.8.10"
implementation "org.jetbrains.kotlin:kotlin-reflect:1.8.10"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1"
implementation "com.squareup.okhttp3:okhttp:3.12.12"
implementation "com.github.getActivity:XXPermissions:18.63"
}
- 添加aaptOptions配置
将aaptOptions配置添加到android节点下
aaptOptions {
additionalParameters '--auto-add-overlay'
ignoreAssetsPattern '!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~'
}
- 修改app主模块的配置(不要漏掉了)
在build.gradle
的dependencies
节点添加下面两行
implementation(fileTree(mapOf("include" to listOf("*.aar"), "dir" to "../uniappx/libs")))
implementation(project(":uniappx"))
配置gradle插件
1.下载的SDK压缩包里面有一个plugins
文件,将它复制到你的项目根目录
2.在项目根目录的build.gradle的顶部添加gradle插件的依赖
buildscript {
dependencies {
classpath(files("plugins/uts-kotlin-compiler-plugin-0.0.1.jar"))
classpath(files("plugins/uts-kotlin-gradle-plugin-0.0.1.jar"))
}
}
- 然后在uniappx模块的build.gradle下添加插件io.dcloud.uts.kotlin的依赖
plugins {
...
id 'io.dcloud.uts.kotlin'
}
修改项目的settings.gradle
- 在项目根路径下的settings.gradle中添加jitpack的maven的仓库地址和本地gradle插件的路径配置
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
...
maven { url = uri("https://jitpack.io") }
flatDir { dirs('./plugins/') }
}
}
修改项目的gradle.properties
- 在项目根路径下的gradle.properties中追加如下内容
android.useAndroidX=true
android.enableJetifier=true
修改app主模块下的AndroidManifest.xml
- 添加activity,将下面内容拷贝到application节点下
完成的AndroidManifest.xml
如下
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:name="io.dcloud.uniapp.UniApplication"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Offlinenative"
tools:targetApi="31" >
<activity
android:name="io.dcloud.uniapp.UniAppActivity"
android:configChanges="orientation|keyboard|keyboardHidden|smallestScreenSize|screenLayout|screenSize|mcc|mnc|fontScale|navigation|uiMode"
android:exported="true"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/UniAppX.Activity.DefaultTheme"
android:windowSoftInputMode="adjustResize"
tools:replace="android:label,android:exported,android:theme,android:configChanges,android:windowSoftInputMode,android:screenOrientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
修改uniappx模块下的AndroidManifest.xml
- 添加appid,在application节点下添加
DCLOUD_UNI_APPID
节点
<application>
<meta-data
android:name="DCLOUD_UNI_APPID"
android:value="你的appid" />
</application>
拷贝资源文件
-
导出uni-app x项目的资源文件:选择项目,然后点击:发行 -> 原生App-本地打包 -> 生成本地打包App资源,导出成功之后会在项目的unpackage/resources目录下生成资源文件
-
将app-android目录下与appid对应的目录拷贝到uniappx的
assets/apps
目录下,需要自己先创建
- 拷贝kt文件:需要将
unkackage/resource/app-android/uniappx/app-android/src/
目录下的所有文件拷贝到项目的uniappx
模块下的src/main/java
下,src/main/java
下的包名文件夹可以删掉
如果你的项目没有uts插件,到这一步已经可以使用As运行啦
配置uts插件
资源导出成功之后,uts插件资源位于unpackage/resource/app-android/uni_modules下
为方便区分,uts插件指前端封装的uni_modules插件;android uts插件指根据编译后的uts插件生成的安卓原生模块
新建android uts插件模块,跟新建uniappx
一样,下面以插件wow-scankit
为例子,下面所有都是基于wow-scankit
的配置示例
-
点击左侧Templates的Android Library。
-
Language选择Kotlin。
-
Module name建议与uts插件模块名称一致。
-
点击Finish。
注意:
- Templates一定要选择Android Library。
- Language一定要选择Kotlin。
- Build configuration language建议选择Groovy DSL(build.gradle)。以下教程均按照此模式进行
添加gradle插件
- 在
`wow-scankit
插件模块的build.gradle的plugins节点下添加io.dcloud.uts.kotlin的依赖
plugins {
...
id 'io.dcloud.uts.kotlin'
}
- 添加依赖
将下面内容拷贝到build.gradle中,添加到原有的dependencies节点,不要删掉原有的
dependencies {
compileOnly fileTree(include: ['*.aar'], dir: '../uniappx/libs')
compileOnly fileTree(include: ['*.aar'], dir: './libs')
compileOnly "com.alibaba:fastjson:1.2.83"
compileOnly "androidx.core:core-ktx:1.10.1"
compileOnly 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8'
compileOnly 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8'
}
根据config.json配置应用
如果uts插件的config.json
有内容
下面是插件wow-scankit
的配置
minSdkVersion
在插件wow-scankit
的android节点的defaultConfig的minSdk设置此字段
{
"minSdkVersion": "21",
"dependencies": ["com.huawei.hms:scan:2.12.0.301"]
}
dependencies
在插件wow-scankit
的dependencies 添加 implementation 'com.huawei.hms:scan:2.12.0.301'
- 在项目的
settings.gradle.jks
文件需要添加仓库地址
完整的dependencyResolutionManagement
如下
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven {
url = uri("https://jitpack.io")
}
maven {
url = uri("https://developer.huawei.com/repo/")
}
flatDir {
dirs("./plugins/")
}
}
}
- 将插件添加到
uniappx
模块
implementation project(":wow-scankit")
复制资源(如果有就复制)
libs
将src目录下的所有文件拷贝到android uts插件模块/src/main/java目录下(wow-scankit
插件没有)
assets
将assets文件夹拷贝到wow-scankit
插件模块/src/main/
目录下
res
将res文件夹拷贝到wow-scankit
插件模块/src/main/
目录下。
AndroidManifest.xml
将AndroidManifest.xml
拷贝到wow-scankit
插件模块/src/main/
目录下
添加到主项目
将wow-scankit
插件模块的依赖添加到uniappx模块
的build.gradle的依赖中
implementation project(':wow-scankit')
配置完成后重新构建
如果前面步骤没有出错的话,到这里就已经完成了
收起阅读 »
用户体验极不好,项目无法工程化
都2024年了,HbuilderX IDE 登录还需要手动输入帐号密码,不能做一下浏览器登录跳转吗?另外不能支持一下系统级别的其它的密码自动完成吗?自定义发行不支持cli,导致项目无法工程化,每次都需要手动使用IDE执行,极其恶心
都2024年了,HbuilderX IDE 登录还需要手动输入帐号密码,不能做一下浏览器登录跳转吗?另外不能支持一下系统级别的其它的密码自动完成吗?自定义发行不支持cli,导致项目无法工程化,每次都需要手动使用IDE执行,极其恶心