uniapp离线打包
# 获取离线打包sha1、sha256、md5方法
首先你得先安装JRE环境(安装Android Studio的时候也得安装JDK,同时就有安装JRE了)
随便进入一个磁盘,这里我是在C盘操作的,执行cmd进入命令行
使用keytool -genkey命令生成证书:
keytool -genkey -alias [alias_name] -keyalg RSA -keysize 2048 -validity 36500 -keystore [alias_name].keystore
接着填写对应信息,确认是否正确时按Y生成一个签名文件,如下:
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: Lie
您的组织单位名称是什么?
[Unknown]: Lie
您的组织名称是什么?
[Unknown]: Lie
您所在的城市或区域名称是什么?
[Unknown]: Lie
您所在的省/市/自治区名称是什么?
[Unknown]: Lie
该单位的双字母国家/地区代码是什么?
[Unknown]: Lie
CN=Lie, OU=Lie, O=Lie, L=Lie, ST=Lie, C=Lie是否正确?
[否]: Y
输入 <uniapp-template> 的密钥口令
(如果和密钥库口令相同, 按回车):
再次输入新口令:
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore uniapp-template.keystore -destkeystore uniapp-template.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
接着获取sha1和sha256
keytool -list -v -keystore [alias_name].keystore
获得MD5:
keytool -exportcert -keystore [alias_name].keystore | openssl dgst -md5
# Dcloud平台申请
接着在Dcloud创建 Android ID,登录 Dcloud 后台,进入应用列表 (dcloud.net.cn)
路径如下:应用管理
- 我的应用
,点击右上角创建应用
,应用类型选择uni-app
,填写名称点击创建即可在列表中看到刚刚创建的一项,然后在列表中点击蓝色的应用名称进入配置。
接着在应用管理
- 我的应用
的应用列表找到刚创建的应用,点击 应用名称
进入 应用信息
。
接着在各平台信息
的Tab点击新增
按钮填写信息,主要信息有:
- 包名:
com.android.test
- sha1:
xxxxx
- sha256:
xxxxx
- MD5:
xxxxx
填写好信息后提交。
接着在刚新建条目上找到离线打包Key
点击 创建
生成离线key offline_key
。
Dcloud平台信息申请成功后,接着来搞离线打包的事情了。
# 离线打包步骤
使用HBuildX安装操作
发行
-原生App-本地打包(L)
-生成本地打包App资源(R)
取得需要离线打包源代码,格式一般为:__UNI__5ABA3EB
,下面统称为__UNI__APPNAME
准备uniapp官方提供的 SDK包
将 uniapp 官方提供的 SDK 压缩包解压,并将其中的 【HBuilder-Integrate-AS】
导入 Android Studio
,导入后将 Android 目录更改为 Projects 目录,更直观些。
将
【HBuilder-Integrate-AS】
路径HBuilder-Integrate-AS -> simpleDemo -> src -> main -> assets -> apps
里面的__UNI__A
替换为前面准备的离线资源__UNI__APPNAME
。修改
\HBuilder-Integrate-AS\simpleDemo\src\main\assets\data\dcloud_control.xml
文件中的appid为自己项目的ID__UNI__APPNAME
修改
\HBuilder-Integrate-AS\simpleDemo\src\main\AndroidManifest.xml
文件中的包名为刚刚创建离线打包Key
中填入的包名,以及底下的meta-data标签dcloud_appkey的value值为上面生成的Android ID__UNI__APPNAME
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="需要填写的包名,如:com.android.test">
<application
android:allowBackup="true"
android:allowClearUserData="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true">
<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|smallestScreenSize|screenLayout|screenSize|uiMode"
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=" " />
</intent-filter>
</activity>
<meta-data
android:name="dcloud_appkey"
android:value="需要填写的离线打包key,如:offline_key" />
</application>
</manifest>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
将自己项目中的密钥文件复制到simpleDemo目录下,如
uniapp-template.keystore
;也可以使用Android Studio重新创建密钥,操作路径:Build>Generate Signed Bundle or APK>Next>Create new
修改项目
\HBuilder-Integrate-AS\simpleDemo\build.gradle
中密钥配置为自己的刚刚生成的密钥内容,注意目录层级,外层还有一个同名build.gradle文件;然后将【applicationId】也改为自己的包名
apply plugin: 'com.android.application'
android {
compileSdkVersion 30
buildToolsVersion '30.0.3'
defaultConfig {
applicationId "需要填写的包名,如:com.android.uniappTemplate"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
multiDexEnabled true
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
signingConfigs {
config {
keyAlias '需要填写的密钥alias,如:uniapp-template'
keyPassword '需要填写的密钥,如:123456'
storeFile file('需要填写的密钥文件名称,如:uniapp-template.keystore')
storePassword '需要填写的密钥,如:123456'
v1SigningEnabled true
v2SigningEnabled true
}
}
buildTypes {
debug {
signingConfig signingConfigs.config
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
release {
signingConfig signingConfigs.config
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
aaptOptions {
additionalParameters '--auto-add-overlay'
ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
implementation 'androidx.core:core:1.1.0'
implementation "androidx.fragment:fragment:1.1.0"
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'com.facebook.fresco:fresco:2.5.0'
implementation "com.facebook.fresco:animated-gif:2.5.0"
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.alibaba:fastjson:1.2.83'
implementation 'androidx.webkit:webkit:1.3.0'
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
这个时候会发现控制台下方是爆红的,而且打包功能区【Build】下几乎都是灰色的,接下来就该改一下【JDK】和【Gradle】的版本了,点击左上角的【File】-【Settings】将【Gradle JDK】更改为【1.8】的版本然后保存;同样点击左上角【File】-【Project Structure...】将【Gradle Version】更改为【6.5】然后保存,等待项目重新加载【Gradle】,最后关闭 Android Studio 重新打开。
点击右上角的运行按钮,等待项目运行,结果便是成功啦~
点击功能区【Build】-【Generate Signed Bundle/APK...】选择【APK】-【Next】,填入刚刚生成的【密钥内容】(这里也可以生成新的,但是需要更改项目原本的,确实没必要哈哈哈),点击【Next】选择
测试版还是发布版
然后【Create】等待打包生成,结果便是成功啦~最后附上打包生成的APK目录
等待Android studio 生成android包,生成资源目录为build
- 补充一个可以将uniapp项目直接运行至Android Studio模拟器的方法,而且还支持修改代码后自动重载以及控制台打印报错信息等。
首先点击运行至 Android App 基座,第一次会下载相关插件,等待下载完成自动安装
然后打开Android Studio,关闭原有的项目,然后根据下图进入VDM管理器
会发现列表中已经有一个虚拟机了,点击小三角即可运行起来
然后再一次点击运行至Android App 基座,点击运行,下方就会出现一个控制台,显示项目已经启动
但是此时虚拟机一直显示【同步手机端程序文件完成】不动,足以说明翻车了,但还不完全翻哈哈哈,这就涉及到现在的 HbuilderX 版本比较新,而 Android Studio 的默认虚拟机版本略旧,这时候就得重新安装一个新的,看下一步
重新回到【虚拟机列表】中,先点击右边的【暂停】按钮关闭虚拟机,然后点击左上角的【Create Device】创建虚拟机,这里我选择了【Pixel 7】pro也行,反正算是最新的,然后点击【Clone Device】,然后是【Finish】,再是 【Next】,接下来我选择的是【安卓11】也就是代号为R的安卓版本,第一次需要先点击右边的【下载】按钮进行下载,下载完成之后再到这里点击【Next】,最后【Finish】即可在列表中找到刚刚创建的新的虚拟机了
运行刚刚创建的新虚拟机,首次运行会比较慢,因为要下载很多东西,且需要开机(很像你买的新手机),再次点击运行项目至 Android App 基建,如果显示找不到【Android 设备】,就点击弹窗左上角的刷新,过一会就会刷出来了,然后点击【运行】,这时候就可以成功运行至新的虚拟机了,大功告成~~