uni-app多端小程序cli工程项目如何离线打包成安卓APP


🙂前言

前一篇文章小波已经用 vue3+typescript+pinia+pnpm+vite+uni-app+uni-ui 搭建好工程项目,打包h5或者小程序完成也没有问题,接下来当然要实现uniApp如何打包成安卓APP。


😍uni-app(vue3+vite+typescript+pinia+uni-ui)cli工程项目打包成安卓app实机效果

uni-app(vue3+vite+typescript+pinia+uni-ui)微信小程序APP工程模版实体截图

gitee仓库传送门


🧐环境版本

  • node

    1
    2
    3
    node -v
    // 输出
    v16.13.1
  • javasdk

    1
    2
    3
    4
    5
    java -version
    // 输出
    java version "1.8.0_73"
    Java(TM) SE Runtime Environment (build 1.8.0_73-b02)
    Java HotSpot(TM) Client VM (build 25.73-b02, mixed mode)
  • HBuildX 3.7.9

  • android studio 4.2.2


🙂总纲

  1. 下载安装 HBuildX
  2. 下载安装 android studio
  3. 下载 android 离线 sdk (需要和你的 HBuilderX 、uni-app-cli 版本一致,实现打包的基础包)
  4. 下载安装 jdk (配置 android studio 是否成功打包就依赖它)
  5. 生成安卓签名证书文件及离线打包 key (1. JRE 环境手动生成 2. Dcloud开发者中心自动生成)
  6. HBuildX 本地打包App 资源
  7. 配置 android 离线 sdk 工程
  8. 配置 android studio 打包

🤔uniApp工程化项目离线打包安卓APP实操具体步骤

第一步:下载安装 HBuildX

直接去 uni-app 官网下载[1]

提示

如果用的cli搭建项目一定要跟 HBuildX 版本一致。android 离线 sdk 压缩包也必须同版本


第二步:下载安装 android studio

去谷歌开发者网站[7]下载 android studio

提示

版本最好在4.0以上,例如小波下载的是 4.2.2 - 2021年6月30日

第一次打开会提示 ,可以不管它(这是因为我们离线 sdk 项目还没有配置),或者参考这篇文章[11]


第三步:下载 android 离线 sdk 压缩包

直接去 uni-app 官网下载[8]

提示

要和 HBuildX 、uni-app-cli 脚手架版本一致


第四步:下载安装 jdk

这是非常关键的一步,配置 android studio 是否成功打包就依赖它

  1. 直接去 oracle 官网下载[9]

注意

小波自己测试不管是否科学上网都无法登录成功进入网站下载….所以放弃这条路吧

有同学走通也请顺便教小波一下~~

  1. 去其他平台下载,也可以直接下载小波上传到百度云的安装包[10]
  2. 查看是否安装成功,终端中执行命令 java -version,如果输出内容和上面环境版本中一致则ok

第五步:生成安卓签名证书文件及离线打包 key

手动党请参考这篇文章[4],小波采用的是去 Dcloud 开发者[5]中心生成,具体步骤如下

  1. 点击我的应用 –> 应用名称

    应用名称
  2. 跳到应用信息页面,再切换tab选项卡 android 云端证书 –> 创建证书 –> 下载证书

    android 云端证书

    注意

    证书详情 –> 弹框里点击 查看证书密码

  3. 切到 各平台信息 –> 新增 –> 填入相关信息并提交

    填入相关信息并提交

    注意

    1. 包名格式为xxx.xxx.xxx,这个必须和后面配置 android 离线 sdk 工程中的 build.gradle 修改值一致
    2. android 应用…信息都在 证书详情 里查看
  4. 选项卡里会新增一条信息,点击 离线打包key 字段的 查看

     离线打包key1

     离线打包key2


这里获得的信息和证书都是为后面配置 android 离线 sdk 工程所需

第六步:HBuildX 本地打包App 资源

选中项目 –> 发行 –> 原生APP本地打包 –> 生成本地打包APP资源

HBuildX 本地打包App 资源

提示

