Home > 移动互联, 语言编程 > Android开发之使用Ant命令行编译和APK签名

Android开发之使用Ant命令行编译和APK签名

最近在做Android开发时,需要引用第三方的代码进项目,一般情况下,直接在Eclipse下设置需要导入的代码的编译输出为library即可,但是很多代码在Eclipse下编译会出现很多莫名其妙的错误。因而只能使用命令行方式对代码进行编译。具体方法如下:

1.安装编译用的Java,安装Android Platform-tools,安装Ant,设置好各种环境变量。部分Linux下Ant已经默认集成,Windows下需要自行安装。
2.使用Android工具更新代码的编译配置。
3.使用Ant工具进行编译,可编译Debug版和Release版本。
4.生成代码签名用的私钥,并对APK进行签名。
5.对APK文件进行对齐,对大文件APK有不错的效果。

以下是参考Bash代码,可自己需要更改,执行时,sudo bash XXX.sh即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Setup Java Home
JAVA_HOME = "/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home"
 
# Setup android Home
ANDROID_HOME="~/android-sdk-macosx"
 
# Setup path
PATH = "$ANDROID_HOME/tools:$JAVA_HOME/bin:$PATH"
 
# Update current project
android update project --path .
#android update project --path ./Library/lib1
#android update project --path ./Library/lib2
 
# Remove keystore
rm -f product.keystore
 
# Make keystone
keytool -genkey -alias product.keystore -keyalg RSA -validity 40000 \
-keystore product.keystore -storepass password -keypass password \
-dname "CN=Product OU=Android Team O=Organization L=Hongkong ST=Hongkong C=China"
 
# Clean
ant clean
 
# Remove ant.properties
rm -f ant.properties
 
# Make ant.properties
echo "key.store=product.keystore" > ant.properties
echo "key.alias=product.keystore" >> ant.properties
 
# Build apk
ant release
 
# Sign APK
# jarsigner -verbose -keystore product.keystore -signedjar \
# bin/product_signed.apk bin/product-release-unsigned.apk product.keystore
 
# Zip align apk
# zipalign -v 4 bin/product_signed.apk bin/product_final.apk

说明:
更新Android的ant编译配置,如果代码的结构发生变更,请执行,如果代码中包含引用的第三方库代码,需要分别对这些代码进行更新。

1
2
3
4
# Update current project
android update project --path .
#android update project --path ./Library/lib1
#android update project --path ./Library/lib2

生成签名用的Keystore文件,几个参数的说明
-genkey 生成秘钥证书
-alias 别名
-keyalg 秘钥的计算算法
-validity 有效期
-keystore 秘钥库文件路径
-storepass 秘钥库密码
-keypass 秘钥证书密码
-dname 发行者信息
CN= 发行者姓名 (个人姓名或产品名)
OU= 组织单元名 (团队名)
O= 组织机构名 (公司名)
L= 城市/地区
ST= 州/省
C= 国家代码

1
2
3
4
# Make keystone
keytool -genkey -alias product.keystore -keyalg RSA -validity 40000 \
-keystore product.keystore -storepass password -keypass password \
-dname "CN=Product OU=Android Team O=Organization L=Hongkong ST=Hongkong C=cn"

生成ant自动编译用的ant.properties文件,设置key.store和key.alias两个变量后,ant release时会自动对生成的APK签名和对齐

1
2
echo "key.store=product.keystore" > ant.properties
echo "key.alias=product.keystore" >> ant.properties

手动对代码签名,几个参数的说明
-verbose 显示输出
-keystore keystore别名
-signedjar 签名apk文件,第一个参数为目标文件,第二个为未签名apk

1
2
# Sign APK
jarsigner -verbose -keystore product.keystore -signedjar bin/product_signed.apk bin/product-release-unsigned.apk product.keystore

手动对APK进行对齐

1
2
# Zip align apk
zipalign -v 4 bin/product_signed.apk bin/product_final.apk
Categories: 移动互联, 语言编程 Tags: , , , ,
  1. No comments yet.
  1. No trackbacks yet.