UniApp 实战指南

article/2025/11/7 9:24:32

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。

打包原生 APP

  1. 申请 AppKey
    • 登录 DCloud 管理应用

  • 点击要打包的项目


这里 android 可以使用 com.android.simple 后面不需要更改,但是这里需要和生成 keystore 对应起来。

  • 生成证书 移动开发实战指南使用

    keytool -list -v -keystore ./*.keystore

    查看 SHA1

  • 查看 HBuilderX 版本


选择对应的 SDK


拷贝其中的 HBuilder-Integrate-AS 到目标文件夹

方式一:新建工程
打开Android studio新建一个空白项目


选择 Empty Activity 点击 Next。

Minimum API Level 建议选21及以上
Package name作为应用标志,涉及申请第三方平台账号,一般情况下不建议修改,包名一般设置反向域名,如:io.dcloud.HBuilder
点击 Finish 完成创建。 注意:App离线SDK不支持Kotlin 方式二:导入工程
2.7.0之后提供HBuilder-Integrate-AS工程,可以直接导入HBuilder-Integrate-AS工程,直接运行simpleDemo项目即可。 配置工程

  1. 基础库配置将lib.5plus.base-release.aar、android-gif-drawable-release@1.2.23.aar、uniapp-v8-release.aar和oaid_sdk_1.0.25.aar拷贝到libs目录下

在build.gradle中添加资源引用注意:HBuilderX3.2.5版本之后适配了AndroidX。AndroidX版本需添加如下资源

implementation fileTree(include: ['*.jar'], dir: 'libs')  implementation fileTree(include: ['*.aar'], dir: 'libs')  implementation 'androidx.appcompat:appcompat:1.0.0'  implementation 'androidx.legacy:legacy-support-v4:1.0.0'  implementation 'androidx.recyclerview:recyclerview:1.0.0'  implementation 'com.facebook.fresco:fresco:2.5.0'  implementation "com.facebook.fresco:animated-gif:2.5.0"  implementation 'com.github.bumptech.glide:glide:4.9.0'  implementation 'com.alibaba:fastjson:1.1.46.android'

完整的 build.gradle 配置

plugins {id 'com.android.application'
}android {compileSdk 30defaultConfig {applicationId "com.leon.*"minSdk 21targetSdk 28versionCode 1versionName "1.0"multiDexEnabled true}signingConfigs {config {keyAlias 'yihuifanghuomiehuo'keyPassword '**'storeFile file('yihuifanghuomiehuo.keystore')storePassword '**'v1SigningEnabled truev2SigningEnabled true}}buildTypes {debug { // 如果丢失,调试到虚拟机时会报 AppKey 丢失或错误signingConfig signingConfigs.configminifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}release {signingConfig signingConfigs.configminifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}aaptOptions {additionalParameters '--auto-add-overlay'ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}}dependencies {implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])implementation 'androidx.appcompat:appcompat:1.2.0'implementation 'com.google.android.material:material:1.3.0'implementation 'androidx.constraintlayout:constraintlayout:2.0.4'implementation 'androidx.legacy:legacy-support-v4:1.0.0'implementation 'com.facebook.fresco:fresco:2.5.0'implementation "com.facebook.fresco:animated-gif:2.5.0"implementation 'com.github.bumptech.glide:glide:4.9.0'implementation 'com.alibaba:fastjson:1.1.46.android'
}

Cop
wzhuxiang
y tos cliardErrorCopi

  1. 应用配置

配置Appkey3.1.10版本起需要申请 Appkey,申请请参考打开Androidmanifest.xml, 导航到Application节点,创建meta-data节点,name为dcloud_appkey,value为申请的AppKey如下:

<application   ...>   <meta-data       android:name="dcloud_appkey"       android:value="替换为自己申请的Appkey" />
  • 配置应用版本号
    versionCode为应用的版本号(整数值),用于各应用市场的升级判断,建议与 manifest.json 中 version -> code 值一致。

versionName为应用的版本名称(字符串),在系统应用管理程序中显示的版本号,建议与 manifest.json中 version -> name 值一致。
applicationId为应用的包名,一般设置为反向域名,不建议修改。
建议将targetSdkVersion设置为25或以上。
App离线SDK minSdkVersion最低支持21,小于21在部分5.0以下机型上将无法正常使用。

完整版 AndroidManifest 可参考如下内容。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.leon.*"><applicationandroid:allowBackup="true"android:icon="@drawable/icon"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.HBuilderIntegrateAS"><activityandroid:name="io.dcloud.PandoraEntry"android:configChanges="orientation|keyboardHidden|keyboard|navigation"android:label="@string/app_name"android:launchMode="singleTask"android:hardwareAccelerated="true"android:theme="@style/TranslucentTheme"android:screenOrientation="user"android:windowSoftInputMode="adjustResize" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name="io.dcloud.PandoraEntryActivity"android:launchMode="singleTask"android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale|keyboard|smallestScreenSize|screenLayout|screenSize"android:hardwareAccelerated="true"android:permission="com.miui.securitycenter.permission.AppPermissionsEditor"android:screenOrientation="user"android:theme="@style/DCloudTheme"android:windowSoftInputMode="adjustResize"><intent-filter><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><action android:name="android.intent.action.VIEW" /><data android:scheme="h56131bcf" /></intent-filter></activity><providerandroid:name="io.dcloud.common.util.DCloud_FileProvider"android:authorities="${apk.applicationId}.dc.fileprovider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/dcloud_file_provider" /></provider><meta-dataandroid:name="dcloud_appkey"android:value="0f41ce1bbc104012ff42bc0dd0b883e8" /></application>
</manifest>

注意:${apk.applicationId} 必须替换成当前应用的包名

如果集成离线SDK时需要重写application,必须继承自DCloudApplication,否则会导致SDK中业务逻辑无法正常运行。
将对应的 application 配置到 Androidmanifest.xml中(如下),并添加tools:replace="android:name"以防出现冲突。

<application  android:name="io.dcloud.test.TestApplication"  android:icon="@drawable/icon"  android:label="@string/app_name"  tools:replace="android:name"></application>

py to clipboardErrorCopied
配置应用图标和启动界面将icon.png、push.png、splash.png放置到drawable,drawable-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi,drawable-xxhdpi文件夹下,不同文件夹下对应不同图片尺寸,可参考文档


修改Androidmanifest.xml中application节点的icon属性为@drawable/icon。如下图:
注意:splash.png在不同设备上显示效果不一样,为防止出现拉伸的状况,建议使用Android studio生成.9.png类型图片,可参考 文档

- icon.png 为应用的图标。- push.png 为推送消息的图标。- splash.png 为应用启动页的图标。


资源配置Android studio默认项目没有assets文件夹,需手动创建,创建位置与java目录同级。
创建data文件夹并拷贝资源将SDK->assets->data文件夹拷贝到刚刚创建的assets文件夹下,如下图:


注意:SDK升级时,data下资源需要同时更新。
创建 apps 文件夹并拷贝资源将HBuilderX中的项目导出,将导出的资源复制到assets->apps下,如下图所示:
导出app资源

修改 dcloud_control.xml 中的 appid 为拷贝过来的 uni-app 的 id,确保 dcloud_control.xml 中的appid 与manifest.json 中的 id 与 文件夹名一致,如下图所示:

生成自定义基座,需要在根节点下添加debug="true"和syncDebug="true",如下图:

自定义基座支持热更新需要将debug-server-release.aar打入apk中,生成正式包时可以删除。 详细步骤可参考链接

其他配置AndroidX 配置需要在项目根目录下的gradle.properties文件中添加如下内容 android.useAndroidX=true android.enableJetifier=trueCopy to clipboardErrorCopied运行
连接手机,点击按钮,运行即可。


引入本地 iconfont 的正确姿势

iconfont 文件里面包含 iconfont.ttficonfont.css, 将 iconfont.ttf 文件转位 base64。Base64 文件转换工具
打开 iconfont.css文件
修改 @font-face 部分,将转换好的 base64代码粘贴到对应位置,并且设置代码如下:

/* 修改第 1 段 代码 */
@font-face {     font-family: "custom-icon";     src: url(data:font/truetype;charset=utf-8;base64,转换的base64内容) format('truetype');   
}


