转自: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.java
This entry was posted in Android Securityby Claud. Bookmark the permalink.

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android(安卓)调用相机,获取的图片太小
  6. Android平台上利用opencv进行图像的边沿检测
  7. Unity 接入Android(安卓)SDK-小米sdk接入笔记
  8. Android开发人员不得不收集的代码(持续更新中)(http://www.jiansh
  9. Android(安卓)apktool反编译资源文件为空解决办法(测试天猫、淘

随机推荐

  1. 【android】只让本应用程序的webview加载
  2. Android 通过 Intent 传递类对象
  3. Android(安卓)Drawable 和String 相互转
  4. android 垂直拖动条seekbar
  5. Activity你需要知道的一切
  6. Android Support v4、v7、v13的区别
  7. Android中.apk文件的编译流程
  8. Android studio导入项目(出现的问题)
  9. android 点击跳转到你要展示的网页
  10. android window 一些属性说明