Android 手游聚合SDK小知识(二) 聚合分包

本文详细介绍了如何在Android手游中使用聚合SDK时,对游戏APK进行渠道包分发的过程,包括反编译、资源合并、AndroidManifest.xml编辑、版本信息修改及最终的回编译和签名步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 手游聚合SDK小知识(一)
Android 手游聚合SDK小知识(二) 聚合分包

更新:

在上一篇文章中,我们介绍了如何聚合SDK的基本原理,介绍了聚合SDK的接口设计,那么当CP接入了我们的聚合SDK,给了我们游戏apk包时,这时我们又当如何分发渠道包呢?

分发渠道包:

该操作方式都是在只有游戏apk包的情况下进行的

开始合包

1、apk反编译

apk反编译使用apktool这个工具,可以将apk文件反编译,apk命令如下

java -jar D:\apktool.jar d apk路径 -o 反编译输出目录的路径

将母包apk和SDK包反编译处理得到待合并资源。

2、SDK资源合并

2.1、合并assets目录

将SDK的assets目录下的资源复制到母包的assets目录下,注意文件名不要冲突,如果冲突请修改SDK的文件命名方式。

2.2、合并lib目录

将SDK的lib目录下的文件复制到母包的lib目录下,但是要注意,复制的时候要以母包的目录为准,举个例子,SDK的lib目录下有x86和x86_64两个目录,母包的lib目录只有x86_64一个目录,则合并的时候,以母包为准,只保留x86_64这一个目录。

2.3、合并res目录下的资源

res目录下一般包括以下几个目录:

  • layout:布局文件
  • anim:存放动画定义文件
  • color:存放自定义颜色文件
  • menu:存放菜单自定义文件
  • xml:存放配置文件
  • drawable/mipmap:存放图片文件
  • raw:存放不压缩文件
  • values:存放主题样式,字符串等文件
    注意:合并文件的时候,可能会出现文件名重复的问题,所以这就要求我们的SDK的文件名和母包的文件名不一致,建议SDK的文件命名的时候加个前缀.

以上目录除values外,其他目录的合并方式:
直接将SDK的文件复制到母包下就行,有同名的改一下SDK的命名方式。

values目录文件下除public.xml文件外的合并:
将SDK有,母包没有的目录直接复制过去,例如SDK有values-zh目录,母包没有这个目录,就将SDK整个目录复制到母包里。
如果SDK有,母包也有的目录,则合并目录中的文件内容,比如string.xml或color.xml等,将SDK对应文件的内容复制到母包中,如果内容命名方式相同,例如#3F51B5这样的name,母包和SDK都有,则想办法将SDK的name命名方式修改掉,如果是系统参数或修改不了,则保留母包的。

values目录文件下public.xml文件的合并:
一般来说,我们做SDK,不要使用R.id或R.layout等资源引用方式,而是使用getIdentifier()这种方式来动态获取资源ID。
如果母包和SDK都使用了getIdentifier()来获取资源ID,则把两个public.xml都删掉,或者保留母包与SDK任何一个的public.xml都行,因为这个时候没有使用到R资源,你都删掉或者保留任何一个都行。
但是有的时候会遇到没有使用”行规“, 动态获取资源id,而是使用R.id的方式,这种情况下有下面几种处理方式。
一、保留母包的public.xml,删掉SDK的public.xml。
二、保留SDK的public.xml,删掉母包的public.xml。
三、合并两个public.xml并重新赋值,并且遍历smali的R l a y o u t . s m a l i 或 R layout.smali或R layout.smaliRcolor.smali等R文件,修改对应的值。

这三种方法,如果是母包没有用getIdentifier()来获取资源ID,则可以用1,3方法,如果是SDK没有用getIdentifier()来获取资源ID,则可以用2、3方法,如果是双方都没用getIdentifier()来获取资源ID,则只能使用3方法。因为我公司的游戏是自研游戏,母包是按照getIdentifier()来获取资源ID的,所以我直接用了2方法,后续我应该会出一篇文章讲一下怎么合并public.xml和R文件,大家也可以自己百度搜索一下,我发现也有人讲这个。

2.4、合并smali文件

