Chinaunix首页 | 论坛 | 博客
  • 博客访问: 792217
  • 博文数量: 247
  • 博客积分: 166
  • 博客等级: 入伍新兵
  • 技术积分: 2199
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-15 16:10
文章分类

全部博文(247)

文章存档

2017年(1)

2015年(63)

2014年(80)

2013年(94)

2012年(9)

分类: Android平台

2015-02-12 14:29:39

Android 命令行手动编译打包过程图

android工程结构如图:
                     
【详细步骤】:
1.创建key: 使用keytool.exe(位于%JAVA_HOME%\bin\keytool.exe)创建xxx.keystore,在命令行输入:

keytool -genkey -alias debug.keystore -keyalg RSA -validity 20000 -keystore debug.keystore

说明:
-genkey 产生密钥
-alias debug.keystore 别名
-keyalg RSA 使用RSA算法对签名加密
-validity 20000 有效期限2000天
-keystore debug.keystore

如果之前创建过xxx.keystore,第一步就可以省略,以后直接使用此xxx.keystore就可以了

2.签名:使用jarsigner.exe(位于%JAVA_HOME%\bin\jarsigner.exe)签名
jarsigner -verbose -keystore debug.keystore -signedjar demo_signed.apk demo.apk debug.keystore

说明:
-verbose 输出签名的详细信息
-keystore debug.keystore 密钥库位置
-signedjar demo_signed.apk demo.apk debug.keystore 正式签名,三个参数中依次为签名后产生的文件demo_signed.apk,要签名的文件demo.apk和密钥库demo.keystore

3.对齐:使用zipalign.exe(位于android-sdk-windows\tools\zipalign.exe)对齐
zipalign -v 4 demo_signed.apk demo_signed_aligned.apk

说明:
zipalign能够使apk文件中未压缩的数据在4个字节边界上对齐(4个字节是一个性能很好的值)


如果使用IDE工具开发android,可以通过IDE导出未签名的apk包。因此,知道上面几条命令就可以了。

如果你需要手动打apk包,请看下面打包过程

0.打开cmd,cmd目录
C:\Documents and Settings\user>


1.生成R.java文件
创建gen目录,如果F:\workspace\LBSDemo目录下没有gen目录,运行
mkdir F:\workspace\LBSDemo\gen

运行aapt命令生成R.java文件
aapt.exe package -f -m -J F:\workspace\LBSDemo\gen -S F:\workspace\LBSDemo\res -I H:\android-sdk-windows\platforms\android-7\android.jar -M F:\workspace\LBSDemo\AndroidManifest.xml

2.将.aidl文件转换成.java文件
aidl.exe -pH:\android-sdk-windows\platforms\android-7\framework.aidl F:\workspace\LBSDemo\src\com\lbs\aidl\Remote.aidl F:\workspace\LBSDemo\gen\com\lbs\aidl\Remote.java

3.将java文件编译成class文件
创建bin目录,如果F:\workspace\LBSDemo目录下没有bin目录,运行
mkdir F:\workspace\LBSDemo\bin

运行javac编译java文件
javac -encoding UTF-8 -target 1.5 -bootclasspath H:\android-sdk-windows\platforms\android-7\android.jar -d F:\workspace\LBSDemo\bin F:\workspace\LBSDemo\src\com\baidu\mapapi\*.java F:\workspace\LBSDemo\src\com\lbs\*.java F:\workspace\LBSDemo\src\com\lbs\util\*.java F:\workspace\LBSDemo\gen\com\lbs\R.java F:\workspace\LBSDemo\gen\com\lbs\aidl\Remote.java -classpath F:\workspace\LBSDemo\libs\baidumapapi.jar


4.生成.dex文件
dx.bat --dex --output=F:\workspace\LBSDemo\bin\classes.dex F:\workspace\LBSDemo\bin F:\workspace\LBSDemo\libs

5.生成资源包文件
aapt.exe package -f -M F:\workspace\LBSDemo\AndroidManifest.xml -S F:\workspace\LBSDemo\res -A F:\workspace\LBSDemo\assets -I H:\android-sdk-windows\platforms\android-7\android.jar -F F:\workspace\LBSDemo\bin\resources

6.生成未签名的apk包
apkbuilder.bat F:\workspace\LBSDemo\bin\LBSDemo.apk -v -u -z F:\workspace\LBSDemo\bin\resources -f F:\workspace\LBSDemo\bin\classes.dex -rf F:\workspace\LBSDemo\src -rj F:\workspace\LBSDemo\libs -nf F:\workspace\LBSDemo\libs

7.签名
H: && jarsigner -verbose -keystore debug.keystore -storepass android -signedjar F:\workspace\LBSDemo\bin\LBSDemo_signed.apk F:\workspace\LBSDemo\bin\LBSDemo.apk debug.keystore

