Android中.apk文件的编译流程
转自:http://blog.claudxiao.net/2011/04/compile_apk/
apk文件的编译流程图如下:
下面逐一说明:
项目的源文件结构如下:
E:\Example\│ AndroidManifest.xml│├─assets├─res│ ├─drawable-hdpi│ │ icon.png│ ││ ├─drawable-ldpi│ │ icon.png│ ││ ├─drawable-mdpi│ │ icon.png│ ││ ├─layout│ │ main.xml│ ││ └─values│ strings.xml│└─src └─net └─claudxiao └─example Example.java
1、从res生成R.java
mkdir gen
aapt package -f -m -J gen -S res -I “E:\Program Files\Android\android-sdk-windows\platforms\android-7\android.jar” -M AndroidManifest.xml
其中,-f将覆盖已有结果,-m -J gen指定输出路径,-S指定资源文件目录,-I指定要包含的包,-M指定AndroidMenifest.xml文件。
2、将.java编译为.class
mkdir bin
javac -encoding GB18030 -target 1.6 -bootclasspath “E:\Program Files\Android\android-sdk-windows\platforms\android-7\android.jar” -d bin src\net\claudxiao\example\Example.java gen\net\claudxiao\Example\R.java
其中,-target指定类文件的虚拟机版本,-bootclasspath覆盖引导类文件的位置,-d指定输出路径。
3、将.class编译为classes.dex
dx.bat –dex –output=E:\Example\bin\classes.dex E:\Example\bin
注意这里必须用绝对路径。
4、将资源文件打包
aapt package -f -M AndroidManifest.xml -S res -A assets -I “E:\Program Files\Android\android-sdk-windows\platforms\android-7\android.jar” -F bin\resources.ap_
-F指定输出的apk文件。
5、打包成未签名apk文件
apkbuilder.bat E:\Example\bin\Example_unsigned.apk -u -z E:\Example\bin\resources.ap_ -f E:\Example\bin\classes.dex -rf E:\Example\src
这个命令的常用格式为:
apkbuilder ${output.apk.file} -u -z ${packagedresource.file} -f ${dex.file} -rf ${source.dir} -rj ${libraries.dir}
参数必须使用绝对路径。
此外,运行后提示这一工具即将被废弃,但我没有找到新的替代工具是什么。
6、生成一个签名
keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore
当前目录下生成了一个android.keystore文件
7、对apk文件签名
jarsigner -keystore E:\Example\android.keystore -storepass claudxiao -keypass claudxiao -signedjar E:\Example\bin\Example.apk E:\Example\bin\Example_unsigned.apk android.keystore
这个命令的常用格式为:
jarsigner -keystore ${keystore} -storepass ${keystore.password} -keypass ${keypass} -signedjar ${signed.apkfile} ${unsigned.apkfile} ${keyalias}
至此,bin\Example.apk就是一个可以安装的apk文件了。作为对比,现在的目录结构如下:
E:\Example\│ android.keystore│ AndroidManifest.xml│├─assets├─bin│ │ classes.dex│ │ Example.apk│ │ Example_unsigned.apk│ │ resources.ap_│ ││ └─net│ └─claudxiao│ └─example│ Example.class│ R$attr.class│ R$drawable.class│ R$layout.class│ R$string.class│ R.class│├─gen│ └─net│ └─claudxiao│ └─example│ R.java│├─res│ ├─drawable-hdpi│ │ icon.png│ ││ ├─drawable-ldpi│ │ icon.png│ ││ ├─drawable-mdpi│ │ icon.png│ ││ ├─layout│ │ main.xml│ ││ └─values│ strings.xml│└─src └─net └─claudxiao └─example Example.javaThis entry was posted in Android Securityby Claud. Bookmark the permalink.
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- Android(安卓)调用相机,获取的图片太小
- Android平台上利用opencv进行图像的边沿检测
- Unity 接入Android(安卓)SDK-小米sdk接入笔记
- Android开发人员不得不收集的代码(持续更新中)(http://www.jiansh
- Android(安卓)apktool反编译资源文件为空解决办法(测试天猫、淘