网站首页 > java教程 正文
打包流程
①打包资源文件,生成R.java文件
打包资源的工具是aapt(The Android Asset Packaing Tool),位于
android-sdk/platform-tools目录下。在这个过程中,项目中的AndroidManifest.xml文件和布局文件XML都会编译,然后生成相应的R.java。
②处理aidl文件,生成相应的Java文件
这一过程中使用到的工具是aidl(Android Interface Definition Language),即Android接口描述语言。位于
android-sdk/platform-tools目录下。aidl工具解析接口定义文件然后生成相应的Java代码接口供程序调用。
如果在项目没有使用到aidl文件,则可以跳过这一步。
③编译项目源代码,生成class文件
项目中所有的Java代码,包括R.java和.aidl文件,都会变Java编译器(javac)编译成.class文件,生成的class文件位于工程中的bin/classes目录下。
④转换所有的class文件,生成classes.dex文件
dx工具生成可供Android系统Dalvik虚拟机执行的classes.dex文件,该工具位于
android-sdk/platform-tools 目录下。
任何第三方的libraries和.class文件都会被转换成.dex文件。
dx工具的主要工作是将Java字节码转成成Dalvik字节码、压缩常量池、消除冗余信息等
⑤打包生成APK文件
所有没有编译的资源(如images等)、编译过的资源和.dex文件都会被apkbuilder工具打包到最终的.apk文件中。
打包的工具apkbuilder位于 android-sdk/tools目录下。apkbuilder为一个脚本文件,实际调用的是
android-sdk/tools/lib/sdklib.jar文件中的
com.android.sdklib.build.ApkbuilderMain类。
⑥对APK文件进行签名
一旦APK文件生成,它必须被签名才能被安装在设备上。
在开发过程中,主要用到的就是两种签名的keystore。一种是用于调试的debug.keystore,它主要用于调试,在Eclipse或者Android Studio中直接run以后跑在手机上的就是使用的debug.keystore。另一种就是用于发布正式版本的keystore。
⑦对签名后的APK文件进行对齐处理
如果你发布的apk是正式版的话,就必须对APK进行对齐处理,用到的工具是zipalign,它位于android-sdk/tools目录下。
对齐的主要过程是将APK包中所有的资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时的速度会更快。
对齐的作用就是减少运行时内存的使用。
转自CSDN
猜你喜欢
- 2025-06-19 草率了,又一个Maven打包的问题(maven shade打包)
- 2025-06-19 SpringBoot 项目打包命令 详细配置说明
- 2025-06-19 jenkins本地安装打包以及远程打包
- 2025-06-19 程序员你的maven多模块项目如何对外输出为一个构件?
- 2025-06-19 Java语言的智能名片系统源码,二次开发流程
- 2025-06-19 基于 mybatis generator生成 Mybatis文件图形化工具
- 2025-06-19 最全!最强大!Maven知识大全(maven详细教程)
- 2025-06-19 SpringBoot打包部署成Windows服务
- 2025-06-19 大数据Hadoop之——Kafka Streams原理介绍与简单应用示例
- 2025-06-19 看完SpringBoot源码后,整个人都精神了
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)