`

命令行开发、编译、打包Android应用程序(转载)

 
阅读更多
转载自 ericxu21.blog.chinaunix.net 的博客

 


 

Android SDK提供了一系列命令行工具,用来进行Android应用的开发、调试、打包等工作!Eclipse能够进行Android应用开发的相关工作,也是调用了这些工具而已.

只有掌握了命令下的工作方式,工作起来才会更加的得心应手.下面就抛开Eclipse集成开发工具,徒手走一遍Android开发、编译、打包的流程!

注:本文只作参考之用,因为LBSDemo工程中有本人自己加入的代码,有第三方jar包,so文件等等!故一步一步按照本文操作是行不通的!


1:创建Android应用程序

Android SDK提供了一个android.bat批处理工具,它可以用来处理以下工作,这里只介绍它的子命令create project来进行程序的创建.


  1. D:\Android>android --help
  2. Usage:
  3.   android [global options] action [action options]

  4. Global options:
  5.   -v --verbose  Verbose mode: errors, warnings and informational messages are pr
  6. inted.
  7.   -h --help     Help on a specific command.
  8.   -s --silent   Silent mode: only errors are printed out.

  9. Valid actions are composed of a verb and an optional direct object:
  10. -   list               : Lists existing targets or virtual devices.
  11. -   list avd           : Lists existing Android Virtual Devices.
  12. -   list target        : Lists existing targets.
  13. - create avd           : Creates a new Android Virtual Device.
  14. -   move avd           : Moves or renames an Android Virtual Device.
  15. - delete avd           : Deletes an Android Virtual Device.
  16. - update avd           : Updates an Android Virtual Device to match the folders
  17. of a new SDK.
  18. - create project       : Creates a new Android project.
  19. - update project       : Updates an Android project (must already have an Androi
  20. dManifest.xml).
  21. - create test-project  : Creates a new Android project for a test package.
  22. - update test-project  : Updates the Android project for a test package (must al
  23. ready have an AndroidManifest.xml).
  24. - create lib-project   : Creates a new Android library project.
  25. - update lib-project   : Updates an Android library project (must already have a
  26. n AndroidManifest.xml).
  27. - update adb           : Updates adb to support the USB devices declared in the
  28. SDK add-ons.
  29. - update sdk           : Updates the SDK by suggesting new platforms to install
  30. if available.
复制代码
--create project子命令的用法如下:

  1. Action "create project":
  2. Creates a new Android project.
  3. Options:
  4. -n --name     应用程序的名字
  5. -t --target   SDK Target ID
  6. -p --path     应用程序的工作目录
  7. -k --package  应用程序的包名
  8. -a --activity 默认创建的Activity的名字
复制代码
了解了相关命令及其用法,现在就可以用之来创建应用程序:在D:\Android工作目录下创建LBSDemo程序 1.png命令自动创建了如下内容:
2.png
2:编译Android应用程序 A:生成R.java文件Android程序代码中会大量地引用各类资源文件,这些资源文件不是通过手动进行引用的,AndroidSDK提供了一个R.java类来进行资源的管理,方便程序员对资源文件的引用及管理,所以如果要让程序编译通过,首先就需要生成R.java类。 编译R.java类需要用到AndroidSDK提供的aapt工具,aapt参数众多,以下是主要参数:
  1. -d  one or more device assets to include, separated by commas
  2.   -f  force overwrite of existing files
  3.   -g  specify a pixel tolerance to force images to grayscale, default 0
  4.   -j  specify a jar or zip file containing classes to include
  5.   -k  junk path of file(s) added
  6.   -m  make package directories under location specified by -J
  7.   -u  update existing packages (add new, replace older, remove deleted files)
  8.   -v  verbose output
  9.   -x  create extending (non-application) resource IDs
  10.   -z  require localization of resource attributes marked with
  11.       localization="suggested"
  12.   -A  additional directory in which to find raw asset files
  13.   -G  A file to output proguard options into.
  14.   -F  specify the apk file to output
  15.   -I  add an existing package to base include set
  16.   -J  specify where to output R.java resource constant definitions
  17.   -M  specify full path to AndroidManifest.xml to include in zip
  18.   -P  specify where to output public resource definitions
  19.   -S  directory in which to find resources.  Multiple directories will be scann
  20. d
复制代码
aapt编译R.java文件具体如下:需要进入LBSDemo应用程序目录,新建一个gen目录,没有gen目录,命令将会出现找不到文件的错误!命令成功执行后将会在gen目录下生成成包结构的目录树,及R.java文件!

3.png
参数说明
  1. -f -m -J gen :以覆盖的形式在gen目录下生成带包路径的R.java

  2. -S res:指定资源文件

  3. -I E:\Android\SDK\android-sdk_r09-windows\platforms\android-7\android.jar:使用指定版本的android jar包

  4. -M AndroidManifest.xml:指定程序的配置文件
复制代码
B:根据.aidl定义文件生成java文件 将.aidl文件生成.java文件需要用到AndroidSDK自带的aidl工具,此工具具体参数如下:
  1. -I<DIR>    search path for import statements.
  2. -d<FILE>   generate dependency file.
  3. -p<FILE>   file created by --preprocess to import.
  4. -o<FOLDER> base output folder for generated files.
  5. -b         fail when trying to compile a parcelable.
复制代码
值得注意的是:这个工具的参数与参数值之间不能有空格,Google也有对工资不满意的工程师!  
4.png
C:用JAVASDK提供的javac命令工具将.java源文件编译为.class文件javac命令用法如下:
  1. 其中,可能的选项包括:
  2.   -g                         生成所有调试信息
  3.   -g:none                    不生成任何调试信息
  4.   -g:{lines,vars,source}     只生成某些调试信息
  5.   -nowarn                    不生成任何警告
  6.   -verbose                   输出有关编译器正在执行的操作的消息
  7.   -deprecation               输出使用已过时的 API 的源位置
  8.   -classpath <路径>            指定查找用户类文件和注释处理程序的位置
  9.   -cp <路径>                   指定查找用户类文件和注释处理程序的位置
  10.   -sourcepath <路径>           指定查找输入源文件的位置
  11.   -bootclasspath <路径>        覆盖引导类文件的位置
  12.   -extdirs <目录>              覆盖安装的扩展目录的位置
  13.   -endorseddirs <目录>         覆盖签名的标准路径的位置
  14.   -proc:{none,only}          控制是否执行注释处理和/或编译。
  15.   -processor <class1>[,<class2>,<class3>...]要运行的注释处理程序的名称;绕过默认
  16. 的搜索进程
  17.   -processorpath <路径>        指定查找注释处理程序的位置
  18.   -d <目录>                    指定存放生成的类文件的位置
  19.   -s <目录>                    指定存放生成的源文件的位置
  20.   -implicit:{none,class}     指定是否为隐式引用文件生成类文件
  21.   -encoding <编码>             指定源文件使用的字符编码
  22.   -source <版本>               提供与指定版本的源兼容性
  23.   -target <版本>               生成特定 VM 版本的类文件
  24.   -version                   版本信息
  25.   -help                      输出标准选项的提要
  26.   -Akey[=value]              传递给注释处理程序的选项
  27.   -X                         输出非标准选项的提要
  28.   -J<标志>                     直接将 <标志> 传递给运行时系统
复制代码
具体如下[因为需要编译的.java文件分布在不同的文件夹下,故写了多个*.java文件路径.引用了第三方Jar包,故要将jar包指定入classpath]:

5.png   
D:使用Android SDK提供的dx.bat命令行脚本生成classes.dex文件将工程bin目录下的class文件编译成classes.dex,Android虚拟机只能执行dex文件!
6.png
命令生成的.dex文件如下
7.png   
E:使用Android SDK提供的aapt.exe生成资源包文件(包括res、assets、androidmanifest.xml等):aapt用法参考上面!
8.png
命令生成的.ap_文件如下:
9.png    
F:利用AndroidSDK提供的apkbuilder工具生成未签名的APK文件重要参数如下:
  1. -v      Verbose.
  2. -d      Debug Mode: Includes debug files in the APK file.
  3. -u      Creates an unsigned package.
  4. -storetype Forces the KeyStore type. If ommited the default is used.

  5. -z      Followed by the path to a zip archive.
  6.         Adds the content of the application package.

  7. -f      Followed by the path to a file.
  8.         Adds the file to the application package.

  9. -rf     Followed by the path to a source folder.
  10.         Adds the java resources found in that folder to the application
  11.         package, while keeping their path relative to the source folder.

  12. -rj     Followed by the path to a jar file or a folder containing
  13.         jar files.
  14.         Adds the java resources found in the jar file(s) to the application
  15.         package.

  16. -nf     Followed by the root folder containing native libraries to
  17.         include in the application package.
复制代码
注:1,如果需要将so文件打包进apk,一定要加上-nf参数  2,如果第三方jar包里含有图片资源,一定要加上-rj参数,不然jar包里资源文件解不出来,程序会因为无法引用资源而报错!
10.png11.png
命令生成的.apk文件

12.png   
H:利用JAVASDK提供的keytools工具生成证书文件!上面只是生成了一个没有证书的apk文件,Android是不会去安装一个没有数字证书签名的apk包的,所以需要安装apk的话,必须用一个数字证书对其签名后,才可! 13.png


此处输入命令后,此命令会与用户产生交互,如果你不想产生交互的情况,那么就要提前把命令想问的都告诉它! keytool -genkey -alias HelloWorld.keystore -keyalg RSA -validity 1000 -keystore HelloWorld.keystore -dname "CN=w,OU=w,O=localhost,L=w,ST=w,C=CN" -keypass 123456 -storepass 123456 命令生成的.keystore文件如下:


14.png   


I:最后一步,通过jarsigner命令用证书文件对未签名的APK文件进行签名重要参数如下:
  1. [-keystore <url>]           密钥库位置

  2. [-storepass <口令>]         用于密钥库完整性的口令

  3. [-storetype <类型>]         密钥库类型

  4. [-keypass <口令>]           专用密钥的口令(如果不同)

  5. [-sigfile <文件>]           .SF/.DSA 文件的名称

  6. [-signedjar <文件>]         已签名的 JAR 文件的名称

  7. [-digestalg <算法>]    摘要算法的名称

  8. [-sigalg <算法>]       签名算法的名称

  9. [-verify]                   验证已签名的 JAR 文件

  10. [-verbose]                  签名/验证时输出详细信息

  11. [-certs]                    输出详细信息和验证时显示证书

  12. [-tsa <url>]                时间戳机构的位置

  13. [-tsacert <别名>]           时间戳机构的公共密钥证书

  14. [-altsigner <类>]           替代的签名机制的类名

  15. [-altsignerpath <路径列表>] 替代的签名机制的位置

  16. [-internalsf]               在签名块内包含 .SF 文件

  17. [-sectionsonly]             不计算整个清单的散列

  18. [-protected]                密钥库已保护验证路径

  19. [-providerName <名称>]      提供者名称

  20. [-providerClass <类>        加密服务提供者的名称
  21.   [-providerArg <参数>]] ... 主类文件和构造函数参数
复制代码
具体用法如下:

15.png 16.png


大功告成,终于完成了!
17.png


总结:通过对这些命令的运用,你才能清楚地知道程序开发、编译、打包的每一个细节、才知道Eclipse是如何工作的、就算换了一个集成开发工具、也能很快得心应手!甚至能开发一套与Eclipse里打包一样功能的工具呢!下面的就是本人对上面命令的一个总结!如果公司需要,你也可以动手写一个!

18.png


19.png 

 

分享到:
评论

相关推荐

    Android命令行手动编译打包详解

    Android 命令行手动编译打包详解!!学习Android必备书籍!!

    Android Apk命令行编译签名打包大全

    这里详细的介绍了如何使用命令编译apk 签名 打包,很实用,如果你是Android开发者一定要知道如何编译签名apk

    构建Adobe AIR应用程序

    在 Flash Professional 中创建您的第一个 AIR for Android 应用程序 创建第一个用于 iOS 的 AIR 应用程序 使用 Dreamweaver 创建第一个基于 HTML 的 AIR 应用程序 使用 AIR SDK 创建第一个基于 HTML 的 AIR 应用...

    android开发资料大全

    命令行开发、编译、打包Android应用程序汇总大全 Android 动画效果二 Frame Animation 动画专题研究 Android新浪客户端开发教程(完整版)汇总大全 Android多媒体实例大汇集(源码,全) Android中利用画图类和线程...

    Google Android SDK开发范例大全(完整版)

    虽然没有 Eclipse 和 Android Developer Tools 插件也可以开发 Android 应用程序,但是那样就需要熟悉 Android SDK。 Android SDK 是作为一个 ZIP 文件发布的,可以将该文件解压到硬盘上的一个目录中。由于有多个 ...

    Android 最新反编译工具(2013-06)

    二、apk反编译生成程序的源代码和图片、XML配置、语言资源等文件 如果是汉化软件,这将特别有用 首先还是要下载此反编译工具包,其中包含最新的apktool 1.5 具体步骤: 下载反编译工具包,打开apk2java目录下的...

    unity3d编译移动MM Android项目教程

    本工具是为了解决unity打包完成后缺少关键的3个配置文件mmiap.xml、CopyrightDeclaration.xml和VERSION3(在mmbilling.jar包中可得)的问题。 1、首先你要在Unity3d中生成集成好MMSDK的apk包。(别忘了把mmbilling....

    android_最新_反编译工具.7z

    准备一个测试apk(eclipse或androidstudio打包,混淆文件为eclipse或androidstudio默认带的),如Test_android.apk,复制一个副本重命名为Test_android.zip,然后解压,你就可以看到一些东西了,不过这种方式看到的大...

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    android安卓反编译

    一、apk反编译得到程序的源代码、图片、XML配置、语言资源等文件 下载上述工具中的apktool,解压得到3个文件:aapt.exe,apktool.bat,apktool.jar ,将需要反编译的APK文件放到该目录下, 打开命令行界面(运行-CMD...

    Android APK反编译工具包(全)

    二、apk反编译生成程序的源代码和图片、XML配置、语言资源等文件 如果是汉化软件,这将特别有用 首先还是要下载此反编译工具包,其中包含最新的apktool 1.5 具体步骤: 下载反编译工具包,打开apk2java目录下的...

    Android反编译工具 APK反编译工具

    android反编译工具 附带反编译说明: 具体步骤: 首先将apk文件后缀改为zip并解压 得到其中的classes dex 它就是java文件编译再通过dx工具打包而成的 将classes dex复制到dex2jar bat所在目录 dex2jar 0 0 9 9文件夹...

    不用 IDE,仅用命令行和 SDK 开发 Android App

    文章目录1.新建项目文件夹2.创建 java 代码所在文件夹3.创建 java 文件4.创建 AndroidManifest.xml 文件5....启动 Android 模拟器14.安装 apk15.启动 app参考文章 1.新建项目文件夹 mkdir Hello 进入该文件夹

    mac Android反编译

    Android mac下反编译 apktool 反编译得到的是布局和资源文件。 dex2jar 反编译得到的代码字节码,利用jd gui就可以查看到源代码。 1.apktool安装 1)下载apktool,及mac下apk-install-macosx 2)解压这两个文件...

    androidPackDemo:android应用程序自动化打包demo

    在android根目录下命令行 ./gradlew assemble{BuildType}编译方式所有productflavor都会输出 ./gradlew assemble{productFlavor}{BuildType}指定./gradlew assemble{productFlavor}{BuildType}体输出文件 ./gra

    auto-cocos:一键打包cocos工程的Android包

    所以不能用Cocos Creator直接编译生成apk,一般的操作会先用Cocos Creator生成一个安卓工程,然后将安卓工程复制到另一个目录,然后安卓工程添加所需要的功能,再用Android Studio来打包apk。需要用到资源更新时,用...

    apk反编译,打包及签名工具(附详细使用说明)

    APKtool软件包有2个程序组成:apktool.jar 和 aapt.exe 另外提供一个批处理文件:apktool.bat,其内容为: java -jar "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9 运行apktools.jar需要java环境(1.6.0版本以上...

    android 源码反编译.rar

    android 源码反编译.rar android 源码 反编译 一.反编译Apk得到Java源代码 转载自:http://hi.baidu.com/%CB%BF%D4%B5%CC%EC%CF%C2/blog/item/2284e2debafc541e495403ec.html 工具下载:需用到dex2jar和JD-GUI这2...

    Android反编译工具(完整+介绍)

    反编译apk生成程序的源代码和图片、XML配置、语言资源等文件 如果是只是汉化软件,这将特别有用。首先还是下载工具,这次用到的是apktool,下载地址: http://code.google.com/p/android-apktool/,apktool-1.0.0....

Global site tag (gtag.js) - Google Analytics