1
1
2
- > 注:当前项目为 Serverless Devs 应用,由于应用中会存在需要初始化才可运行的变量(例如应用部署地区、函数名等等),所以** 不推荐** 直接 Clone 本仓库到本地进行部署或直接复制 s.yaml 使用,** 强烈推荐** 通过 ` s init --project ${模版名称} ` 的方法或应用中心进行初始化,详情可参考[ 部署 & 体验] ( #部署--体验 ) 。
2
+ > 注:当前项目为 Serverless Devs 应用,由于应用中会存在需要初始化才可运行的变量(例如应用部署地区、函数名等等),所以** 不推荐** 直接 Clone 本仓库到本地进行部署或直接复制 s.yaml 使用,** 强烈推荐** 通过 ` s init ${模版名称} ` 的方法或应用中心进行初始化,详情可参考[ 部署 & 体验] ( #部署--体验 ) 。
3
3
4
4
# start-repack-apk-v3 帮助文档
5
5
<p align =" center " class =" flex justify-center " >
34
34
35
35
## 前期准备
36
36
37
- 使用该项目,您需要有开通以下服务 :
37
+ 使用该项目,您需要有开通以下服务并拥有对应权限 :
38
38
39
39
<service >
40
40
41
41
42
42
43
- | 服务 | 备注 |
44
- | --- | --- |
45
- | 函数计算 FC | 实时 apk 渠道分包函数需要部署到函数计算 |
46
- | 文件存储 NAS | 需要有 NAS 文件系统为函数执行环境提供持久化 |
47
- | 专有网络 VPC | NAS 文件系统挂载点依赖 VPC |
43
+ | 服务/业务 | 权限 | 相关文档 |
44
+ | --- | --- | --- |
45
+ | 函数计算 | AliyunFCFullAccess | [ 帮助文档 ] ( https://help.aliyun.com/product/2508973.html ) [ 计费文档 ] ( https://help.aliyun.com/document_detail/2512928.html ) |
46
+ | 硬盘挂载 | AliyunFCServerlessDevsRolePolicy | [ 帮助文档 ] ( https://help.aliyun.com/zh/nas ) [ 计费文档 ] ( https://help.aliyun.com/zh/nas/product-overview/billing ) |
47
+ | 专有网络 | AliyunFCServerlessDevsRolePolicy | [ 帮助文档 ] ( https://help.aliyun.com/zh/vpc ) [ 计费文档 ] ( https://help.aliyun.com/zh/vpc/product-overview/billing ) |
48
48
49
49
</service >
50
50
51
- 推荐您拥有以下的产品权限 / 策略:
52
- <auth >
53
-
54
-
55
-
56
- | 服务/业务 | 权限 | 备注 |
57
- | --- | --- | --- |
58
- | 函数计算 | AliyunFCFullAccess | 实时 apk 渠道分包函数需要部署到函数计算 |
59
- | 硬盘挂载 | AliyunNASFullAccess | 需要有 NAS 文件系统为函数执行环境提供持久化 |
60
- | 专有网络 | AliyunVPCFullAccess | NAS 文件系统挂载点依赖 VPC |
61
- | 其它 | AliyunECSFullAccess | 函数计算访问 VPC 还需要一个安全组 |
62
-
63
- </auth >
64
-
65
51
<remark >
66
52
67
53
86
72
87
73
- 通过 [ Serverless Devs Cli] ( https://www.serverless-devs.com/serverless-devs/install ) 进行部署:
88
74
- [ 安装 Serverless Devs Cli 开发者工具] ( https://www.serverless-devs.com/serverless-devs/install ) ,并进行[ 授权信息配置] ( https://docs.serverless-devs.com/fc/config ) ;
89
- - 初始化项目:` s init --project start-repack-apk-v3 -d start-repack-apk-v3 `
75
+ - 初始化项目:` s init start-repack-apk-v3 -d start-repack-apk-v3 `
90
76
- 进入项目,并进行项目部署:` cd start-repack-apk-v3 && s deploy -y `
91
77
92
78
</deploy >
93
79
94
- ## 应用详情
80
+ ## 案例介绍
95
81
96
82
<appdetail id =" flushContent " >
97
83
98
- ## Serverless 实现实时 apk 渠道分包
84
+ 基于本案例, 您可以快捷部署生成一个弹性高可用的 “ Serverless 实现实时 apk 渠道分包“ 服务。
99
85
100
- 游戏分发平台的游戏 APK 包需要根据实时请求中的的参数获取指定的渠道号,并将渠道号写入 APK 文件固定位置, 如果每天有大量且不同渠道的下载请求, 能** 实时** 让用户** 断点下载** 指定渠道的 apk 游戏包
101
86
102
- 应用原理图如下:
87
+ 随着移动游戏市场的多元化,游戏开发商和发行商需针对不同渠道分发定制化的游戏版本,针对此类需求,该方案适用于大规模、多渠道的游戏分发场景,特别是在面临频繁且多变的下载请求时, 用户能够通过系统实时地获取并下载包含定制渠道号的游戏 APK 包,同时享受断点续传的下载体验,确保即使在连接不稳定的情况下也能顺利完成游戏的获取,该方案已被多家游戏公司采纳,。
103
88
104
89
![ ] ( https://img.alicdn.com/imgextra/i2/O1CN019seP901UxWBt9D8h7_!!6000000002584-2-tps-2120-668.png )
105
90
106
- ## CDN 配置
107
91
108
- 本应用部署后端函数,部署成功后, 您会获取一个 访问域名的 url, 比如为 ` https://get-apk-apk-repack-evbilghzjb.cn-hangzhou.fcapp.run `
92
+ 如上图所示,游戏 APK 包需要根据实时请求中的的参数获取指定的渠道号,并将渠道号写入 APK 文件固定位置, 如果每天有大量且不同渠道的下载请求, 能** 实时** 让用户** 断点下载** 指定渠道的 apk 游戏包。
93
+
94
+ </appdetail >
95
+
96
+ ## 使用流程
97
+
98
+ <usedetail id =" flushContent " >
99
+
100
+ ### CDN 配置
101
+
102
+ 本应用部署成功后, 您会获取一个 访问域名的 url, 比如为 ` https://get-apk-apk-repack-evbilghzjb.cn-hangzhou.fcapp.run `
109
103
110
104
之后登录 [ CDN 控制台] ( https://cdn.console.aliyun.com/ ) 完成配置:
111
105
112
- ### 添加域名
106
+ #### 1. 添加域名
113
107
114
108
比如您有一个名为 ` functioncompute.com ` 的域名, 如下图所示, 我添加了 ` apk-cdn.functioncompute.com ` , 源站的域名为前面应用部署的访问域名 url(_ 注意是 host,不用填写前面的 https://_ ), 比如本示例为 ` get-apk-apk-repack-evbilghzjb.cn-hangzhou.fcapp.run `
115
109
116
110
> 其中前缀 apk-cdn 可以随便, 由您这边自己想最后暴露出去的 url 决定
117
111
118
112
![ ] ( https://img.alicdn.com/imgextra/i2/O1CN01KX6FhL1sjp9I1US8M_!!6000000005803-2-tps-1372-840.png )
119
113
120
- ### 域名管理
114
+ #### 2. 域名管理
121
115
122
- #### 1. 根据控制台引导, 完成域名的 CNAME 解析
116
+ ##### 2. 1. 根据控制台引导, 完成域名的 CNAME 解析
123
117
124
118
![ ] ( https://img.alicdn.com/imgextra/i4/O1CN01tmlyC222ln0TTrFt1_!!6000000007161-2-tps-956-1372.png )
125
119
126
120
![ ] ( https://img.alicdn.com/imgextra/i1/O1CN01htbiOc1DZNsDqDC9C_!!6000000000230-2-tps-2348-670.png )
127
121
128
122
![ ] ( https://img.alicdn.com/imgextra/i4/O1CN01vKUcG21RGWBEd8eBT_!!6000000002084-2-tps-2586-244.png )
129
123
130
- #### 2. 完成管理配置, 主要完成回源配置的域名和开启 Range 回源强制
124
+ ##### 2. 2. 完成管理配置, 主要完成回源配置的域名和开启 Range 回源强制
131
125
132
126
![ ] ( https://img.alicdn.com/imgextra/i4/O1CN01d9cRsx23rZckwYqmF_!!6000000007309-2-tps-2646-716.png )
133
127
134
128
> 域名应用部署成功后返回的访问域名 url 的 host, 比如本示例为 ` get-apk-apk-repack-evbilghzjb.cn-hangzhou.fcapp.run `
135
129
136
130
![ ] ( https://img.alicdn.com/imgextra/i3/O1CN01W8rPnG1R1rVDcK7TN_!!6000000002052-2-tps-2612-854.png )
137
131
138
- #### 使用浏览器断点下载指定渠道 apk 包
132
+ #### 3. 使用浏览器断点下载指定渠道 apk 包
139
133
140
134
比如:
141
135
149
143
- ` src=fc-imm-demo/test-apk/qq.apk ` 表示处理的母包, 其中 fc-imm-demo 为 bucket(和函数在同一个 region), test-apk/qq.apk 为 object
150
144
- ` cid=xiaomi ` 表示渠道为 xiaomi, 这个可以自定义
151
145
152
- ** Tips**
146
+ ### Tips
153
147
154
148
- 用户在自己程序中获取渠道信息, 只需要读取 apk 包中 ` assets/dap.properties ` 文件中的内容即可
155
149
156
150
- 换用自己的证书, 只需要换掉 target/cert 下面的文件即可:
157
151
> jarsigner 将 .keystore 文件作为 RSA 密钥的来源,要将其转换为 golang 可识别的 .pem,我们需要以下几行:
152
+
158
153
``` bash
159
154
# key store
160
155
$ keytool -genkey -keystore test.keystore -alias test -keyalg RSA -validity 10000
170
165
$ openssl pkcs12 -in test.p12 -nokeys -out test-cert.pem
171
166
```
172
167
173
- ## 本地调试
168
+ ### 二次开发
169
+
170
+ #### 本地调试
174
171
175
172
1 . 将测试证书放置在如下位置
176
173
@@ -189,7 +186,7 @@ $ RUN_LOCAL=true OSS_ENDPOINT=http://oss-cn-qingdao.aliyuncs.com SOURCE_OBJECT=t
189
186
190
187
> 注意将相关 ENV 设置您自己的值即可
191
188
192
- ## 打包原理
189
+ #### 打包原理
193
190
194
191
对于一个原始的 apk 文件,将一个新文件添加到存档中,然后对 apk 重新签名获取新的 apk 文件。等价于以下命令相同的效果:
195
192
@@ -217,12 +214,12 @@ $ jarsigner -keystore test.keystore -signedjar new.apk new-unsigned.apk 'test'
217
214
218
215
![ ] ( https://img.alicdn.com/imgextra/i4/O1CN01ARFir41xyXwDIpAng_!!6000000006512-2-tps-711-463.png )
219
216
220
- </appdetail >
217
+ </usedetail >
221
218
222
- ## 使用文档
219
+ ## 注意事项
223
220
224
- <usedetail id =" flushContent " >
225
- </usedetail >
221
+ <matters id =" flushContent " >
222
+ </matters >
226
223
227
224
228
225
<devgroup >
0 commit comments