签名需要当前目录在keystore目录下,否则出现下面错误
jarsigner: 找不到 H:\demo.keystore 的证书链。

8.对齐
zipalign -v 4 F:\workspace\LBSDemo\bin\LBSDemo_signed.apk F:\workspace\LBSDemo\bin\LBSDemo_signed_aligned.apk

自动打包工具:

参数详解:
1使用aapt生成R.java类文件: 
例: 
F:\explorer\android-sdk-windows2.2\tools>f:\explorer\android-sdk-windows2.2\platforms\android-3\tools\aapt.exe package -f -m -J F:\explorer\AndroidByread\gen -S res -I f:\explorer\android-sdk-windows2.2\platforms\android-3\android.jar -M AndroidManifest.xml 
其中  -f -m -J F:\explorer\AndroidByread\gen 代表按覆盖的形式在gen目录下生成带包路径的R.java,-S res指定资源文件 ,-I f:\explorer\android-sdk-windows2.2\platforms\android-3\android.jar 指定使用的android类,-M AndroidManifest.xml指定程序的配置文件 

aapt Usage: 
 


2使用android SDK提供的aidl.exe把.aidl转成.java文件: 
usage: aidl OPTIONS INPUT [OUTPUT] 
       aidl --preprocess OUTPUT INPUT... 

OPTIONS: 
   -I

    search path for import statements. 
   -d   generate dependency file. 
   -p   file created by --preprocess to import. 
   -o base output folder for generated files. 
   -b         fail when trying to compile a parcelable. 

INPUT: 
   An aidl interface file. 
OUTPUT: 
   The generated interface files. 


3第三步 编译.java类文件生成class文件: 
例:F:\explorer\AndroidByread>javac -encoding GB18030 -target 1.5 -bootclasspath F:\explorer\android-sdk-windows2.2\platforms\android-3\android.jar -d bin src\com\byread\reader\*.java gen\com\byread\reader\R.java 
 


4使用android SDK提供的dx.bat命令行脚本生成classes.dex文件: 
 
例: 
F:\explorer\AndroidByread>F:\explorer\android-sdk-windows2.2\platforms\android-3\tools\dx.bat --dex --output=F:\explorer\AndroidByread\bin\classes.dex f:\explorer\AndroidByread\bin\classes 
其中classes.dex为生成的目标文件,f:\explorer\AndroidByread\bin\classes为class文件所在目录 

5使用Android SDK提供的aapt.exe生成资源包文件(包括res、assets、androidmanifest.xml等): 
F:\explorer\AndroidByread>F:\explorer\android-sdk-windows2.2\platforms\android-3\tools\aapt.exe package -f -M AndroidManifest.xml -S res -A assets -I F:\explorer\android-sdk-windows2.2\platforms\android-3\android.jar -F bin\byreadreader 
将AndroidManifest.xml,res和assets文件夹中的资源文件打包生成byreadreader,用法参见1 

6第六步 生成未签名的apk安装文件: 
apkbuilder  ${output.apk.file} -u -z  ${packagedresource.file} -f  ${dex.file}  -rf  ${source.dir}  -rj  ${libraries.dir} 
 
例: 
F:\explorer\AndroidByread>f:\explorer\android-sdk-windows2.2\tools\apkbuilder.bat f:\explorer\byreadreader.apk –v -u -z f:\explorer\AndroidByread\bin\byreadreader -f f:\explorer\AndroidByread\bin\class.dex -rf F:\explorer\AndroidByread\src 
其中f:\explorer\byreadreader.apk为生成的apk ,-z f:\explorer\AndroidByread\bin\byreadreader为资源包,f:\explorer\AndroidByread\bin\class.dex为类文件包 


7使用jdk的jarsigner对未签名的包进行apk签名: 
use jarsigner 
jarsigner  -keystore ${keystore} -storepass  ${keystore.password} -keypass ${keypass} -signedjar ${signed.apkfile} ${unsigned.apkfile} ${keyalias} 
例如: 
F:\explorer\android-sdk-windows2.2\tools>jarsigner –keystore f:\explorer\eclipse3.5\bbyread.keystore -storepass byread002 -keypass byread002 -signedjar f:\explorer\byread.apk f:\explorer\byreadreader.apk byread 
其中–keystore f:\explorer\eclipse3.5\bbyread.keystore 为密钥文件  -storepass byread002为密钥文件密码 byread 为密钥别名 -keypass byread002为密钥别名密码,-signedjar f:\explorer\byread.apk为签名后生成的apk文件 f:\explorer\byreadreader.apk为未签名的文件。



转载自:http://blog.csdn.net/zuolongsnail/article/details/6444361
               http://jojol-zhou.iteye.com/blog/729254
阅读(2091) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~