使用 HBuilderX 前期可以很方便的开发调试功能模块,但到了打包这个步骤就犯愁;
作为学习或预研框架使用云打包,有次数和云打包等待耗时的情况
官网的离线打包文档,看着又有些不知所措
那么接下来,梳理一道 uniapp 离线打包思路,看能否顺利通关
前置环境条件
在开始前,请确保已安装
- Android Studio 下载地址:Android Studio官网 OR Android Studio中文社区
- HBuilderX
离线打包步骤概览
- HBuilderX 生成本地打包app资源
- uniapp 所须的离线SDK下载
- AS(Android Studio) 导入 HBuilderX 生成本地打包app资源
- AS 配置 build.gradle 文件
- AS 配置 AndroidManifest.xml 文件
HBuilderX 相关
1、新建uniapp项目,此处项目名为 demo,使用的默认模板
2、选中demo项目,生成本地打包App资源
3、新建一个文件夹,将导出的文件放入其中,以便后续操作
至此,HBuilderX 相关操作结束
uniapp 所须的离线SDK下载
1、根据 HBuilderX 的版本下载所须的离线SDK,如当前我的 HBuilderX 版本 是 2.7.14.20200618
,须下载 2020年06月19日发布
的SDK
2.1、将下载解压后文件夹下 SDK ==> assets ==> data 目录拷贝至 上一步新建的demo-resource
目录
2.2、修改 demo-resource ==> data文件夹里的 dcloud_control.xml
文件,将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
目录
至此,uniapp 所须的离线SDK下载相关操作结束
Android Studio 操作
1、新建 No Activity 项目
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.xml中进行配置,文本未涉及。
接下来,我们走下程序,看是否能顺利跑起来,此处我用的是模拟器测试 (模拟器的设置里需要打开 允许ADB连接)
离线打包
1、AS(Android Studio) 菜单栏选择 build ==> Generate Signed Bundle /APK
2、选择APK,点击next
3、打包需要签名,点击Create new
4、设置 jks文件名,及其保存位置(此处我保存的位置是在桌面)
5、填写密码和确定密码,因为是演示,我把密码设置为 123456。
下面First and Last Name为名字和姓氏
Organizational Unit为组织单位
Organization 为组织
City or Locality为城市或地区
State or Province为州或者省份
Country Code(XX)为国家
至少选填一种,这里我直接填上国家China。
6、回到签名界面,已默认填好,Next即可
7、选择 release后,同时勾选V1 V2,点击finish,完成打包
V1和V2的选择问题,V1属于旧的验证方式,V2是在安卓版本7.0之后新的验证方式,只勾选V1在Android7.0以上不会使用更安全的验证方式,如果只勾选V2那么安卓版本7.0以下的手机将无法正常安装,所以建议V1和V2同时勾选。
debug和release,一个是测试版一个是正式版,这里我直接选择release
8、安装打包好的apk,收获离线打包成功的喜悦
至此,离线打包完结。
回顾总结
- 请确保 HBuilderX 生成本地打包app资源中,manifest.json 文件里 appid 属性有值
- 请确保 dcloud_control.xml 文件中 appid 与 manifest.json 中 appid 一致
- AS项目里 app ==> src ==> main ==> assets 目录下新增是 apps; 注意是 apps 不是 app
- 本文暂时并未涉及权限调用,如有涉及需要配置 AndroidManifest.xml
搞定收工,希望你也顺利的完成了离线打包。