记uniapp开发App应用遇到的一些坑

前言

本文主要是为了记录一些我在开发 uniapp 过程中所遇到的一些坑,再骂一次,* * * 的 ** uniapp

1. 页面之间传值注意点

页面之间如果要传的值过多,那么建议最好是使用其它的方案去达到这一目的,比如使用uni.setStorage去实现,最好不要转成 JSON 直接拼接到 url 里面,这么做虽然可能程序不会崩,但只要传的值过多,在每次改动目标页面重新编译的时候就会百分百白屏,这种开发体验是极差的,以下是报错信息:

less 复制代码
 reportJSException >>>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught URIError: URI malformed
  at  (uni-jsframework.js:1:54507)
  at I (uni-jsframework.js:1:54421)
  at Bv (uni-jsframework.js:1:295064)
  at Rv (uni-jsframework.js:1:296550)
  at o.$mount (uni-jsframework.js:1:309159)

在发现我改动这个页面重新编译百分百白屏报错之后,我就通过注释掉该页面的一些代码以及组件引用,最后仍然有这个问题,那么就只能说明报错原因是上一个页面 url 传过来的参数导致的,遂将 URL 传值改为uni.setStorageSync传值,问题解决。

2. 不要在 uni-transition 组件上绑定任何事件

会出现"TypeError: $event.stopPropagation is not a function" 的错误

3. 所有项目依赖插件建议下到本地,并选择从本地加载

为什么要这样?因为如果你选择从云端加载插件,而 uniapp 又不支持锁定插件版本( *** * _ 的 _ * uniapp** ),所以你永远也不会知道作者更新了什么东西,你看不到源码,也收不到更新通知,很有可能出现咱们的项目在上一个版本的基座还没有任何问题,但是在下一个版本就会出错的 bug。很操蛋。

再提一点,每当我们的项目中添加或者更换了插件,要重新打基座才能看到效果

本条所有问题都是基于 Android 自定义基座开发时发现的

4. 离线打包

天下没有免费的午餐,uniapp 免费的打包是小的可怜,想付费嘛,一次 20 又不好,更老板申请经费嘛,老板又说:"怎么会要钱嘞,之前招的开发从来没问我要过钱"。没办法,只能尝试离线打包了。

4.1 第一步,生成离线打包资源

这一步很简单,点击图中按钮即可生成

生成的离线包在 项目目录/unpackage/resources文件夹下

4.2 生成离线 appKey、证书与下载 uniapp 官方的离线资源包

