likes
comments
collection
share

uniapp离线打包APK并运行至Android Studio

作者站长头像
站长
· 阅读数 64

相信有不少做 uniapp 开发并打包成 APK 的小伙伴有过相同经历,每次更改项目之后需要部署之时,就逃不过 云打包并排队 以及 打包次数受限 的痛苦,况且每当周五下午,这个痛苦会再次加倍,所以下面就为各位介绍一下 uniapp离线打包 的完整教程(PS:真的有好多坑,整掉了我 1024 根头发 -_- )

一、准备工作

  1. 下载 Android Studio 并安装(一直下一步即可) Download Android Studio & App Tools - Android Developers (google.cn)
  2. 下载 uniapp 官方提供的 SDK Android 离线SDK - 正式版 | uni小程序SDK (dcloud.net.cn)
  3. 准备一个 uniapp 项目并进行本地打包

uniapp离线打包APK并运行至Android Studio 打包之后会生成一个以 __UNI__ 开头的文件,并保存在以下目录:

uniapp离线打包APK并运行至Android Studio

  1. 创建 Android ID,登录 Dcloud 后台 应用列表 (dcloud.net.cn) 路径如下:应用管理 - 我的应用,点击右上角创建应用,应用类型选择uni-app,填写名称点击创建即可在列表中看到刚刚创建的一项,然后在列表中点击蓝色的应用名称进入配置

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio 然后点击各平台信息-新增

uniapp离线打包APK并运行至Android Studio

准备一个 Android 打包的 签名文件,如下图是应用场景:

uniapp离线打包APK并运行至Android Studio

  • 首先你得先安装JRE环境(安装Android Studio的时候也得安装JDK,同时就有安装JRE了)
  • 随便进入一个磁盘,这里我是在C盘操作的,执行cmd进入命令行
  • 使用keytool -genkey命令生成证书:keytool -genkey -alias kytest -keyalg RSA -keysize 2048 -validity 36500 -keystore kytest.keystore
  • 填写相关信息,按Y生成一个签名文件

uniapp离线打包APK并运行至Android Studio

  • 然后打印详情输入:keytool -list -v -keystore kytest.keystore

uniapp离线打包APK并运行至Android Studio 注:kytest 别名:可替换自己的签名证书别名;kytest.keystore 为生成的签名证书文件名称,默认为jre目录bin文件夹内

  • 然后将上述生成的东西填入,包名按照【com.android.uniApp】格式命名:

uniapp离线打包APK并运行至Android Studio

  • 提交成功之后在列表页中点击创建即可生成离线打包Key

uniapp离线打包APK并运行至Android Studio

至此,准备工作已经完毕,接下来才是硬骨头,嘿嘿~~

二、开始鼓捣

  1. 导入项目:将 uniapp 官方提供的 SDK 压缩包解压,并将其中的【HBuilder-Integrate-AS】导入 Android Studio,导入后将 Android 目录更改为 Projects 目录,更直观些

uniapp离线打包APK并运行至Android Studio

  1. 将此目录整体替换成刚刚打包生成以 __UNI__ 开头的文件

uniapp离线打包APK并运行至Android Studio

  1. 修改\HBuilder-Integrate-AS\simpleDemo\src\main\assets\data\dcloud_control.xml文件中的appid为自己项目的ID

uniapp离线打包APK并运行至Android Studio

  1. 修改\HBuilder-Integrate-AS\simpleDemo\src\main\AndroidManifest.xml文件中的包名为刚刚创建离线打包Key中填入的包名,以及底下的meta-data标签dcloud_appkey的value值为上面生成的Android ID

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

  1. 将自己项目中的密钥文件复制到simpleDemo目录下,如下图中的“kytest.keystore”;也可以使用Android Studio重新创建密钥,操作路径:Build>Generate Signed Bundle or APK>Next>Create new

uniapp离线打包APK并运行至Android Studio

  1. 修改项目\HBuilder-Integrate-AS\simpleDemo\build.gradle中密钥配置为自己的刚刚生成的密钥内容,注意目录层级,外层还有一个同名build.gradle文件;然后将【applicationId】也改为自己的包名

uniapp离线打包APK并运行至Android Studio uniapp离线打包APK并运行至Android Studio

  1. 这个时候会发现控制台下方是爆红的,而且打包功能区【Build】下几乎都是灰色的,接下来就该改一下【JDK】和【Gradle】的版本了,点击左上角的【File】-【Settings】将【Gradle JDK】更改为【1.8】的版本然后保存;同样点击左上角【File】-【Project Structure...】将【Gradle Version】更改为【6.5】然后保存,等待项目重新加载【Gradle】,最后关闭 Android Studio 重新打开。

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

  1. 点击右上角的运行按钮,等待项目运行,结果便是成功啦~

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

  1. 点击功能区【Build】-【Generate Signed Bundle/APK...】选择【APK】-【Next】,填入刚刚生成的【密钥内容】(这里也可以生成新的,但是需要更改项目原本的,确实没必要哈哈哈),点击【Next】选择测试版还是发布版然后【Create】等待打包生成,结果便是成功啦~最后附上打包生成的APK目录

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

  1. 补充一个可以将uniapp项目直接运行至Android Studio模拟器的方法,而且还支持修改代码后自动重载以及控制台打印报错信息等。
  • 首先点击运行至 Android App 基座,第一次会下载相关插件,等待下载完成自动安装

