白话 uniapp 离线打包(Android)

使用 HBuilderX 前期可以很方便的开发调试功能模块,但到了打包这个步骤就犯愁;
作为学习或预研框架使用云打包,有次数和云打包等待耗时的情况
官网的离线打包文档,看着又有些不知所措
那么接下来,梳理一道 uniapp 离线打包思路,看能否顺利通关

前置环境条件

在开始前,请确保已安装

离线打包步骤概览

  • HBuilderX 生成本地打包app资源
  • uniapp 所须的离线SDK下载
  • AS(Android Studio) 导入 HBuilderX 生成本地打包app资源
  • AS 配置 build.gradle 文件
  • AS 配置 AndroidManifest.xml 文件

HBuilderX 相关

1、新建uniapp项目,此处项目名为 demo,使用的默认模板
新建项目 demo
2、选中demo项目,生成本地打包App资源
生成本地打包App资源
导出信息
3、新建一个文件夹,将导出的文件放入其中,以便后续操作
整理资源1

至此,HBuilderX 相关操作结束

uniapp 所须的离线SDK下载

1、根据 HBuilderX 的版本下载所须的离线SDK,如当前我的 HBuilderX 版本 是 2.7.14.20200618,须下载 2020年06月19日发布 的SDK
匹配版本
2.1、将下载解压后文件夹下 SDK ==> assets ==> data 目录拷贝至 上一步新建的demo-resource目录
拷贝data文件夹
2.2、修改 demo-resource ==> data文件夹里的 dcloud_control.xml文件,将appid修改为项目本身的appid
修改appid
3、将下载解压后文件夹下 SDK ==> libs 目录下
  • lib.5plus.base-release.aar
  • android-gif-drawable-release@1.2.17.aar
  • uniapp-release.aar
  • miit_mdid_1.0.10.aar
    四个文件拷贝至上一步新建的demo-resource目录
    拷贝所须SDK

至此,uniapp 所须的离线SDK下载相关操作结束

Android Studio 操作

1、新建 No Activity 项目
新建no activity 项目
android项目基本信息
2、调整视图,将默认的 Android 调整为 Project,方便目录游览操作
调整视图
3、修改项目根目录下的 build.gradle文件,将仓库地址修改为国内镜像,加快后续下载速度
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    
    repositories {
        //将
        google()
        //替换为
        maven { url 'https://maven.aliyun.com/repository/google' }
        
        //将
        jcenter()
        //替换为
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.1'
        

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        //将
        google()
        //替换为
        maven { url 'https://maven.aliyun.com/repository/google' }
        
        //将
        jcenter()
        //替换为
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

修改仓库镜像地址
4、app ==> src ==> main 目录下新增 assets 目录
5、app ==> src ==> main ==> assets 目录下新增 apps; 注意是 apps 不是 app
6、将之前生成本地打包app资源 放到 app ==> src ==> main ==> assets ==> apps 目录下; 可从之前我们保存的 demo-resource 临时文件夹里直接获取
7、将临时文件夹 demo-resource 里的 data 文件拷贝到 app ==> src ==> main ==> assets 目录下
8、将临时文件夹 demo-resource 里的 android-gif-drawable-release@1.2.17.aar lib.5plus.base-release.aar miit_mdid_1.0.10.aar uniapp-release.aar 四个文件拷贝至 app ==> libs 目录下
导入资源最终目录效果图
9、修改 app 目录下 build.gradle 文件
  • 9.1 修改 android 配置节点,在其下,新增配置节点
aaptOptions {  
  additionalParameters '--auto-add-overlay'  
  ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"  
}
  • 9.2 修改 dependencies配置节点,在其下,新增配置
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
implementation "com.android.support:support-v4:28.0.0"
implementation "com.android.support:appcompat-v7:28.0.0"
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.facebook.fresco:fresco:1.13.0'
implementation "com.facebook.fresco:animated-gif:1.13.0"
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.alibaba:fastjson:1.1.46.android'

增加应用配置
10、修改 app ==> src ==> main ==> AndroidManifest.xml 文件,新增节点
  <activity
      android:name="io.dcloud.PandoraEntry"
      android:configChanges="orientation|keyboardHidden|keyboard|navigation"
      android:label="@string/app_name"
      android:launchMode="singleTask"
      android:hardwareAccelerated="true"
      android:theme="@style/TranslucentTheme"
      android:screenOrientation="user"
      android:windowSoftInputMode="adjustResize" >
      <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
  </activity>
  <activity
      android:name="io.dcloud.PandoraEntryActivity"
      android:launchMode="singleTask"
      android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale|keyboard"
      android:hardwareAccelerated="true"
      android:permission="com.miui.securitycenter.permission.AppPermissionsEditor"
      android:screenOrientation="user"
      android:theme="@style/DCloudTheme"
      android:windowSoftInputMode="adjustResize">
      <intent-filter>
          <category android:name="android.intent.category.DEFAULT" />
          <category android:name="android.intent.category.BROWSABLE" />
          <action android:name="android.intent.action.VIEW" />
          <data android:scheme="h56131bcf" />
      </intent-filter>
  </activity>
AndroidManifest新增节点配置

至此,项目相关的配置已经结束。注意 如果涉及到权限(调用摄像头等),需要在AndroidManifest.xml中进行配置,文本未涉及。
接下来,我们走下程序,看是否能顺利跑起来,此处我用的是模拟器测试 (模拟器的设置里需要打开 允许ADB连接)

运行测试

离线打包

1、AS(Android Studio) 菜单栏选择 build ==> Generate Signed Bundle /APK

离线打包1

2、选择APK,点击next

离线打包2

3、打包需要签名,点击Create new

离线打包3

4、设置 jks文件名,及其保存位置(此处我保存的位置是在桌面)

离线打包4

5、填写密码和确定密码,因为是演示,我把密码设置为 123456。

下面First and Last Name为名字和姓氏
Organizational Unit为组织单位
Organization 为组织
City or Locality为城市或地区
State or Province为州或者省份
Country Code(XX)为国家
至少选填一种,这里我直接填上国家China。


离线打包5

6、回到签名界面,已默认填好,Next即可

离线打包6

7、选择 release后,同时勾选V1 V2,点击finish,完成打包

V1和V2的选择问题,V1属于旧的验证方式,V2是在安卓版本7.0之后新的验证方式,只勾选V1在Android7.0以上不会使用更安全的验证方式,如果只勾选V2那么安卓版本7.0以下的手机将无法正常安装,所以建议V1和V2同时勾选。

debug和release,一个是测试版一个是正式版,这里我直接选择release


离线打包7

8、安装打包好的apk,收获离线打包成功的喜悦

离线打包8
离线打包成功运行

至此,离线打包完结。

回顾总结

  • 请确保 HBuilderX 生成本地打包app资源中,manifest.json 文件里 appid 属性有值
  • 请确保 dcloud_control.xml 文件中 appidmanifest.jsonappid 一致
  • AS项目里 app ==> src ==> main ==> assets 目录下新增是 apps; 注意是 apps 不是 app
  • 本文暂时并未涉及权限调用,如有涉及需要配置 AndroidManifest.xml

搞定收工,希望你也顺利的完成了离线打包。

参考文档

1、官方文档
2、网友文献

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350