命令行开发、编译、打包Android应用程序
2012-01-10 22:24
337 查看
AndroidSDK提供了一系列命令行工具,用来进行Android应用的开发、调试、打包等工作!Eclipse能够进行Android应用开发的相关工作,也是调用了这些工具而已.
只有掌握了命令下的工作方式,工作起来才会更加的得心应手.下面就抛开Eclipse集成开发工具,徒手走一遍Android开发、编译、打包的流程!
注:本文只作参考之用,因为LBSDemo工程中有本人自己加入的代码,有第三方jar包,so文件等等!故一步一步按照本文操作是行不通的!
1:创建Android应用程序
AndroidSDK提供了一个android.bat批处理工具,它可以用来处理以下工作,这里只介绍它的子命令createproject来进行程序的创建.
D:\Android>android--help
Usage:
android[globaloptions]action[actionoptions]
Globaloptions:
-v--verboseVerbosemode:errors,warningsandinformationalmessagesarepr
inted.
-h--helpHelponaspecificcommand.
-s--silentSilentmode:onlyerrorsareprintedout.
Validactionsarecomposedofaverbandanoptionaldirectobject:
-list:Listsexistingtargetsorvirtualdevices.
-listavd:ListsexistingAndroidVirtualDevices.
-listtarget:Listsexistingtargets.
-createavd:CreatesanewAndroidVirtualDevice.
-moveavd:MovesorrenamesanAndroidVirtualDevice.
-deleteavd:DeletesanAndroidVirtualDevice.
-updateavd:UpdatesanAndroidVirtualDevicetomatchthefolders
ofanewSDK.
-createproject:CreatesanewAndroidproject.
-updateproject:UpdatesanAndroidproject(mustalreadyhaveanAndroi
dManifest.xml).
-createtest-project:CreatesanewAndroidprojectforatestpackage.
-updatetest-project:UpdatestheAndroidprojectforatestpackage(mustal
readyhaveanAndroidManifest.xml).
-createlib-project:CreatesanewAndroidlibraryproject.
-updatelib-project:UpdatesanAndroidlibraryproject(mustalreadyhavea
nAndroidManifest.xml).
-updateadb:UpdatesadbtosupporttheUSBdevicesdeclaredinthe
SDKadd-ons.
-updatesdk:UpdatestheSDKbysuggestingnewplatformstoinstall
ifavailable.
--createproject子命令的用法如下:Action"createproject":
CreatesanewAndroidproject.
Options:
-n--name应用程序的名字
-t--targetSDKTargetID
-p--path应用程序的工作目录
-k--package应用程序的包名
-a--activity默认创建的Activity的名字
了解了相关命令及其用法,现在就可以用之来创建应用程序:在D:\Android工作目录下创建LBSDemo程序
命令自动创建了如下内容:
2:编译Android应用程序
A:生成R.java文件
Android程序代码中会大量地引用各类资源文件,这些资源文件不是通过手动进行引用的,AndroidSDK提供了一个R.java类来进行资源的管理,方便程序员对资源文件的引用及管理,所以如果要让程序编译通过,首先就需要生成R.java类。
编译R.java类需要用到AndroidSDK提供的aapt工具,aapt参数众多,以下是主要参数:-doneormoredeviceassetstoinclude,separatedbycommas
-fforceoverwriteofexistingfiles
-gspecifyapixeltolerancetoforceimagestograyscale,default0
-jspecifyajarorzipfilecontainingclassestoinclude
-kjunkpathoffile(s)added
-mmakepackagedirectoriesunderlocationspecifiedby-J
-uupdateexistingpackages(addnew,replaceolder,removedeletedfiles)
-vverboseoutput
-xcreateextending(non-application)resourceIDs
-zrequirelocalizationofresourceattributesmarkedwith
localization="suggested"
-Aadditionaldirectoryinwhichtofindrawassetfiles
-GAfiletooutputproguardoptionsinto.
-Fspecifytheapkfiletooutput
-Iaddanexistingpackagetobaseincludeset
-JspecifywheretooutputR.javaresourceconstantdefinitions
-MspecifyfullpathtoAndroidManifest.xmltoincludeinzip
-Pspecifywheretooutputpublicresourcedefinitions
-Sdirectoryinwhichtofindresources.Multipledirectorieswillbescann
d
aapt编译R.java文件具体如下:
需要进入LBSDemo应用程序目录,新建一个gen目录,没有gen目录,命令将会出现找不到文件的错误!
命令成功执行后将会在gen目录下生成成包结构的目录树,及R.java文件!
参数说明
-f-m-Jgen:以覆盖的形式在gen目录下生成带包路径的R.java
-Sres:指定资源文件
-IE:\Android\SDK\android-sdk_r09-windows\platforms\android-7\android.jar:使用指定版本的androidjar包
-MAndroidManifest.xml:指定程序的配置文件
B:根据.aidl定义文件生成java文件
将.aidl文件生成.java文件需要用到AndroidSDK自带的aidl工具,此工具具体参数如下:-I<DIR>searchpathforimportstatements.
-d<FILE>generatedependencyfile.
-p<FILE>filecreatedby--preprocesstoimport.
-o<FOLDER>baseoutputfolderforgeneratedfiles.
-bfailwhentryingtocompileaparcelable.值得注意的是:这个工具的参数与参数值之间不能有空格,Google也有对工资不满意的工程师!
C:用JAVASDK提供的javac命令工具将.java源文件编译为.class文件
javac命令用法如下:其中,可能的选项包括:
-g生成所有调试信息
-g:none不生成任何调试信息
-g:{lines,vars,source}只生成某些调试信息
-nowarn不生成任何警告
-verbose输出有关编译器正在执行的操作的消息
-deprecation输出使用已过时的API的源位置
-classpath<路径>指定查找用户类文件和注释处理程序的位置
-cp<路径>指定查找用户类文件和注释处理程序的位置
-sourcepath<路径>指定查找输入源文件的位置
-bootclasspath<路径>覆盖引导类文件的位置
-extdirs<目录>覆盖安装的扩展目录的位置
-endorseddirs<目录>覆盖签名的标准路径的位置
-proc:{none,only}控制是否执行注释处理和/或编译。
-processor<class1>[,<class2>,<class3>...]要运行的注释处理程序的名称;绕过默认
的搜索进程
-processorpath<路径>指定查找注释处理程序的位置
-d<目录>指定存放生成的类文件的位置
-s<目录>指定存放生成的源文件的位置
-implicit:{none,class}指定是否为隐式引用文件生成类文件
-encoding<编码>指定源文件使用的字符编码
-source<版本>提供与指定版本的源兼容性
-target<版本>生成特定VM版本的类文件
-version版本信息
-help输出标准选项的提要
-Akey[=value]传递给注释处理程序的选项
-X输出非标准选项的提要
-J<标志>直接将<标志>传递给运行时系统
具体如下[因为需要编译的.java文件分布在不同的文件夹下,故写了多个*.java文件路径.引用了第三方Jar包,故要将jar包指定入classpath]:
D:使用AndroidSDK提供的dx.bat命令行脚本生成classes.dex文件
将工程bin目录下的class文件编译成classes.dex,Android虚拟机只能执行dex文件!
命令生成的.dex文件如下
E:使用AndroidSDK提供的aapt.exe生成资源包文件(包括res、assets、androidmanifest.xml等):
aapt用法参考上面!
命令生成的.ap_文件如下:
F:利用AndroidSDK提供的apkbuilder工具生成未签名的APK文件
重要参数如下:-vVerbose.
-dDebugMode:IncludesdebugfilesintheAPKfile.
-uCreatesanunsignedpackage.
-storetypeForcestheKeyStoretype.Ifommitedthedefaultisused.
-zFollowedbythepathtoaziparchive.
Addsthecontentoftheapplicationpackage.
-fFollowedbythepathtoafile.
Addsthefiletotheapplicationpackage.
-rfFollowedbythepathtoasourcefolder.
Addsthejavaresourcesfoundinthatfoldertotheapplication
package,whilekeepingtheirpathrelativetothesourcefolder.
-rjFollowedbythepathtoajarfileorafoldercontaining
jarfiles.
Addsthejavaresourcesfoundinthejarfile(s)totheapplication
package.
-nfFollowedbytherootfoldercontainingnativelibrariesto
includeintheapplicationpackage.
注:1,如果需要将so文件打包进apk,一定要加上-nf参数
2,如果第三方jar包里含有图片资源,一定要加上-rj参数,不然jar包里资源文件解不出来,程序会因为无法引用资源而报错!
命令生成的.apk文件
H:利用JAVASDK提供的keytools工具生成证书文件!
上面只是生成了一个没有证书的apk文件,Android是不会去安装一个没有数字证书签名的apk包的,所以需要安装apk的话,必须用一个数字证书对其签名后,才可!
此处输入命令后,此命令会与用户产生交互,如果你不想产生交互的情况,那么就要提前把命令想问的都告诉它!
keytool-genkey-aliasHelloWorld.keystore-keyalgRSA-validity1000-keystoreHelloWorld.keystore-dname"CN=w,OU=w,O=localhost,L=w,ST=w,C=CN"-keypass123456-storepass123456
命令生成的.keystore文件如下:
I:最后一步,通过jarsigner命令用证书文件对未签名的APK文件进行签名
重要参数如下:[-keystore<url>]密钥库位置
[-storepass<口令>]用于密钥库完整性的口令
[-storetype<类型>]密钥库类型
[-keypass<口令>]专用密钥的口令(如果不同)
[-sigfile<文件>].SF/.DSA文件的名称
[-signedjar<文件>]已签名的JAR文件的名称
[-digestalg<算法>]摘要算法的名称
[-sigalg<算法>]签名算法的名称
[-verify]验证已签名的JAR文件
[-verbose]签名/验证时输出详细信息
[-certs]输出详细信息和验证时显示证书
[-tsa<url>]时间戳机构的位置
[-tsacert<别名>]时间戳机构的公共密钥证书
[-altsigner<类>]替代的签名机制的类名
[-altsignerpath<路径列表>]替代的签名机制的位置
[-internalsf]在签名块内包含.SF文件
[-sectionsonly]不计算整个清单的散列
[-protected]密钥库已保护验证路径
[-providerName<名称>]提供者名称
[-providerClass<类>加密服务提供者的名称
[-providerArg<参数>]]...主类文件和构造函数参数
具体用法如下:
大功告成,终于完成了!
总结:
通过对这些命令的运用,你才能清楚地知道程序开发、编译、打包的每一个细节、才知道Eclipse是如何工作的、就算换了一个集成开发工具、也能很快得心应手!甚至能开发一套与Eclipse里打包一样功能的工具呢!下面的就是本人对上面命令的一个总结!如果公司需要,你也可以动手写一个!
只有掌握了命令下的工作方式,工作起来才会更加的得心应手.下面就抛开Eclipse集成开发工具,徒手走一遍Android开发、编译、打包的流程!
注:本文只作参考之用,因为LBSDemo工程中有本人自己加入的代码,有第三方jar包,so文件等等!故一步一步按照本文操作是行不通的!
1:创建Android应用程序
AndroidSDK提供了一个android.bat批处理工具,它可以用来处理以下工作,这里只介绍它的子命令createproject来进行程序的创建.
--createproject子命令的用法如下:
了解了相关命令及其用法,现在就可以用之来创建应用程序:在D:\Android工作目录下创建LBSDemo程序
命令自动创建了如下内容:
2:编译Android应用程序
A:生成R.java文件
Android程序代码中会大量地引用各类资源文件,这些资源文件不是通过手动进行引用的,AndroidSDK提供了一个R.java类来进行资源的管理,方便程序员对资源文件的引用及管理,所以如果要让程序编译通过,首先就需要生成R.java类。
编译R.java类需要用到AndroidSDK提供的aapt工具,aapt参数众多,以下是主要参数:
aapt编译R.java文件具体如下:
需要进入LBSDemo应用程序目录,新建一个gen目录,没有gen目录,命令将会出现找不到文件的错误!
命令成功执行后将会在gen目录下生成成包结构的目录树,及R.java文件!
参数说明
B:根据.aidl定义文件生成java文件
将.aidl文件生成.java文件需要用到AndroidSDK自带的aidl工具,此工具具体参数如下:
-d<FILE>generatedependencyfile.
-p<FILE>filecreatedby--preprocesstoimport.
-o<FOLDER>baseoutputfolderforgeneratedfiles.
-bfailwhentryingtocompileaparcelable.
C:用JAVASDK提供的javac命令工具将.java源文件编译为.class文件
javac命令用法如下:
-g生成所有调试信息
-g:none不生成任何调试信息
-g:{lines,vars,source}只生成某些调试信息
-nowarn不生成任何警告
-verbose输出有关编译器正在执行的操作的消息
-deprecation输出使用已过时的API的源位置
-classpath<路径>指定查找用户类文件和注释处理程序的位置
-cp<路径>指定查找用户类文件和注释处理程序的位置
-sourcepath<路径>指定查找输入源文件的位置
-bootclasspath<路径>覆盖引导类文件的位置
-extdirs<目录>覆盖安装的扩展目录的位置
-endorseddirs<目录>覆盖签名的标准路径的位置
-proc:{none,only}控制是否执行注释处理和/或编译。
-processor<class1>[,<class2>,<class3>...]要运行的注释处理程序的名称;绕过默认
的搜索进程
-processorpath<路径>指定查找注释处理程序的位置
-d<目录>指定存放生成的类文件的位置
-s<目录>指定存放生成的源文件的位置
-implicit:{none,class}指定是否为隐式引用文件生成类文件
-encoding<编码>指定源文件使用的字符编码
-source<版本>提供与指定版本的源兼容性
-target<版本>生成特定VM版本的类文件
-version版本信息
-help输出标准选项的提要
-Akey[=value]传递给注释处理程序的选项
-X输出非标准选项的提要
-J<标志>直接将<标志>传递给运行时系统
具体如下[因为需要编译的.java文件分布在不同的文件夹下,故写了多个*.java文件路径.引用了第三方Jar包,故要将jar包指定入classpath]:
D:使用AndroidSDK提供的dx.bat命令行脚本生成classes.dex文件
将工程bin目录下的class文件编译成classes.dex,Android虚拟机只能执行dex文件!
命令生成的.dex文件如下
E:使用AndroidSDK提供的aapt.exe生成资源包文件(包括res、assets、androidmanifest.xml等):
aapt用法参考上面!
命令生成的.ap_文件如下:
F:利用AndroidSDK提供的apkbuilder工具生成未签名的APK文件
重要参数如下:
-dDebugMode:IncludesdebugfilesintheAPKfile.
-uCreatesanunsignedpackage.
-storetypeForcestheKeyStoretype.Ifommitedthedefaultisused.
-zFollowedbythepathtoaziparchive.
Addsthecontentoftheapplicationpackage.
-fFollowedbythepathtoafile.
Addsthefiletotheapplicationpackage.
-rfFollowedbythepathtoasourcefolder.
Addsthejavaresourcesfoundinthatfoldertotheapplication
package,whilekeepingtheirpathrelativetothesourcefolder.
-rjFollowedbythepathtoajarfileorafoldercontaining
jarfiles.
Addsthejavaresourcesfoundinthejarfile(s)totheapplication
package.
-nfFollowedbytherootfoldercontainingnativelibrariesto
includeintheapplicationpackage.
注:1,如果需要将so文件打包进apk,一定要加上-nf参数
2,如果第三方jar包里含有图片资源,一定要加上-rj参数,不然jar包里资源文件解不出来,程序会因为无法引用资源而报错!
命令生成的.apk文件
H:利用JAVASDK提供的keytools工具生成证书文件!
上面只是生成了一个没有证书的apk文件,Android是不会去安装一个没有数字证书签名的apk包的,所以需要安装apk的话,必须用一个数字证书对其签名后,才可!
此处输入命令后,此命令会与用户产生交互,如果你不想产生交互的情况,那么就要提前把命令想问的都告诉它!
keytool-genkey-aliasHelloWorld.keystore-keyalgRSA-validity1000-keystoreHelloWorld.keystore-dname"CN=w,OU=w,O=localhost,L=w,ST=w,C=CN"-keypass123456-storepass123456
命令生成的.keystore文件如下:
I:最后一步,通过jarsigner命令用证书文件对未签名的APK文件进行签名
重要参数如下:
[-storepass<口令>]用于密钥库完整性的口令
[-storetype<类型>]密钥库类型
[-keypass<口令>]专用密钥的口令(如果不同)
[-sigfile<文件>].SF/.DSA文件的名称
[-signedjar<文件>]已签名的JAR文件的名称
[-digestalg<算法>]摘要算法的名称
[-sigalg<算法>]签名算法的名称
[-verify]验证已签名的JAR文件
[-verbose]签名/验证时输出详细信息
[-certs]输出详细信息和验证时显示证书
[-tsa<url>]时间戳机构的位置
[-tsacert<别名>]时间戳机构的公共密钥证书
[-altsigner<类>]替代的签名机制的类名
[-altsignerpath<路径列表>]替代的签名机制的位置
[-internalsf]在签名块内包含.SF文件
[-sectionsonly]不计算整个清单的散列
[-protected]密钥库已保护验证路径
[-providerName<名称>]提供者名称
[-providerClass<类>加密服务提供者的名称
[-providerArg<参数>]]...主类文件和构造函数参数
具体用法如下:
大功告成,终于完成了!
总结:
通过对这些命令的运用,你才能清楚地知道程序开发、编译、打包的每一个细节、才知道Eclipse是如何工作的、就算换了一个集成开发工具、也能很快得心应手!甚至能开发一套与Eclipse里打包一样功能的工具呢!下面的就是本人对上面命令的一个总结!如果公司需要,你也可以动手写一个!
相关文章推荐
- 命令行开发、编译、打包Android应用程序
- 命令行开发、编译、打包Android应用程序
- 命令行开发、编译、打包Android应用程序
- 命令行开发、编译、打包Android应用程序
- Android_应用程序资源的编译和打包过程分析
- Android应用程序的编译和打包
- Android应用程序(APK)的编译打包过程
- Android应用程序的编译和打包
- 基于命令行编译打包phonegap for android应用
- Android 命令行手动编译打包详解
- 【iOS-cocos2d-X 游戏开发之七】整合Cocos2dX的Android项目到Xcode项目中,Xcode编写&编译代码,Android导入打包运行即可!
- Android 命令行编译、打包生成apk文件
- Android命令行手动编译打包详解
- Linux 下使用命令行开发 Android 应用程序~~玩玩还行
- 在cmd环境下创建、编译、打包android应用程序
- Android应用程序资源的编译和打包过程分析
- Android系列之Android 命令行手动编译打包详解
- Android应用程序资源的编译和打包过程分析
- Windows中使用命令行方式编译打包Android项目
- Android系列之Android 命令行手动编译打包详解