uniapp离线打包APK并运行至Android Studio

  • 然后打开Android Studio,关闭原有的项目,然后根据下图进入VDM管理器

uniapp离线打包APK并运行至Android Studio

  • 会发现列表中已经有一个虚拟机了,点击小三角即可运行起来

uniapp离线打包APK并运行至Android Studio

  • 然后再一次点击运行至Android App 基座,点击运行,下方就会出现一个控制台,显示项目已经启动

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

  • 但是此时虚拟机一直显示【同步手机端程序文件完成】不动,足以说明翻车了,但还不完全翻哈哈哈,这就涉及到现在的 HbuilderX 版本比较新,而 Android Studio 的默认虚拟机版本略旧,这时候就得重新安装一个新的,看下一步

uniapp离线打包APK并运行至Android Studio

  • 重新回到【虚拟机列表】中,先点击右边的【暂停】按钮关闭虚拟机,然后点击左上角的【Create Device】创建虚拟机,这里我选择了【Pixel 7】pro也行,反正算是最新的,然后点击【Clone Device】,然后是【Finish】,再是 【Next】,接下来我选择的是【安卓11】也就是代号为R的安卓版本,第一次需要先点击右边的【下载】按钮进行下载,下载完成之后再到这里点击【Next】,最后【Finish】即可在列表中找到刚刚创建的新的虚拟机了 uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

  • 运行刚刚创建的新虚拟机,首次运行会比较慢,因为要下载很多东西,且需要开机(很像你买的新手机),再次点击运行项目至 Android App 基建,如果显示找不到【Android 设备】,就点击弹窗左上角的刷新,过一会就会刷出来了,然后点击【运行】,这时候就可以成功运行至新的虚拟机了,大功告成~~

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

三、踩坑

我有过一次运行项目的时候模拟器显示【appkey is not configured or configured incorrect】,有以下几个原因:

  1. 项目中的【build.gradle】密钥填错或者上方的【applicationId】没改成与申请AppKey时的appid一致
  2. 项目中的【AndroidManifest.xml】最底下的【android:value】填错,或者上方的【package】包名没改成与申请AppKey时的appid一致
  3. 检测离线项目的包名是否申请AppKey时的包名是否一致,见下图,发现不一致时可在【DCLOUD开发者中心-应用列表】中删除原有的,重新创建一个,务必要保证创建的【包名】与HbuilderX打包的文件名一致

uniapp离线打包APK并运行至Android Studio

  1. 打包生成的APK文件在安卓手机上安装失败,原因就是:模拟器一般都是 x86 架构;而真机一般都是 [arm],解决方式为打开 mainfest.json 文件,在支持 CPU 中把 X86 勾选上就可以了。

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio 如果还是提示【该安装包与系统不兼容】,则需要在【build.gradle】中添加如下配置

debug {
    v1SigningEnabled true
    v2SigningEnabled true
}
release {
    v1SigningEnabled true
    v2SigningEnabled true
}

uniapp离线打包APK并运行至Android Studio

四、App权限配置

  1. 项目中有勾选【VideoPlayer】,但是虚拟机或真机运行的时候提示【未添加videoplayer模块】,需要把 【media-release.aar】,【weex_videoplayer-release.aar】 这两个文件复制到项目的libs目录下(文件可以在原始工程找到)

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

  1. 项目中有勾选【Record】,但是虚拟机或真机运行的时候并不会弹窗提示用户是否给予此权限,需要把 【audio-mp3aac-release.aar】这个个文件复制到项目的libs目录下(文件可以在原始工程找到),且在【AndroidManifest.xml】中的【application】前添加如下配置
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>

uniapp离线打包APK并运行至Android Studio

uniapp离线打包APK并运行至Android Studio

  1. 项目中有勾选【Camera&Gallery】,但是虚拟机或真机运行的时候并不会弹窗提示用户是否给予此权限,在使用【uni.chooseImage】调用相机的时候并没有效果,此时需要在【AndroidManifest.xml】中的【application】前添加如下配置
<uses-permission android:name="android.permission.CAMERA" />
<!-- 支持相机才能运行 -->
<uses-feature
    android:name="android.hardware.camera"
    android:required="true" />

uniapp离线打包APK并运行至Android Studio

相信不少做到最后且成功的小伙伴内心应该无比激动哈哈哈,总体下来的流程步骤巨多,有一个地方出错了都将前功尽弃,所以一定要细心细心再细心。最后还是恭喜大家成功了,有任何问题可以在下方留言哦,一起在前端开发的路上共同进步~~

转载自:https://juejin.cn/post/7264564445748641852
评论
请登录