Android手游SDK那点事(四)聚合打包
更新:
聚合SDK
我们的SDK其实也可以称为聚合SDK,所谓聚合,就是CP游戏方接入聚合SDK,然后通过打包工具将游戏分发到更多渠道上,我们的SDK也有这个能力,相对渠道少一点
分发渠道包
以下操作方式都是在没有游戏源码只有游戏apk包下进行的
快速分包(处理投放包)
我们的游戏包要以广告形式进行投放,这需要很多的包的,实际工作中都是几百个起步,那我们怎么做标识呢?把apk反编译修改里面的标识文件,然后在签名,这显然速度不够快,不适合这种投放包打包,那么什么操作是不用解压可以修改标识也不用签名?重点来了,在apk压缩包下面的META-INF文件夹也就是签名文件夹存放我们的标识文件,.开头的隐藏文件,可以以文件名来判定标识渠道等,也可以在里面存内容解析标识,这样的方式修改后是不需要重新签名的。写个脚本去操作无需解压操作压缩包添加或修改文件,很简单。
渠道打包
我们这里的渠道打包指的是,打出来的包要具备渠道账号体系和支付体系等功能,是要接入人家渠道的sdk的,前面KSDK项目设计中中间件项目的设计就是为了更好处理渠道包,每接一个渠道都是一个不同的中间件,只要把中间件作为一个从包去和游戏包进行替换,渠道的更新,只需要修改渠道对应的中间件接入,完事直接上传这个中间件apk,打包脚本自动处理。
接下来就讲解下怎么进行渠道包具体的打包流程。
打包流程图:
1、apktool解压操作
调用apktool命令
#java -jar apktool.jar d apk文件 -o 输出目录
java -jar E:\apktool.jar d E:\xxx.apk -o E:\tempxxx
2、中间件合并到母包
将解压后的两个文件夹进行合并有几个步骤:
2.1、assets
基本都是将中间件包复制进去,重名的可设置替换或跳过
2. 2、lib
lib:母包的架构优先级高,将中间件包lib不同架构复制到母包,如果母包是没有这个架构的,那跳过。
2.3、res
需要注意public.xml文件,见9简介
2.4、smali
这个没啥好说的,直接就是复制过去,重复的就替换掉。
2.5、AndroidManifest
手写xml解析或者用manifest-merger这个库,后者是AndroidStudio打包自带的一个库,不过不适用于笔者这里的业务,手写xml解析更适用游戏不同的需求。
具体的话复制替换内容根节点下权限,application下面的节点,四大组件复制替换,基本都是根据android:name这个属性去判断是不是同一个节点,再有其他需求的话根据属性不同去复制替换。
2.6、其他文件
unknown文件还有其他的文件直接复制替换。没什么好说的咯。
3、渠道标识修改
SDK会做一些标识的东西,用于区分这个包渠道,可能是在某个配置文件中定义字段,或者在manifest文件定义,还有其他的方式,打包的时候就可能会修改这个文件。
4、修改包名
包名的修改需要解析AndroidManifest配置文件修改根节点属性package=“xxx”
5、修改app名
同样的需要解析AndroidManifest配置文件修改application 属性android:label=“xxx”
6、修改版本信息
versionCode versionName 还有targetSdkVersion都在母包解压后的根目录apktool.yml文件修改,可以用文本形式修改,也可以解析yml修改。
7、设置闪屏
SDK有自己的闪屏规则,基本上闪屏的话就是一张图放在assets,按照一定的规则命名,只要去复制或替换掉原来的就行了
8、设置icon
逆向思维,先把你需要设置的icon以新的名字命名xxx.p保证不会和res下面的文件重复,然后复制进去,如复制到drawable-xhdpi,然后再去AndroidManifest修改icon,android:icon="@drawable/xxx"。
9、重新生成R文件
注意事项:在编译R文件的时候,res/value/下如果有public.xml文件,会以这个文件为基准去重新生成资源id,所以,有以下两种情况
1、如果想根据母包原来的id来生成,那么这个文件就是母包的public.xml
2、如果想根据渠道资源包原来的id来生成,那么这个文件就是渠道资源apk的public.xml
以包名com.exmaple 和工作目录E盘为例
9.1、生成R.java
需要使用到aapt和android.jar,aapt在 android sdk 的 build-tools\api版本\ 目录下,android.jar 在 android sdk 的 platforms\api版本\ 目录下。
将母包解压后的res和AndroidManifest.xml还有用到的库拷贝到指定的文件夹E:\盘根目录
使用下面命令生成R.java,这里aapt使用的是aapt,和aapt2的命令不同
#aapt.exe package -f -m -J R文件保存的路径 -S res路径 -I android.jar -M AndroidManifest.xml路径
E:\aapt.exe package -f -m -J E:\ -S E:\res -I E:\android.jar -M E:\AndroidManifest.xml
生成的R.java是在当前配置的包名下的,那么生成的R.java就是com\exmaple\R.java。
9.2、编译R.java
#javac -source 1.7 -target 1.7 R.java路径
javac -source 1.7 -target 1.7 E:\com.example\R.java
9.3、class转jar
#jar cvf 生成jar的名字 包名第一个文件夹
jar cvf R.jar E:\com
9.4、jar转dex
需要使用dx工具,dx.jar 在android sdk 的build-tools\api版本版本\lib\目录
#java -jar dx文件路径 --dex --output=生成dex文件路径 jar文件路径
java -jar E:\dx.jar --dex --output=E:\classes.dex E:\R.jar
9.5、dex转smali
需要用到baksmali工具,android sdk 的tools\lib\目录下有baksmali-2.2.1.jar,这个版本运行会提示没有主清单属性,也就是程序用不了了,笔者自己网上下的baksmali-2.1.2.jar
#java -jar baksmali文件路径 -o 生成smali目录路径 dex路径
java -jar E:\baksmali-2.1.2.jar -o E:\smali E:\classes.dex
9.6、复制到母包
将生成的smali文件复制到母包的smali目录下
10、apktool封包
调用apktool命令
#java -jar apktool.jar b 解压后的母包路径 -o 生成的apk文件路径
java -jar E:\apktool.jar b E:\tempxxx -o E:\tempxxxunsigned.apk
11、签名
使用jdk工具jarsigner,配了环境变量的直接使用命令,没有的话指定jarsigner
#jarsigner -verbose -keystore 签名文件路径 -storepass 签名密码 -keypass 别名密码 -digestalg SHA1 -sigalg MD5withRSA -signedjar 签名后的apk文件路径 未签名的apk文件路径 别名
jarsigner -verbose -keystore E:\aaa.keystore -storepass 123 -keypass 123 -digestalg SHA1 -sigalg MD5withRSA -signedjar E:\tempxxxsigned.apk E:\tempxxxunsigned.apk SDK
12、对齐
使用工具zipalign.exe,在android sdk 的build-tools\版本\目录下面。
#zipalign.exe -v 4 签名后的apk文件路径 最终输出的apk文件路径
E:\zipalign.exe -v 4 E:\tempxxxunsigned.apk E:\outputxxx.apk
如有游戏sdk或者渠道打包方面开发需求,可扣扣:171970918
上一篇:Android手游SDK那点事(三)编写gradle插件用于SDK辅助开发
下一篇:Android手游SDK那点事(五)支付插件开发
Android手游SDK那点事(四)聚合打包相关推荐
- Android手游SDK那点事(二)SDK项目结构设计(初版,废弃)
项目构建 上一个完整架构图 以KSDK为名称模拟项目构建 项目建议: 1.这里游戏sdk不使用mvp或者mmvm的方式,其实这两种模式开发者在开发应用的时候不要盲目的使用,根据自己项目业务情况选择一个 ...
- Android手游SDK那点事(一)简述
常见名词 CP:游戏厂商,就是开发游戏的,一般情况下CP常常指提供游戏的一方,不一定是研发,只要接入我们SDK,提供给我们游戏,你就是CP. 发行:代理游戏产品,进行渠道的发行. SDK:这里指游戏开 ...
- 关于android手游Sdk开发的专题(一)
随着手游行业的蓬勃发展,以及各大IP加入,对于Android手游插件sdk的开发也多了起来. 下面我将给大家分享手游插件的开发细节 1.sdk开发与传统的app开发的不同点 首先做为sdk由于要兼容e ...
- android手游sdk开发教程,Android SDK开发基本教程
一.本文章总计460字,需要花费您5分钟时间进行阅读. A.先来理解SDK开发的基本流程.首先,在你的Project中新建一个module,指定为Android Library.再新建一个Activi ...
- 鸿蒙 手游sdk 开发教程
前言 : 各位同学的大家好 , 最近在学习鸿蒙开发, 因为我是从事手游SDK 开发的 之前也写过iOS 手游sdk 开发和安卓手游sdk 开发(kotlin 版本) 效果图: 设计思路 我们需要封装 ...
- 手游SDK是什么意思,可以解决哪些问题?
SDK一般是指软件开发工具包(Software Development Kit),是软件工程师为项目特定的项目准备的软件包.软件框架.硬件平台.操作系统等建立应用软件时的开发工具的集合. 手游SDK是 ...
- 手游sdk难道只是个简单的悬浮球吗?
普普通通.丝毫不引人注目,手游sdk难道只是一个简单的悬浮球吗?答案当然是否定的!隐藏在普通表面的背后的手游sdk并不"简单". 手游sdk究竟是什么?又有什么作用?本期小编将为大 ...
- 浅析android手游lua脚本的加密与解密(番外篇之反编译的对抗)
前言 去年在看雪论坛写了一篇<浅析android手游lua脚本的加密与解密>的精华文章,今年写一篇番外篇,将一些lua反编译对抗的内容整合一起,并以3个实例作为说明(包括2018腾讯游 ...
- 棱镜刘大澎:云时代的手游SDK接入
棱镜公司CEO刘大澎通过GameRes给大家分享他们是如何为手游开发商解决国内分发渠道过于分散这一难题的.刘大澎称,棱镜SDK的产品架构基于云端服务,可以为手游开发商提供最安全便捷的手游SDK接入服务 ...
最新文章
- 怎样新建Oracle数据库
- Netbeans学习总结
- ML之LiRLasso:基于datasets糖尿病数据集利用LiR和Lasso算法进行(9→1)回归预测(三维图散点图可视化)
- Oracle中的Union、Union All、Intersect、Minus
- IOS Core Animation Advanced Techniques的学习笔记(五)
- 【Nutch2.2.1基础教程之6】Nutch2.2.1抓取流程
- Cisco pix或asa如何防止内网用户乱改ip配置案例
- about quartus, FPGA and verilog 琐记
- CentOS7安装xrdp(windows远程桌面连接CentOS)
- Socket和ServerSocket学习笔记
- 一个90后草根站长的内心独白
- m3u8播放器 android,在android中播放m3u8视频
- js-xlsx使用-解析生成xlsx文件
- uniapp 动态背景图写法
- 屏幕写画和缩放:ZoomIt【转】
- 婴儿纸尿裤的综合分析
- ubuntu上强制关闭程序
- 【PHP】安装phpoffice/phpspreadsheet环境OneinStack安装ext-fileinfo这个扩展
- 开源一个服务端游戏开发框架
- Java---数据库---数据库DDL