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

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、签名

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android信息聚合应用是一款将多种信息来源集合在一起的应用程序。它可以帮助用户从不同的渠道获取各种信息,并将其组合在一个统一的界面中,方便用户进行查阅和管理。 首先,Android信息聚合应用可以整合多种社交媒体平台,如微博、微信、Facebook等。用户只需登录相应的账号,就能在应用中同时查看、回复和管理不同社交媒体平台上的信息。这样一来,用户不必频繁切换不同的应用,就能够轻松处理自己的社交媒体事务。 其次,该应用还可以整合多个新闻媒体网站或RSS源。用户可以根据个人的兴趣和偏好,订阅自己喜欢的新闻频道或话题,从而在信息聚合应用中阅读最新的新闻报道。用户还可以按照时间、地区或主题进行分类和筛选,以便更好地浏览感兴趣的内容。 除此之外,Android信息聚合应用还可以整合个人日历、备忘录和待办事项等功能。用户可以将自己的日程安排、重要备忘录和待办事项统一管理,并设置提醒功能来提醒自己完成任务。这样一来,用户就能够将自己的时间和任务合理安排,提高工作效率和生活质量。 综上所述,Android信息聚合应用在一个界面中集合了多种信息来源,使用户能够方便地获取和管理各种信息。它的功能包括整合社交媒体平台、新闻媒体网站和个人日历等,可以满足用户在信息获取和管理方面的多样化需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值