最后则再项目中App.vue中引入iconfont.css文件

<style>   @import "./font/iconfont.css";   
</style>

在任意组件中使用方法:

// 直接使用
<view class="iconfont icon-XXX"></view>// 借助 UView Icon 使用
<u-icon name="home"custom-prefix="custom-icon"></u-icon>

蓝牙步骤

(1)初始化蓝牙 uni.openBluetoothAdapter(OBJECT)
(2)开始搜索蓝牙设备 uni.startBluetoothDevicesDiscovery(OBJECT)
(3)发现外围设备 uni.onBluetoothDeviceFound(CALLBACK)
(4)停止搜寻附近的蓝牙外围设备 uni.stopBluetoothDevicesDiscovery(OBJECT)
(5)连接低功耗蓝牙设备 uni.createBLEConnection(OBJECT)
(6)获取蓝牙设备所有服务 uni.getBLEDeviceServices(OBJECT)
(7)获取蓝牙特征 uni.getBLEDeviceCharacteristics(OBJECT)
(8)启用蓝牙设备特征值变化时的 notify 功能 uni.notifyBLECharacteristicValueChange(OBJECT)
(9)监听低功耗蓝牙设备的特征值变化 uni.onBLECharacteristicValueChange(CALLBACK)
(10)对需要操作的特征值进行读、写操作

