当前位置:   article > 正文

UniApp 实战指南

2.7.0之后提供hbuilder-integrate-as工程,可以直接导入hbuilder-integrate-as工程

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

打包原生 APP

  1. 申请 AppKey

  • 点击要打包的项目


这里 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版本需添加如下资源

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

完整的 build.gradle 配置

  1. plugins {
  2. id 'com.android.application'
  3. }
  4. android {
  5. compileSdk 30
  6. defaultConfig {
  7. applicationId "com.leon.*"
  8. minSdk 21
  9. targetSdk 28
  10. versionCode 1
  11. versionName "1.0"
  12. multiDexEnabled true
  13. }
  14. signingConfigs {
  15. config {
  16. keyAlias 'yihuifanghuomiehuo'
  17. keyPassword '**'
  18. storeFile file('yihuifanghuomiehuo.keystore')
  19. storePassword '**'
  20. v1SigningEnabled true
  21. v2SigningEnabled true
  22. }
  23. }
  24. buildTypes {
  25. debug { // 如果丢失,调试到虚拟机时会报 AppKey 丢失或错误
  26. signingConfig signingConfigs.config
  27. minifyEnabled false
  28. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  29. }
  30. release {
  31. signingConfig signingConfigs.config
  32. minifyEnabled false
  33. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  34. }
  35. }
  36. aaptOptions {
  37. additionalParameters '--auto-add-overlay'
  38. ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
  39. }
  40. compileOptions {
  41. sourceCompatibility JavaVersion.VERSION_1_8
  42. targetCompatibility JavaVersion.VERSION_1_8
  43. }
  44. }
  45. dependencies {
  46. implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
  47. implementation 'androidx.appcompat:appcompat:1.2.0'
  48. implementation 'com.google.android.material:material:1.3.0'
  49. implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
  50. implementation 'androidx.legacy:legacy-support-v4:1.0.0'
  51. implementation 'com.facebook.fresco:fresco:2.5.0'
  52. implementation "com.facebook.fresco:animated-gif:2.5.0"
  53. implementation 'com.github.bumptech.glide:glide:4.9.0'
  54. implementation 'com.alibaba:fastjson:1.1.46.android'
  55. }

Cop
wzhuxiang
y tos cliardErrorCopi

  1. 应用配置

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

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

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

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

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.leon.*">
  4. <application
  5. android:allowBackup="true"
  6. android:icon="@drawable/icon"
  7. android:label="@string/app_name"
  8. android:roundIcon="@mipmap/ic_launcher_round"
  9. android:supportsRtl="true"
  10. android:theme="@style/Theme.HBuilderIntegrateAS">
  11. <activity
  12. android:name="io.dcloud.PandoraEntry"
  13. android:configChanges="orientation|keyboardHidden|keyboard|navigation"
  14. android:label="@string/app_name"
  15. android:launchMode="singleTask"
  16. android:hardwareAccelerated="true"
  17. android:theme="@style/TranslucentTheme"
  18. android:screenOrientation="user"
  19. android:windowSoftInputMode="adjustResize" >
  20. <intent-filter>
  21. <action android:name="android.intent.action.MAIN" />
  22. <category android:name="android.intent.category.LAUNCHER" />
  23. </intent-filter>
  24. </activity>
  25. <activity
  26. android:name="io.dcloud.PandoraEntryActivity"
  27. android:launchMode="singleTask"
  28. android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale|keyboard|smallestScreenSize|screenLayout|screenSize"
  29. android:hardwareAccelerated="true"
  30. android:permission="com.miui.securitycenter.permission.AppPermissionsEditor"
  31. android:screenOrientation="user"
  32. android:theme="@style/DCloudTheme"
  33. android:windowSoftInputMode="adjustResize">
  34. <intent-filter>
  35. <category android:name="android.intent.category.DEFAULT" />
  36. <category android:name="android.intent.category.BROWSABLE" />
  37. <action android:name="android.intent.action.VIEW" />
  38. <data android:scheme="h56131bcf" />
  39. </intent-filter>
  40. </activity>
  41. <provider
  42. android:name="io.dcloud.common.util.DCloud_FileProvider"
  43. android:authorities="${apk.applicationId}.dc.fileprovider"
  44. android:exported="false"
  45. android:grantUriPermissions="true">
  46. <meta-data
  47. android:name="android.support.FILE_PROVIDER_PATHS"
  48. android:resource="@xml/dcloud_file_provider" />
  49. </provider>
  50. <meta-data
  51. android:name="dcloud_appkey"
  52. android:value="0f41ce1bbc104012ff42bc0dd0b883e8" />
  53. </application>
  54. </manifest>

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

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

  1. <application
  2. android:name="io.dcloud.test.TestApplication"
  3. android:icon="@drawable/icon"
  4. android:label="@string/app_name"
  5. tools:replace="android:name">
  6. </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类型图片,可参考 文档

  1. - icon.png 为应用的图标。
  2. - push.png 为推送消息的图标。
  3. - 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 文件转位 base64Base64 文件转换工具
打开 iconfont.css文件
修改 @font-face 部分,将转换好的 base64代码粘贴到对应位置,并且设置代码如下:

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


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

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

在任意组件中使用方法:

  1. // 直接使用
  2. <view class="iconfont icon-XXX"></view>
  3. // 借助 UView Icon 使用
  4. <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 小时,

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/316697
推荐阅读
相关标签