记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应用打包的全流程

相关推荐
数据知道6 分钟前
【YAML】一文掌握 YAML 的详细用法(YAML 备忘速查)
前端·yaml
dr李四维6 分钟前
vue生命周期、钩子以及跨域问题简介
前端·javascript·vue.js·websocket·跨域问题·vue生命周期·钩子函数
旭久12 分钟前
react+antd中做一个外部按钮新增 表格内部本地新增一条数据并且支持编辑删除(无难度上手)
前端·javascript·react.js
windyrain29 分钟前
ant design pro 模版简化工具
前端·react.js·ant design
浪遏36 分钟前
我的远程实习(六) | 一个demo讲清Auth.js国外平台登录鉴权👈|nextjs
前端·面试·next.js
GISer_Jing1 小时前
React-Markdown详解
前端·react.js·前端框架
太阳花ˉ1 小时前
React(九)React Hooks
前端·react.js
拉不动的猪2 小时前
vue与react的简单问答
前端·javascript·面试
污斑兔2 小时前
如何在CSS中创建从左上角到右下角的渐变边框
前端