合并smali文件要注意以下几点:
一、删除游戏母包中负责聚合SDK的文件,因为SDK复制进来后,防止没法覆盖掉旧的,同时存在两个聚合SDK文件,导致引用错误。
二、把SDK中的smali文件复制到游戏母包,直接覆盖原文件,注意是直接覆盖,有重复的不管他,直接覆盖。

注意,第二步时,有的时候会出现65535的错误,因为smali文件覆盖后,可能单个smali目录里的文件的方法数会超过65535,这个时候有两种处理方案。
一、扫描里面的方法数,如果超过65535,这种情况需要新建一个smali_calss2文件,如果smali_calss2还不够,就新建smali_calss3,直到每个smali_calss目录里的方法数都不超过65535。
二、复制SDK的smali文件时,直接在母包的下面新建smali_calss,比如母包有smali_calss和smali_calss2两个目录,则复制SDK的时候,直接新建smali_calss3开始一个个复制过去,因为母包的两个smali_calss目录没超方法数,复制的SDK的新建的smali_calss目录也没超,所以不用检查里面的方法数就可以完成smali合并,方便很多,就是同一个APK反复分发的时候,smali数会越来越多。用这个方法的话,建议使用同一个母包分发。

2.5、合并AndroidManifest.xml

把多个SDK AndroidManifest.xml文件的配置整合到一个AndroidManifest.xml中,需要注意是去掉重复的声明,比如:重复的权限声明、重复的meta-data声明等,并注意要修改启动的Activity。

2.6、修改appName或icon

appName直接去修改AndroidManifest.xml中的application节点中的android:label属性的值,如果这个值是引用的string.xml中的appName,去修改string.xml也行。
icon修改直接将新的icon复制替换到res文件夹下,记得每个倍率的都要替换。

2.7、修改versionCode,versionName:等

直接找到母包的apktool.yml文件,修改这里面的这两个参数就行了。

3、回编译

借助Apktool进行回编译即可,回编译命令如下:

java -jar D:\apktool.jar b 母包反编译输出的目录 -f -o 回编译apk的绝对路径

4、签名

### Nginx 文件名逻辑漏洞(CVE-2013-4547) #### 漏洞概述 Nginx 文件名逻辑漏洞(CVE-2013-4547)允许攻击者通过精心构造的 URL 请求来绕过访问控制并读取或执行受限资源。此漏洞的根本原因在于 Nginx 错误地解析了带有特定编码字符的 URL,从而导致文件路径处理不当[^1]。 #### 影响范围 该漏洞影响多个版本的 Nginx,在某些配置下可能导致未经授权的文件访问甚至远程代码执行。具体受影响的版本包括但不限于: - Nginx 1.4.x 版本系列 - Nginx 1.5.x 版本系列 (部分) 当 Web 应用程序部署于上述版本之上时,可能存在潜在风险[^3]。 #### 复现过程 为了验证这一漏洞的存在,可以通过上传一个看似无害但实际上包含恶意 PHP 代码的图片文件 `phpinfo.jpg` 来测试。一旦成功上传,攻击者能够修改 HTTP 请求中的参数使服务器错误解释文件扩展名,进而触发命令注入行为[^4]。 ```bash curl -X POST http://example.com/upload.php \ -F "file=@/path/to/phpinfo.jpg" ``` 随后发送如下请求可尝试利用漏洞: ```http GET /uploads/phpinfo.jpg%00.php?cmd=id HTTP/1.1 Host: example.com ``` 如果存在漏洞,则返回的结果会显示当前用户的 ID 信息。 #### 安全修复措施 针对 CVE-2013-4547 的防护手段主要包括以下几个方面: - **升级至最新稳定版**:官方已发布更新解决此问题,建议立即应用最新的安全补丁以消除隐患[^2]。 - **手动修补源码**:对于无法即时升级的情况,可以从官方网站下载专门为此漏洞准备的安全补丁,并按照指引完成编译安装流程。 - **加强输入校验**:无论何时都应严格过滤用户提交的数据,特别是涉及文件操作的部分,防止非法字符进入内部处理环节。 - **启用 WAF 防护**:Web Application Firewall 能够识别异常模式并阻止可疑流量到达应用程序层面上游位置。 综上所述,及时采取适当行动可以有效降低遭受此类攻击的风险。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值