终端偶尔会出现无法打包的提示,关了 HBulidX 再重新打包,还不行就重启下电脑,小波暂时也无法定位具体原因,通常在用 android studio 打包后再改了代码重新打包容易重现。

第七步:配置 android 离线 sdk 工程

  1. 解压后的 android 离线 sdk 压缩包把 HBuilder-Integrate-AS 整个文件夹作为项目包剪切出来,可以放到和你 uni-app 源码项目同级目录(注意整个项目路径不能有中文哈);

  2. 再把 HBuilder-Integrate-AS/simpleDemo/src/main/assets/apps 里的内容删除

  3. 再把 第六步 本地打包APP资源中 UNIxxx 文件夹剪切到上面路径 .../apps

  4. 然后把 HBuilder-Integrate-AS 文件夹导入 android studio 中

    HBuilder-Integrate-AS
  5. 更改3个配置文件

    文件:HBuilder-Integrate-AS/simpleDemo/src/assets/dada/dcloud_control.xml

    dcloud_control.xml

    值就是 uni-app 源码项目中 manifest.json"appid"

    1
    <app appid="__UNI__xxxx" appver=""/>

    文件:HBuilder-Integrate-AS/simpleDemo/src/build.gradle

    build.gradle

    applicationId 值就是第五步 –> 各平台信息新增弹框中 –> 包名

    versionCode、versionName 每次打包记得改一下,反正比前一次大就行

    1
    2
    3
    4
    5
    defaultConfig {
    applicationId "com.uniapp.nianzhu"
    versionCode 104
    versionName "1.0.4"
    }

    keyAlias 同上面,值就是 uni-app 源码项目中 manifest.json"appid"

    keyPasswordstorePassword 第五步 –> 证书详情弹框 –> 查看证书密码

    storeFile file 下载下来证书的名字

    1
    2
    3
    4
    5
    6
    7
    8
    signingConfigs {
    config {
    keyAlias '__UNI__xxxx'
    keyPassword '证书密码'
    storeFile file('证书名称.keystore')
    storePassword '证书密码'
    }
    }

    文件:HBuilder-Integrate-AS/simpleDemo/src/main/AndroidManifest.xml

    AndroidManifest.xml

    package 同前面的 applicationId 一致

    android:icon 替换这个路径src/main/res/drawable/icon.png 考虑兼容,还要多几个其他尺寸的哈,例如:“72x72”,“96x96”,“144x144”,“192x192” 等

    android:label 修改 src/main/res/values/strings.xml

    android:value 值是第五步获得的离线打包key

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.uniapp.nianzhu">
    ...
    <application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    ...
    <meta-data
    android:name="dcloud_appkey"
    android:value="6666xxxx" />
    </application>
    </manifest>
  6. 把下载下来的证书放到 simpleDemo 的目录下

    simpleDemo

    证书名随你,可改可不改,storeFile file('证书名称.keystore') 必须一致就行

第八步:配置 android studio 打包

  1. 点击 file –> sync project with gradle files

    如果没有装jdk或者没有配置jdk本地路径会报错无法找到jdk

    1. 点击 file –> project structure –> sdk location,修改 JDK loction 为你本地安装目录

      JDK loction

    2. 再点击 file –> setting –> Appearance & Behavior –> System Settings –> Android SDK,复制右侧的 Android SDK Location 的值

      Android SDK Location

    3. 到系统设置环境变量的地方,系统变量中新建 ANDROID_HOME:Android SDK Location 值

      ANDROID_HOME
    4. 再把 path 变量值追加4个 %ANDROID_HOME%\platform-tools%ANDROID_HOME%\emulator%ANDROID_HOME%\tools%ANDROID_HOME%\tools\bin

      path
    5. 最后再重启下 android studio 软件

  2. 再次执行 file –> sync project with gradle files 会报错如下代码

    1
    Failed to find Build Tools revision 30.0.3

    SDK Tools

    1. 点击 file –> setting –> Appearance & Behavior –> System Settings –> Android SDK

    2. 再点击右侧 SDK Tools 选项卡,然后再勾选 右下角 Show Package Details,就能看到各种版本,提示装哪个就勾选后点击 Apply

    如果还报错如下代码

    1
    Failed to find Platform SDK with path: platforms;android-30

    SDK Platorms

    1. 切到第一个 SDK Platorms 选项卡,提示装哪个就勾选哪个,然后点击 Apply
  3. 再次执行 file –> sync project with gradle files,成功的话我们就可以开始最后的打包工作了

    点击 build –> generate Signed Bundle /apk

    generate Signed Bundle /apk1 generate Signed Bundle /apk2

    key store path :选择一下项目中的证书文件

    key store password 、 key password : 证书密码

    key alias:uni-app 的 id = __UNI__xxxx

    generate Signed Bundle /apk3 generate Signed Bundle /apk4

