在eclipse中点击一下就能将android项目一键构建,但在这个过程中发生了什么?我们亲手用命令行来实践一下吧.
先上一张google官方的构建流程图
下面我们就来用命令行实践一下,我所使用的sdk版本是android-sdk_r24.0.2-linux 首先新建一个Android应用项目 android create project –target 19 –name TestApp –path ~/workspace/TestApp –activity MainActivity –package com.example.testapp
aapt在sdk中的build-tools中找到,从build-tools中选最新的版本的aapt appt的使用方法
aapt package -f -M ${manifest.file}
-F ${packaged.resource.file}
-I ${path.to.android-jar.library}
-S ${android-resource-directory}
[-m -J ${folder.to.output.the.R.java}]
实践:
mkdir ~/workspace/TestApp/gen
./aapt package -f -M ~/workspace/TestApp/AndroidManifest.xml \
-F ~/workspace/TestApp/bin/resources.arsc \
-I ~/Android/SDK/platforms/android-21/android.jar \
-S ~/workspace/TestApp/res/ \
-m -J ~/workspace/TestApp/gen/
aidl -p ${android-framework} -I ${srcdir} dir="${srcdir}" ${.aidl files}
这里我们没有.aidl文件,所以跳过
使用javac编译所有的.java文件
mkdir ~/workspace/TestApp/bin/classes
javac -encoding UTF-8 -source 1.6 -target 1.6 \
-bootclasspath ~/Android/SDK/platforms/android-21/android.jar \
-d ~/workspace/TestApp/bin/classes \
~/workspace/TestApp/src/com/example/testapp/*.java \
~/workspace/TestApp/gen/com/example/testapp/R.java
生成dex文件的工具是dx,跟aapt在同一目录。 dx用法:
dx -–dex --dump-to ${output.dex.file} --core-library ${compiled.classes.directory}
实践:
./dx --dex --dump-to ~/workspace/TestApp/bin/classes.dex \
--core-library ~/workspace/TestApp/bin/classes
注意在我使用的build-tools/21.1.2中的dx还不兼容使用jdk 8及以上版本,所以在用javac编译时需指定source和target为1.6或1.7。这点需要注意,不然会出现下面的异常
UNEXPECTED TOP-LEVEL EXCEPTION:
打包所有文件成apk文件使用的工具是apkbuilder,不过在较新的android sdk中取消了这个工具,不过apkbuilder只是个批处理文件,我们可以自己生成它。在sdk/tools目录中:
cat android | sed -e 's/com.android.sdkmanager.Main/com.android.sdklib.build.ApkBuilderMain/g' > apkbuilder
chmod a+x apkbuilder
详情查看stackoverflow的这个问答 apkbuilder用法:
apkbuilder ${output.apk.file} -u -z ${packagedresource.file} -f ${dex.file}
实践:
mkdir ~/workspace/TestApp/build
./apkbuilder ~/workspace/TestApp/build/TestApp-unsigned.apk -u \
-z ~/workspace/TestApp/bin/resources.arsc \
-f ~/workspace/TestApp/bin/classes.dex
apk需要正确的签名才能在android系统上安装,要签名apk就需要密钥key。生成key使用jdk中的keytool生成密钥证书
keytool -genkeypair -alias ${别名} -keyalg RSA -keystore ${keystore文件的路径+文件名}.keystore
实践:
keytool -genkeypair -alias "testkey" -keyalg "RSA" -keystore "test.keystore"
输入之后回答一堆问题之后就会生成.keystore文件 在debug的时候可以使用googleg提供的debug key,debug证书存放可以在$HOME/.android/debug.keystore中。 下一步是使用jarsigner给apk文件签名
jarsigner -keystore ${keystore} -storepass ${keystore.password} -keypass ${keypass密钥别名密码} -signedjar ${signed.apkfile} ${unsigned.apkfile} ${keyalias密钥别名}
实践:
jarsigner -keystore test.keystore -storepass 1234567890 -keypass 1234567890 -signedjar \
~/workspace/TestApp/build/TestApp-signed.apk \
~/workspace/TestApp/buildTestApp-unsigned.apk testkey
由上可见,apk的构建非常的繁杂。不过好在android应用在创建的时候就已经配置好ant自动构建脚本了。在项目主目录下直接
ant debug
就可在bin下生成debug模式的apk 生产release使用
ant release