使用蓝牙开发遇到的问题

1、安卓、微信小程序、IOS 渲染的蓝牙名字不同;
2、安卓、微信小程序、IOS DeviceId 不同,IOS、微信小程序为设备 UUID,安卓为设备MAC;
3、IOS API 从打开到调用不允许省略;
4、单次写入不允许超过 20 字节(40字符);
5、感觉安卓反应慢,在 API 调用前后可以加延时,有时会碰到读取不到服务,有时候读取到的服务又不对,莫名其妙;
6、对于同一个蓝牙设备,必须要规范使用,连接一次,用完断开,如果重复连接,可能会造成多个实例连接同一个蓝牙设备。(蓝牙设备自动断开连接的时间大概20秒左右,具体应该还要看设备);
7、小程序下面找不到蓝牙设备?对,在安卓测试发现的,安卓 10 版本,怎么解决的?
微信开启定位信息,定位总开关也要打开。
蓝牙总开关打开。
不开心;卡住 1 小时,😠


http://chatgpt.dhexx.cn/article/ki2UGgJw.shtml

相关文章

Android Studio 插件大全(转)

转自&#xff1a;http://blog.csdn.net/alpha58/article/details/62881144 现在Android的开发者基本上都使用android Studio进行开发(如果你还在使用eclipse那也行&#xff0c;毕竟你乐意怎么样都行)。使用好Android Studio插件能大量的减少我们的工作量。 1.GsonFormat 快速…

定位技术课程设计-微信小程序校园导游系统

定位技术课程设计课程设计教学目的课程设计要求课程设计题目原题目拓展内容需求分析原理分析微信小程序API定位原理WIFI指纹定位原理路径规划算法调研详细设计总述主页面介绍学校简介页面介绍导引页面概述导引地图景点列表景点详细介绍页面搜索界面导航页面概述导航逻辑驾车导航…

前端知识——盒子类型,浮动属性,定位属性,JavaScript基础语法

文章目录 CSS—盒子类型marginpadding 浮动属性CSS—溢出属性overflow的设置项 CSS—定位属性定位状态定位操作 CSS—z-indexJavaScript简介主要功能运行模式变量与注释数据类型数据类型之数值类型(Number)数据类型之字符串类型(String) CSS—盒子类型 所有的标签其实都有一个…

python转js解释器_python 代码转换 js

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; 推荐使用腾讯云 api 配套的7种常见的编程语言 sdk&#xff0c;已经封装了签名和请求过程&#xff0c;均已…

android 图像识别定位,Android OpenCV 图像识别

最近打算写一个android 平台opencv 的小程序,着手查找了一下资料.网络上的资料参差不齐,有一些都比较老旧,我参考了前面的方法找到了一个简单的搭建方法,分享给大家. 0,环境的搭建: java 虚拟机环境搭建,网络资料很多不再赘述. 下面说明如果搭建 android opencv 环境: 下载Open…

安卓逆向及JavaScript实战

沐阳~ 各种案例&#xff0c;瑞树啥的&#xff0c;等等&#xff0c;案例多。 安卓逆向如下&#xff1a; 主&#xff1a; 沐阳~ 课程如下&#xff1a; 1.(ndk)1.初始NDK.mp4 1.(ndk)2.NDK性能提升及数据类型.mp4 1.(ndk)3.JAVA反射结合NDK.mp4 1.(ndk)4.JVM和JNI.mp4 1.(ndk)4.…

js逆向、安卓逆向教程

JS基础 提示信息 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn 1.零基础js逆向专题 MD5通杀 长度32位置 搜索关键词&#xff1a; 16进制 0x67452301 10进制 1732584193 RSA 搜索关键词&#xff1a; setpublickey AES cryptojs.aes DES cryptojs.des.encrypt …

学习强国---Android逆向及JS逆向

沐阳~ 各种案例&#xff0c;瑞树啥的&#xff0c;等等&#xff0c;案例多。有意私我&#xff0c;优惠大大 安卓逆向如下&#xff1a; 主&#xff1a; 沐阳~ 课程如下&#xff1a; 1.(ndk)1.初始NDK.mp4 1.(ndk)2.NDK性能提升及数据类型.mp4 1.(ndk)3.JAVA反射结合NDK.mp4 1.(…