😫uniApp工程化项目打包安卓APP小波遇见的一些问题

报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Unable to start the daemon process.
This problem might be caused by incorrect configuration of the daemon.
For example, an unrecognized jvm option is used.
Please refer to the User Manual chapter on the daemon at https://docs.gradle.org/6.5/userguide/gradle_daemon.html
Process command line: C:\Program Files (x86)\Java\jdk1.8.0_73\bin\java.exe -Xmx1536m -Dfile.encoding=GBK -Duser.country=CN -Duser.language=zh -Duser.variant -cp C:\Users\ganxb\.gradle\wrapper\dists\gradle-6.5-bin\6nifqtx7604sqp1q6g8wikw7p\gradle-6.5\lib\gradle-launcher-6.5.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 6.5
Please read the following process output to find out more:
-----------------------
Error occurred during initialization of VM
Could not reserve enough space for 1572864KB object heap

-----------------------
Check the JVM arguments defined for the gradle process in:
- gradle.properties in project root directory
- gradle.properties in in GRADLE_USER_HOME directory

解决方案:

  1. 这个错误是编译时出现的错误,你将安装C盘的 C:\Users\x.gradle 目录删除掉,不要担心删除会有什么问题。大胆的删!在清理下,它就会自动生成,问题解决.。

    当然,试图编译或运行,都是不成功的。
    经google发现,原来android studio是通过gradle对项目配置的,而系统中没有对android studio 的默认配置,就像Eclipse中的eclipse.ini文件。

    再回到 C:\Users\x.gradle,建个文本把名字改成 gradle.properties,然后在里面写入 org.gradle.jvmargs=-Xmx512m

  2. 新建系统变量
    变量名 _JAVA_OPTIONS
    变量值 -Djava.net.preferIPv4Stack=true
    网上的方法 修改或者配置gradle文件没有成功解决的 可以试试这个方法!

小波是用的1,2需要自己试试哦…小波未测试,可参考这篇文章[12]


报错

1
2
3
4
5
6
7
Execution failed for task ':simpleDemo:packageDebug'.
> A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable
> java.lang.OutOfMemoryError (no error message)


Execution failed for task ':simpleDemo:checkReleaseAarMetadata'.
> unable to create new native thread

解决方案:

  1. 把之前打包记录删了重新打包

  2. 重启电脑可以解决

  3. clean、build之后解决 (小波采用的方案,点击 build –> clean project,再重新打包)


😊来自小波的bilibili视频教程


🙂uniApp工程化项目离线打包安卓APP用到的相关参考资料链接

关注廿壴(GANXB2)微信公众号

『旅行者』,帮小波关注一波公众号吧。

小波需要100位关注者才能申请红包封面设计资格,万分感谢!

关注后可微信小波,前66的童鞋可以申请专属红包封面设计。

THE END
作者
chopin gump chopin gump
小尾巴
Stay Hungry, Stay Foolish「求知若饥, 虚心若愚」 — 廿壴(GANXB2)
许可协议
uni-app多端小程序cli工程项目如何离线打包成安卓APP
https://blog.ganxb2.com/25075.html
微信

微信

支付宝

支付宝

- ( ゜- ゜)つロ 填写QQ邮箱自动获取头像亦更快获得回复通知
评论区显示“刷新”,多点几下或过会儿再来康康 _(≧∇≦」∠)_