Skip to content

Commit b60270c

Browse files
committed
fix: role
1 parent 62d65fd commit b60270c

4 files changed

Lines changed: 264 additions & 22 deletions

File tree

publish.yaml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Edition: 3.0.0
22
Type: Project
33
Name: start-repack-apk-v3
4-
Version: 0.0.3
4+
Version: 0.0.4
55
Provider:
66
- 阿里云
77
Description: 基于 CDN + Custom 运行时实现 apk 实时打渠道包
@@ -64,3 +64,15 @@ Parameters:
6464
default: get-apk-${default-suffix}
6565
pattern: "^[a-zA-Z_][a-zA-Z0-9-_]{0,127}$"
6666
description: 应用的函数名称, 只能包含字母、数字、下划线和中划线。不能以数字、中划线开头。长度在 1-128 之间
67+
68+
roleArn:
69+
title: RAM角色ARN
70+
type: string
71+
default: ""
72+
description: "函数计算访问对象存储OSS服务时使用的函数角色"
73+
required: true
74+
x-role:
75+
name: aliyunfcdefaultrole
76+
service: fc
77+
authorities:
78+
- AliyunOSSFullAccess

readme.md

Lines changed: 233 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,233 @@
1-
src/README.md
1+
2+
> 注:当前项目为 Serverless Devs 应用,由于应用中会存在需要初始化才可运行的变量(例如应用部署地区、函数名等等),所以**不推荐**直接 Clone 本仓库到本地进行部署或直接复制 s.yaml 使用,**强烈推荐**通过 `s init ${模版名称}` 的方法或应用中心进行初始化,详情可参考[部署 & 体验](#部署--体验)
3+
4+
# start-repack-apk-v3 帮助文档
5+
6+
<description>
7+
8+
基于 CDN + Custom 运行时实现 apk 实时打渠道包
9+
10+
</description>
11+
12+
<codeUrl>
13+
14+
15+
16+
</codeUrl>
17+
<preview>
18+
19+
20+
21+
</preview>
22+
23+
24+
## 前期准备
25+
26+
使用该项目,您需要有开通以下服务并拥有对应权限:
27+
28+
<service>
29+
30+
31+
32+
| 服务/业务 | 权限 | 相关文档 |
33+
| --- | --- | --- |
34+
| 函数计算 | AliyunFCFullAccess | [帮助文档](https://help.aliyun.com/product/2508973.html) [计费文档](https://help.aliyun.com/document_detail/2512928.html) |
35+
| 硬盘挂载 | AliyunFCServerlessDevsRolePolicy | [帮助文档](https://help.aliyun.com/zh/nas) [计费文档](https://help.aliyun.com/zh/nas/product-overview/billing) |
36+
| 专有网络 | AliyunFCServerlessDevsRolePolicy | [帮助文档](https://help.aliyun.com/zh/vpc) [计费文档](https://help.aliyun.com/zh/vpc/product-overview/billing) |
37+
38+
</service>
39+
40+
<remark>
41+
42+
43+
44+
</remark>
45+
46+
<disclaimers>
47+
48+
49+
50+
</disclaimers>
51+
52+
## 部署 & 体验
53+
54+
<appcenter>
55+
56+
- :fire: 通过 [Serverless 应用中心](https://fcnext.console.aliyun.com/applications/create?template=start-repack-apk-v3)
57+
[![Deploy with Severless Devs](https://img.alicdn.com/imgextra/i1/O1CN01w5RFbX1v45s8TIXPz_!!6000000006118-55-tps-95-28.svg)](https://fcnext.console.aliyun.com/applications/create?template=start-repack-apk-v3) 该应用。
58+
59+
</appcenter>
60+
<deploy>
61+
62+
- 通过 [Serverless Devs Cli](https://docs.serverless-devs.com/user-guide/install) 进行部署:
63+
- [安装 Serverless Devs Cli 开发者工具](https://docs.serverless-devs.com/user-guide/install) ,并进行[授权信息配置]( https://docs.serverless-devs.com/user-guide/config)
64+
- 初始化项目:`s init start-repack-apk-v3 -d start-repack-apk-v3`
65+
- 进入项目,并进行项目部署:`cd start-repack-apk-v3 && s deploy -y`
66+
67+
</deploy>
68+
69+
## 案例介绍
70+
71+
<appdetail id="flushContent">
72+
73+
基于本案例, 您可以快捷部署生成一个弹性高可用的 “Serverless 实现实时 apk 渠道分包“ 服务。
74+
75+
76+
随着移动游戏市场的多元化,游戏开发商和发行商需针对不同渠道分发定制化的游戏版本,针对此类需求,该方案适用于大规模、多渠道的游戏分发场景,特别是在面临频繁且多变的下载请求时, 用户能够通过系统实时地获取并下载包含定制渠道号的游戏 APK 包,同时享受断点续传的下载体验,确保即使在连接不稳定的情况下也能顺利完成游戏的获取,该方案已被多家游戏公司采纳,。
77+
78+
![](https://img.alicdn.com/imgextra/i2/O1CN019seP901UxWBt9D8h7_!!6000000002584-2-tps-2120-668.png)
79+
80+
81+
如上图所示,游戏 APK 包需要根据实时请求中的的参数获取指定的渠道号,并将渠道号写入 APK 文件固定位置, 如果每天有大量且不同渠道的下载请求, 能**实时**让用户**断点下载**指定渠道的 apk 游戏包。
82+
83+
84+
</appdetail>
85+
86+
## 使用流程
87+
88+
<usedetail id="flushContent">
89+
90+
91+
### CDN 配置
92+
93+
本应用部署成功后, 您会获取一个 访问域名的 url, 比如为 `https://get-apk-apk-repack-evbilghzjb.cn-hangzhou.fcapp.run`
94+
95+
之后登录 [CDN 控制台](https://cdn.console.aliyun.com/) 完成配置:
96+
97+
#### 1. 添加域名
98+
99+
比如您有一个名为 `functioncompute.com` 的域名, 如下图所示, 我添加了 `apk-cdn.functioncompute.com`, 源站的域名为前面应用部署的访问域名 url(_注意是 host,不用填写前面的 https://_), 比如本示例为 `get-apk-apk-repack-evbilghzjb.cn-hangzhou.fcapp.run`
100+
101+
> 其中前缀 apk-cdn 可以随便, 由您这边自己想最后暴露出去的 url 决定
102+
103+
![](https://img.alicdn.com/imgextra/i2/O1CN01KX6FhL1sjp9I1US8M_!!6000000005803-2-tps-1372-840.png)
104+
105+
#### 2. 域名管理
106+
107+
##### 2.1. 根据控制台引导, 完成域名的 CNAME 解析
108+
109+
![](https://img.alicdn.com/imgextra/i4/O1CN01tmlyC222ln0TTrFt1_!!6000000007161-2-tps-956-1372.png)
110+
111+
![](https://img.alicdn.com/imgextra/i1/O1CN01htbiOc1DZNsDqDC9C_!!6000000000230-2-tps-2348-670.png)
112+
113+
![](https://img.alicdn.com/imgextra/i4/O1CN01vKUcG21RGWBEd8eBT_!!6000000002084-2-tps-2586-244.png)
114+
115+
##### 2.2. 完成管理配置, 主要完成回源配置的域名和开启 Range 回源强制
116+
117+
![](https://img.alicdn.com/imgextra/i4/O1CN01d9cRsx23rZckwYqmF_!!6000000007309-2-tps-2646-716.png)
118+
119+
> 域名应用部署成功后返回的访问域名 url 的 host, 比如本示例为 `get-apk-apk-repack-evbilghzjb.cn-hangzhou.fcapp.run`
120+
121+
![](https://img.alicdn.com/imgextra/i3/O1CN01W8rPnG1R1rVDcK7TN_!!6000000002052-2-tps-2612-854.png)
122+
123+
如果没有强制回源了,参考如下截图
124+
125+
![](https://img.alicdn.com/imgextra/i3/O1CN01uYP7qO1ehcuia7PCo_!!6000000003903-2-tps-1480-462.png)
126+
127+
#### 3. 使用浏览器断点下载指定渠道 apk 包
128+
129+
比如:
130+
131+
`http://apk-cdn.functioncompute.com/foo?src=fc-imm-demo/test-apk/qq.apk&cid=uc`
132+
133+
`http://apk-cdn.functioncompute.com/foo?src=fc-imm-demo/test-apk/qq.apk&cid=xiaomi`
134+
135+
其中
136+
137+
- `apk-cdn.functioncompute.com` 表示 cdn 对外的域名
138+
- `src=fc-imm-demo/test-apk/qq.apk` 表示处理的母包, 其中 fc-imm-demo 为 bucket(和函数在同一个 region), test-apk/qq.apk 为 object
139+
- `cid=xiaomi` 表示渠道为 xiaomi, 这个可以自定义
140+
141+
### Tips
142+
143+
- 用户在自己程序中获取渠道信息, 只需要读取 apk 包中 `assets/dap.properties` 文件中的内容即可
144+
145+
- 换用自己的证书, 只需要换掉 target/cert 下面的文件即可:
146+
> jarsigner 将 .keystore 文件作为 RSA 密钥的来源,要将其转换为 golang 可识别的 .pem,我们需要以下几行:
147+
148+
```bash
149+
# key store
150+
$ keytool -genkey -keystore test.keystore -alias test -keyalg RSA -validity 10000
151+
152+
# convert to pkcs12 format
153+
$ keytool -importkeystore -srckeystore test.keystore -destkeystore test.p12 -deststoretype PKCS12
154+
155+
# private key pem
156+
$ openssl pkcs12 -in test.p12 -nocerts -nodes -out tmp-test-priv.pem
157+
$ openssl rsa -in tmp-test-priv.pem -out test-priv.pem
158+
159+
# cert pem
160+
$ openssl pkcs12 -in test.p12 -nokeys -out test-cert.pem
161+
```
162+
163+
### 二次开发
164+
165+
#### 本地调试
166+
167+
1. 将测试证书放置在如下位置
168+
169+
```bash
170+
CertPEM_PATH = "/tmp/cert/test-cert.pem"
171+
PrivateKeyPEM_PATH = "/tmp/cert/test-priv.pem"
172+
```
173+
174+
2. 编译, 生成的二进制可执行文件名字为 repack
175+
176+
3. Run Local
177+
178+
```bash
179+
$ RUN_LOCAL=true OSS_ENDPOINT=http://oss-cn-qingdao.aliyuncs.com SOURCE_OBJECT=test/test_pack.apk CHANNEL_ID=xiaomi ACCESS_KEY_ID=xxx ACCESS_KEY_SECRET=yyy ./repack
180+
```
181+
182+
> 注意将相关 ENV 设置您自己的值即可
183+
184+
#### 打包原理
185+
186+
对于一个原始的 apk 文件,将一个新文件添加到存档中,然后对 apk 重新签名获取新的 apk 文件。等价于以下命令相同的效果:
187+
188+
```bash
189+
# adds a file to origin.apk and results in new.apk
190+
191+
$ unzip origin.apk -d origin/
192+
$ echo "1234" > /tmp/cpid
193+
$ cp /tmp/cpid origin/
194+
$ rm -rf origin/META-INF
195+
$ cd origin
196+
$ jar -cf new-unsigned.apk *
197+
$ jarsigner -keystore test.keystore -signedjar new.apk new-unsigned.apk 'test'
198+
```
199+
200+
但是这个应用的方案一些区别:
201+
202+
- origin apk 存储在 OSS 中
203+
- repack 过程中不需要将 origin apk 下载到本地磁盘
204+
- 新的 apk 实时分段回传给 CDN
205+
206+
这个方案使用很少的磁盘空间并且非常高效。
207+
208+
**方案原理图**
209+
210+
![](https://img.alicdn.com/imgextra/i4/O1CN01ARFir41xyXwDIpAng_!!6000000006512-2-tps-711-463.png)
211+
212+
</usedetail>
213+
214+
## 注意事项
215+
216+
<matters id="flushContent">
217+
</matters>
218+
219+
220+
<devgroup>
221+
222+
223+
## 开发者社区
224+
225+
您如果有关于错误的反馈或者未来的期待,您可以在 [Serverless Devs repo Issues](https://github.com/serverless-devs/serverless-devs/issues) 中进行反馈和交流。如果您想要加入我们的讨论组或者了解 FC 组件的最新动态,您可以通过以下渠道进行:
226+
227+
<p align="center">
228+
229+
| <img src="https://img.alicdn.com/imgextra/i2/O1CN010Sk7sv1Xl6WuOb6uU_!!6000000002963-0-tps-666-662.jpg" width="130px" > | <img src="https://img.alicdn.com/imgextra/i4/O1CN010Vt5aw27VN5rJIguB_!!6000000007802-0-tps-668-630.jpg" width="130px" > |
230+
| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
231+
| <center>微信公众号:`serverless`</center> | <center>钉钉交流群:`33947367`</center> |
232+
</p>
233+
</devgroup>

src/README.md

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,6 @@
22
> 注:当前项目为 Serverless Devs 应用,由于应用中会存在需要初始化才可运行的变量(例如应用部署地区、函数名等等),所以**不推荐**直接 Clone 本仓库到本地进行部署或直接复制 s.yaml 使用,**强烈推荐**通过 `s init ${模版名称}` 的方法或应用中心进行初始化,详情可参考[部署 & 体验](#部署--体验)
33
44
# start-repack-apk-v3 帮助文档
5-
<p align="center" class="flex justify-center">
6-
<a href="https://www.serverless-devs.com" class="ml-1">
7-
<img src="http://editor.devsapp.cn/icon?package=start-repack-apk-v3&type=packageType">
8-
</a>
9-
<a href="http://www.devsapp.cn/details.html?name=start-repack-apk-v3" class="ml-1">
10-
<img src="http://editor.devsapp.cn/icon?package=start-repack-apk-v3&type=packageVersion">
11-
</a>
12-
<a href="http://www.devsapp.cn/details.html?name=start-repack-apk-v3" class="ml-1">
13-
<img src="http://editor.devsapp.cn/icon?package=start-repack-apk-v3&type=packageDownload">
14-
</a>
15-
</p>
165

176
<description>
187

@@ -22,7 +11,7 @@
2211

2312
<codeUrl>
2413

25-
- [:smiley_cat: 代码](https://github.com/devsapp/repackAPK/tree/V3/src)
14+
2615

2716
</codeUrl>
2817
<preview>
@@ -70,8 +59,8 @@
7059
</appcenter>
7160
<deploy>
7261

73-
- 通过 [Serverless Devs Cli](https://www.serverless-devs.com/serverless-devs/install) 进行部署:
74-
- [安装 Serverless Devs Cli 开发者工具](https://www.serverless-devs.com/serverless-devs/install) ,并进行[授权信息配置](https://docs.serverless-devs.com/fc/config)
62+
- 通过 [Serverless Devs Cli](https://docs.serverless-devs.com/user-guide/install) 进行部署:
63+
- [安装 Serverless Devs Cli 开发者工具](https://docs.serverless-devs.com/user-guide/install) ,并进行[授权信息配置]( https://docs.serverless-devs.com/user-guide/config)
7564
- 初始化项目:`s init start-repack-apk-v3 -d start-repack-apk-v3`
7665
- 进入项目,并进行项目部署:`cd start-repack-apk-v3 && s deploy -y`
7766

@@ -91,12 +80,14 @@
9180

9281
如上图所示,游戏 APK 包需要根据实时请求中的的参数获取指定的渠道号,并将渠道号写入 APK 文件固定位置, 如果每天有大量且不同渠道的下载请求, 能**实时**让用户**断点下载**指定渠道的 apk 游戏包。
9382

83+
9484
</appdetail>
9585

9686
## 使用流程
9787

9888
<usedetail id="flushContent">
9989

90+
10091
### CDN 配置
10192

10293
本应用部署成功后, 您会获取一个 访问域名的 url, 比如为 `https://get-apk-apk-repack-evbilghzjb.cn-hangzhou.fcapp.run`
@@ -129,6 +120,10 @@
129120
130121
![](https://img.alicdn.com/imgextra/i3/O1CN01W8rPnG1R1rVDcK7TN_!!6000000002052-2-tps-2612-854.png)
131122

123+
如果没有强制回源了,参考如下截图
124+
125+
![](https://img.alicdn.com/imgextra/i3/O1CN01uYP7qO1ehcuia7PCo_!!6000000003903-2-tps-1480-462.png)
126+
132127
#### 3. 使用浏览器断点下载指定渠道 apk 包
133128

134129
比如:
@@ -231,8 +226,8 @@ $ jarsigner -keystore test.keystore -signedjar new.apk new-unsigned.apk 'test'
231226

232227
<p align="center">
233228

234-
| <img src="https://serverless-article-picture.oss-cn-hangzhou.aliyuncs.com/1635407298906_20211028074819117230.png" width="130px" > | <img src="https://serverless-article-picture.oss-cn-hangzhou.aliyuncs.com/1635407044136_20211028074404326599.png" width="130px" > | <img src="https://serverless-article-picture.oss-cn-hangzhou.aliyuncs.com/1635407252200_20211028074732517533.png" width="130px" > |
235-
| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
236-
| <center>微信公众号:`serverless`</center> | <center>微信小助手:`xiaojiangwh`</center> | <center>钉钉交流群:`33947367`</center> |
229+
| <img src="https://img.alicdn.com/imgextra/i2/O1CN010Sk7sv1Xl6WuOb6uU_!!6000000002963-0-tps-666-662.jpg" width="130px" > | <img src="https://img.alicdn.com/imgextra/i4/O1CN010Vt5aw27VN5rJIguB_!!6000000007802-0-tps-668-630.jpg" width="130px" > |
230+
| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
231+
| <center>微信公众号:`serverless`</center> | <center>钉钉交流群:`33947367`</center> |
237232
</p>
238233
</devgroup>

src/s.yaml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414

1515
edition: 3.0.0
1616
name: hello-world-app
17-
access: '{{ access }}'
17+
access: "{{ access }}"
1818
vars:
19-
region: '{{ region }}'
19+
region: "{{ region }}"
2020

2121
resources:
2222
helloworld:
@@ -36,9 +36,12 @@ resources:
3636
command:
3737
- /code/repack
3838
port: 80
39-
functionName: '{{ functionName }}'
39+
functionName: "{{ functionName }}"
4040
code: ./code/target
41+
logConfig: auto
42+
vpcConfig: auto
4143
nasConfig: auto
44+
role: "{{ roleArn }}"
4245
triggers:
4346
- qualifier: LATEST
4447
triggerName: defaultTrigger

0 commit comments

Comments
 (0)