js加密参数定位

当我们抓取网页端数据时&#xff0c;经常被加密参数、加密数据所困扰&#xff0c;如何快速定位这些加解密函数&#xff0c;尤为重要。本片文章是我逆向js时一些技巧的总结&#xff0c;如有遗漏&#xff0c;欢迎补充。 所需环境&#xff1a;Chrome浏览器 1. 搜索 1.1 全局搜索…

【APP 逆向百例】Frida 初体验,root 检测与加密字符串定位

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未…

巴斯勒相机acA1300-60gm

Basler acA1300-60gm GigE 相机配有 e2v EV76C560 CMOS 感光芯片&#xff0c;每秒 60 帧图像&#xff0c;130 万像素分辨率。

如何选择合适的工业相机

如何选择合适的工业相机 目录 如何选择合适的工业相机简洁具体**多相机检测****工业相机的白平衡知识**工业相机的参数工业数字相机常见问题解决方案参考文献 简洁 工业相机有许多项参数&#xff0c;选择合适的工业相机既要考虑工业相机的参数&#xff0c;也要考虑到项目的精度…

巴斯勒BASLER GIGE相机程序调试报错后需要拔网线

巴斯勒BASLER GIGE相机程序调试报错后需要拔网线的个人解决方案 根据SDK的用户手册提示&#xff0c;在相机连接后&#xff0c;直接执行以下程序。 camera.Parameters[PLTransportLayer.HeartbeatTimeout].TrySetValue(1000,IntegerValueCorrection.Nearest); // 1000 ms time…

机器视觉_工业相机及相关配件选型

文章目录 工业相机一、 概述二、 相机参数1. 传感器芯片1.1. CCD&CMOS1.2. CCD1.3. CMOS1.4. 靶面1.5. 传感器芯片选型 2. 黑白or彩色3. 帧数⭐4. 接口类型4.1. POE供电 三、相关硬件⭐1. 镜头1.1. 焦距⭐1.2. 视野⭐1.3. 物距1.4. 景深⭐1.5. 调焦1.6. 镜头的一些理论小知…

Ubuntu环境下配置巴斯勒相机及相机测试

Ubuntu环境下配置巴斯勒相机及相机测试 Ubuntu配置巴斯勒相机及相机测试软硬件要求Ubuntu虚拟系统安装安装c编译器安装Sublime Text 3及配置C运行环境配置巴斯勒相机SDK及代码测试 Ubuntu配置巴斯勒相机及相机测试 软硬件要求 软件 我们对Markdown编辑器进行了一些功能拓展与…

Python之OpenCV 005 工业相机Basler之图像采集

工业机器视觉系统2D应用用到Basler&#xff08;德国&#xff09;&#xff0c;Baumer&#xff08;瑞士&#xff09;&#xff0c;ImageSource&#xff08;台湾&#xff09;&#xff0c;大恒和海康等等牌子工业相机。 Basler&#xff08;巴斯勒&#xff09;是比较常用的&#xff…

机器视觉 · 工业相机

文章目录 工业相机 面阵相机工业相机 线阵相机工业相机 光场相机工业相机 棱镜相机工业相机 多光谱/高光谱工业相机 偏振相机工业相机 传感器 CCD工业相机 传感器 ICCD工业相机 传感器 EMCCD工业相机 传感器 CMOS工业相机 传感器 sCMOS工业相机 传感器 红外探…

BASLER巴斯勒线扫相机使用流程

(Q有答疑)康耐视智能相机Insight-OCR读取案例 1、相机连接—线缆连接 将相机电源线、网线与相机连接,网线另一端连接电脑 无编码器触发时,只需连接网线、电源线即可 2、修改电脑IP 3、修改相机IP 4、相机连接—软件连接 连接相机有两种方式: 1、双击该相机型号进行连接;…

basler工业相机使用经验小记

1&#xff0c;windows10的系统&#xff0c;要用&#xff15;以上的&#xff53;&#xff44;&#xff4b;不然打不开相机。 &#xff12;&#xff0c;如果用&#xff4f;&#xff50;&#xff45;&#xff4e;&#xff43;&#xff56;或&#xff56;&#xff53;程序打开忘记…

国内工业相机十大排名

国内智能相机十大排名&#xff0c;我们今天先不从视觉检测解决方案的角度出发&#xff0c;而是从ccd视觉检测产品的角度来评选出机器视觉龙头企业。众所周知&#xff0c;整个视觉系统我们所用到的软硬件产品有&#xff1a;光源、镜头、工业相机、视觉软件等&#xff0c;那么在这…