摘要:Android 里给我们提供了 很多 用来打包的工具

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#!/bin/bash
CUR_DIR="$( cd "$( dirname "$0" )" && pwd )"
echo $CUR_DIR
# 创建相关目录
mkdir mybuild
cd mybuild
mkdir out
mkdir gen
cd out
mkdir class
BUILD_DIR=$CUR_DIR/mybuild
GEN_DIR=$BUILD_DIR/gen
OUT_DIR=$BUILD_DIR/out
CLASS_DIR=$OUT_DIR/class
SDK=/home/zhush/Android/Sdk/
BUILD_TOOLS=$SDK/build-tools/27.0.3
PLATFORMS=$SDK/platforms/android-25
# 第一步生成 R.java
cd $BUILD_TOOLS
function createR(){
./aapt v
./aapt package -f \
-m \
-J $GEN_DIR \
-S $CUR_DIR/app/src/main/res \
-M $CUR_DIR/app/src/main/AndroidManifest.xml \
-I $PLATFORMS/android.jar
#statements
#statements
# -f 如果编译出来的文件已经存在,强制覆盖
# -m 使得生成的包的目录放在 -J 参数指定的目录
# -J R.java 的输出目录
# -S res 文件夹路径
# -M AndroidManifest的路径
# -I android.jar 的路径
}
# 第二步 编译java文件
function compileJava(){
javac -source 1.7 -target 1.7 \
-bootclasspath $PLATFORMS/android.jar \
-d $CLASS_DIR\
$CUR_DIR/app/src/main/java/com/sh/zsh/opengl/*.java \
$GEN_DIR/com/sh/zsh/opengl/*.java
}
# 第3步 使用dx命令,将class文件转化成dex
function createDex(){
dx --dex --output=$CLASS_DIR/classes.dex $CLASS_DIR
}
# 第4步 资源文件初始包
function compileRes(){
aapt package -f \
-M $CUR_DIR/app/src/main/AndroidManifest.xml \
-I $PLATFORMS/android.jar \
-S $CUR_DIR/app/src/main/res/ \
-F $OUT_DIR/pre.apk
}
# 第5步 文件加入到资源文件初始包中 sdk 2.2以后删除了 apkbuilder,可以在sdk 的 tools 目录里执行 新版本的SDK tools废弃了 命令行工具 替换老版本tools即可
function mixtureApk(){
cd /home/zhush/Android/Sdk/tools
cat android | sed -e 's/com.android.sdkmanager.Main/com.android.sdklib.build.ApkBuilderMain/g' > apkbuilder
sudo chmod +x apkbuilder
./apkbuilder $OUT_DIR//app.apk \
-v \
-u \
-z $OUT_DIR/pre.apk \
-f $CLASS_DIR/classes.dex
}
# 第6步 签名
function signApk(){
jarsigner -verbose \
-keystore ~/.android/debug.keystore \
-storepass android \
-keypass android \
$OUT_DIR//app.apk androiddebugkey
}
function taskStart(){
createR
if [ $? = 0 ]; then
compileJava
if [ $? = 0 ]; then
createDex
if [ $? = 0 ]; then
compileRes
if [ $? = 0 ]; then
mixtureApk
if [ $? = 0 ]; then
signApk
else
echo "失败"
fi
else
echo "失败"
fi
else
echo "失败"
fi
else
echo "失败"
fi
else
echo "失败"
fi
}
taskStart