apk构建流程、apk安装以及打包2.0理解
apk构建流程
- aapt编译assets、res资源,根据package包名生成R.java文件
- java compile将java源文件编译成.class文件
- dx工具将.class转换成classes.dex文件
- 将编译后的res资源、assets资源和class.dex文件压缩封装,并且会生成一个resources.arsc文件,该文件是描述apk文档结构的文件,最终形成一个apk文件;这个过程使用apkbuilder工具
- 签名 jarsigner
- 字节对齐 zplign
apk安装
系统应用一般安装在/system/app;而我们用户安装或者使用adb安装则是安装在data/app里面,安装需要了解以下几个目录:
/data/app/ ——————— 存放安装的apk文件
/data/data/package ———- apk的数据文件
/data/dalvik-cache ———– 存放apk的dex文件
安装流程一般是:
1. 将apk文件拷贝纸data/app目录下
2. 对apk进行扫描解包,将dex复制到/data/dalvik-cache下
3. 在data/data/package创建对应的目录,该路径下一般有一下几个目录
databases — 数据库文件
files — 文件路径 context.getFileDir()
lib — so库
shared_prefs — sharePrefernce存放位置
把以下三者融合到一个apk里面
- 渠道资源 – Res、lib、assets和class.dex
- 渠道参数 – 需要把渠道参数如appid等,写入到apk里面
- 游戏母包 – apk合包的基础包
打包步骤
- apktool工具解开游戏母包,解开到out文件夹
- 将渠道资源的res/assets/lib移动到out文件夹对应目录下,注意res下文件有可能会出现同名冲突,冲突不能单纯的覆盖,需要对比文件内部的内容,把两者内容弄到一块,如果内容也冲突就默认渠道覆盖母包
- aapt编译res资源,用新的package包名生成一个R.java,这里就需要注意了;如果母包以前也使用过R文件,现在生成的资源将不再会使用,所以根据以前R.java和现在新的R.java中的key关键字,重新对smali中的R的引用值重刷一遍即可解决
- 渠道的dex代码使用baksmali生成smali文件,并把它移动到out对应文件下去;这里会出现一个新的情况,method方法大于65535的情况,会进行分包处理,但是有些默认是不能移动到非第一个dex里面去的,那到底该怎么处理呢?解决办法是:_从Androidmanifest.xml里面找到主类MAIN,找到类的smali文件,它的依赖不能移动,只能保留在第一个dex文件里面
- 这一步可以执行一些自定义脚本,把相关的渠道参数打进去
- apktool工具合包,生成apk
- 签名即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】