首先呢,appkey 与证书这里我们选择在[DCloud 开发者中心](#DCloud 开发者中心 "#")去生成,本地很麻烦且不好管理(其实是懒得管)。

然后生成证书,生成之后点详情查看

这里我们需要把 SHA1 和 SHA256 复制下来

来到这里点新增

填入刚刚复制的信息,提交

回到这里点创建离线 key

至此,证书以及 appKey 都有了。记得还要把证书下载本地。

下载 Android 离线包 nativesupport.dcloud.net.cn/AppDocs/use...

4.3 下载 Android Studio

下载地址:developer.android.google.cn/studio?hl=z...

4.4 开始配置相关信息

接下来这一步主要是基于 uniapp 官方提供的 Android 离线 SDK 去做一些修改。将下载的离线 SDK 做解压缩

然后进入,找到这个文件夹最大的,这个就是我们待会要修改的 sdk 包

将其导入到 AndroidStudio,文件视图我们选择"Project Files"

然后将src/main/apps/下的所有文件删掉,替换成我们第一步生成的打包资源。替换完毕后我们就需要修改以下文件:

  1. 项目根目录/app/src/main/data/dcloud_control.xml
xml 复制代码
 <apps>
     <app appid="修改成 apps__UNI__TEST\www\manifest.json 中的id 如下图" appver=""/>
 </apps>
  1. 项目根目录/app/src/main/AndroidManifest.xml
xml 复制代码
 <!-- 1. 修改package包名 这个包名要与我们在申请appKey时填的包名一致 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools" package="uni.TEST">
 <!-- 2. 在application节点下添加provide节点 -->
 <provider
     android:name="io.dcloud.common.util.DCloud_FileProvider"
     android:authorities="uni.TEST.dc.fileprovider"
     android:exported="false"
     android:grantUriPermissions="true">
     <meta-data
         android:name="android.support.FILE_PROVIDER_PATHS"
         android:resource="@xml/dcloud_file_provider" />
 </provider>
  1. 项目根目录/build.gradle
arduino 复制代码
 // 修改namespace、applicationId、versionName、manifestPlaceholders.apk.applicationId
 // namespace、applicationId、manifestPlaceholders.apk.applicationId与上面第二步的包名一致
 // versionName则与apps__UNI__TEST\www\manifest.json中的version一致
 android {
     compileSdkVersion 35
     buildToolsVersion '35.0.0'
     namespace 'uni.TEST'
     defaultConfig {
         applicationId "uni.TEST"
         minSdkVersion 21
         targetSdkVersion 33
         versionCode 1
         versionName "1.41.1"
         multiDexEnabled true
         ndk {
             abiFilters 'x86', 'armeabi-v7a', 'arm64-v8a'
         }
         manifestPlaceholders = [
                 "apk.applicationId"     : "uni.TEST",
                 "GETUI_APPID"           : "unipush的appid",
                 "plus.unipush.appid"    : "unipush的appid",
                 "plus.unipush.appkey"   : "unipuish的appkey",
                 "plus.unipush.appsecret": "unipush的secrety"
         ]
         compileOptions {
             sourceCompatibility JavaVersion.VERSION_1_8
             targetCompatibility JavaVersion.VERSION_1_8
         }
     }
  }
  1. 修改应用图标以及文件名

我们将应用图标拷贝到如下目录项目根目录/app/src/main/res

hdpi这些文件名后缀对应着不同的分辨率,以下是参考:

hdpi:72x72 px

xhdpi:96x96 px

xxhdpi:144x144 px

xxxhdpi:192x192 px xxxhdpi:192x192 px

而文件名的修改则是在项目根目录/app/src/main/res/values/strings.xml文件中修改

xml 复制代码
 <resources>
     <string name="app_name">你的应用名字</string>
 </resources>
  1. 开始应用打包

在Build目录下选择如下选项

如无发布到应用商店的需求,我们就将打包类型选择为APK

Key store path我们选择刚才我们下载本地的证书,然后在后台查看证书密码,在Key store password以Key password中输入,Key alias我们也可以在后台中看到,就是"证书别名"

然后打包这里我们选release,即正式版

以上就是uniapp应用打包的全流程

相关推荐
excel4 分钟前
前端必备:从能力检测到 UA-CH,浏览器客户端检测的完整指南
前端
前端小巷子11 分钟前
Vue 3全面提速剖析
前端·vue.js·面试
悟空聊架构18 分钟前
我的网站被攻击了,被干掉了 120G 流量,还在持续攻击中...
java·前端·架构
CodeSheep19 分钟前
国内 IT 公司时薪排行榜。
前端·后端·程序员
尖椒土豆sss23 分钟前
踩坑vue项目中使用 iframe 嵌套子系统无法登录,不报错问题!
前端·vue.js
遗悲风24 分钟前
html二次作业
前端·html
江城开朗的豌豆27 分钟前
React输入框优化:如何精准获取用户输入完成后的最终值?
前端·javascript·全栈
CF14年老兵28 分钟前
从卡顿到飞驰:我是如何用WebAssembly引爆React性能的
前端·react.js·trae
画月的亮31 分钟前
前端处理导出PDF。Vue导出pdf
前端·vue.js·pdf
江城开朗的豌豆37 分钟前
拆解Redux:从零手写一个状态管理器,彻底搞懂它的魔法!
前端·javascript·react.js