命令行开发、编译、打包Android应用程序

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.png 11.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里打包一样功能的工具呢!下面的就是本人对上面命令的一个总结!如果公司需要,你也可以动手写一个!
3D Slicer:从入门到精通——数据模块之DICOM 该模块允许导入、导出和网络传输DICOM数据。Slicer支持DICOM功能的常用子集,其特定功能由临床研究的需求驱动:从磁盘读取和写入数据集,并通过DIMSE和DICOMweb网络协议进行网络传输——查询检索发送和接收数据集。医学数字成像和通信(DICOM)是信息交换数字放射学的广泛使用标准。在大多数情况下,医院使用的成像设备(CT和MR扫描仪)将生成保存为DICOM对象的图像。DICOM按以下层次结构组织数据患者… 可以有1个或多个研究(单次成像检查) … 可以有1个或多个系列。 阅读详情

相关推荐

反激电源反馈环路设计:从TL431+PC817原理到动态补偿实战

本文深入解析了反激电源中由TL431和PC817构成的经典反馈环路设计。从静态工作点计算到动态补偿实战,详细阐述了如何通过Type II补偿网络优化环路稳定性与动态响应,并分享了应对光耦CTR离散性、布局噪声等常见调试难题的实用技巧,帮助工程师设计出高性能、高可靠的开关电源。

moon9的博客 699

【Android应用开发技术:基础构建】命令行下的Android应用开发

作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.youkuaiyun.com/allenwells github:https://github.com/AllenWell 一 AVD管理 AVD管理相关命令例如以下所看到的: android avd : 打开AVD管理器 andr...

weixin_34116110的博客 502

从零到一:高通Memory QMVS测试环境搭建的避坑指南

本文详细介绍了高通Memory QMVS测试环境搭建的全流程避坑指南,涵盖硬件选择、软件配置、QMVS核心组件安装及测试执行技巧。重点解析了adb工具配置、QPST日志抓取等关键步骤,帮助工程师高效搭建稳定测试环境,避免常见兼容性和稳定性问题。

weixin_29251567的博客 555

android 的命令行工具(dos命令)

可以通过电脑的dos界面实现对andorid(s手机)的内部文件增删改查adb shell      进入手机中linux操作系统ls 列举当前目录下的所有文件cd 文件名     切换(跳转)目标文件mkdir 文件名   新建文件pwd    打印(显示)当前的工作目录echo "文件内容"” &gt;创建新的文件内容  exit 退出当前操作界面rm  文件名 删除指定的文件rm  -r 文...

小肥猫吃鱼的博客 1万+

Verilog--CDC跨时钟域处理(快时钟域到慢时钟域)

Verilog--CDC跨时钟域处理(快时钟域到慢时钟域)CDC问题单比特信号的跨时钟域问题从快时钟域到慢时钟域从慢时钟域到快时钟域多比特信号的跨时钟域问题异步FIFO握手协议 今天先写单比特信号从快时钟域到慢时钟域的方法,后续继续填坑 CDC问题 单比特信号的跨时钟域问题 从快时钟域到慢时钟域 设计思想   从慢时钟域到快时钟域通常使用打两拍的方法,这也适用于从快时钟域到慢时钟域时,但是如果当单比特信号持续时间小于快时钟域的一个周期时,需要用展宽信号再打两拍的方法。 设计相关代码 module Sync_

weixin_44425619的博客 9360

SAP-MM-供应商对账平台(功能集合)

(1)集成OA审批,线上核销,结果写入SAP; (2)集成SRM,线上与供应商对账确认,写入SAP; (3)集成财务付款结果确认写入,OA回传结果,定时同步SRM供应商平台。 欢迎留言交流,功能完善,如需要页面设计,请订阅专栏

qq_32198063的博客 748

Linux使用android studio的虚拟机报错ERROR: Unknown AVD name [...], use -list-avds to see valid list

我玩的手游要一直在线,但小米手机最多亮屏10分钟,需要人为的一直点,累死了。于是决定用电脑模拟器,笔记本型号小米air12.52017,系统ubuntu18.04。 想试试用谷歌的android SDK当模拟器,android SDK就是编写、运行、测试、编译apk的包,在linux下有2种,一种是130M没有界面,另一种是330M有基本界面的,除此之外还有Android Studio大概760M和eclipse差不多。网上好多教程是在eclipse里编apk,用android SDK运行,我不管那个我只要

Loutre_star的博客 1215

ConvNeXt 系列改进:二次创新 ConvNeXt:结合 RepVGG 结构重参数化,训练多分支、推理单路

2026年的视觉模型赛道呈现出一种有趣的“返璞归真”趋势——在Transformer狂飙数年之后,卷积网络正以全新的姿态回归。这其中,ConvNeXt无疑是纯卷积阵营中最耀眼的明星。从2022年Meta AI首次提出至今,ConvNeXt系列已经走过了近四年的演进之路,衍生出ConvNeXt V2、E-ConvNeXt等多个增强版本。ConvNeXt的7×7深度卷积带来了不错的感受野,却也埋下了推理效率的隐患。

ZXSXJ的博客 234

命令行创建android项目

命令行创建android项目 android create project --target 15 --name KoreanHLN --path d:\test --activity WelcomeActivity --package com.koreanHLN.activity

samwong 157

【芯片设计- RTL 数字逻辑设计入门 番外篇6 -- 术语 Tile 介绍】

在系统级芯片(System on Chip, SoC)设计中,“tile” 是一个可以指代不同概念的术语,但通常它指的是芯片上的一个独立的功能单元或核心。一个 tile 可以包含一个或多个处理器核心、缓存、内存控制器、输入输出设备、外设接口或其他功能模块。在 SoC 上,多个 tile 可以被组合和连接起来,以形成一个完整的系统。

CodingCos的博客 3067

通信算法之325:无人机云哨协议及发射机接收机仿真算法

【代码】通信算法之325:无人机云哨物理层协议及发射机接收机仿真代码。

leegang12的专栏 362

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

转载自 ericxu21.blog.chinaunix.net 的博客 命令行开发、编译、打包Android应用程序 (2012-01-14 21:56) 标签:  打包  Android  应用程序  开发      Android SDK提供了一系列命令行工具,用来进行Android应用的开发、调试、打包等工作!Eclipse能够进行Android应用开发的相关工...

CurrentJ 152

UFS总体介绍及FPGA开发

通过实现UFS的主控制器、设备控制器等组件,我们可以在FPGA上进行UFS开发,并实现高速数据传输和低功耗特性的存储解决方案。物理层负责传输物理信号,数据链路层提供数据包的传输和错误检测功能,传输层处理数据包的分段、重组和重传,逻辑层管理设备和主控制器之间的命令和数据传输,文件系统层负责文件管理和数据存储。在本文中,我们将介绍UFS的总体架构和特性,并探讨如何在FPGA上进行UFS开发。这些组件的实现涉及到UFS协议的具体细节和硬件平台的特性,因此需要参考UFS协议规范和FPGA开发平台的相关文档。

PodProgram的博客 2135

android代码编译过程,彻底理解Android编译过程 - 脱离IDE开发Android-APP

前言笔者从事了几年的android开发,对android-app开发略有些心得,但是从未尝试过脱离IDE开发过 Android程序,故此翻阅了一些材料,才发现stackoverflow上有不错的一些资料。特此尝试翻译过来,一来希望可以帮助到初学者,二来笔者发现脱离了IDE开发 Android程序有助于理解其编译打包的过程。其过程就如用记事本写C语言程序,然后在拥有C编译环境下编译出目标(.o)文件...

weixin_28745975的博客 466

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

最简单的Android项目

这是我在windows环境下,试验过的最简单Android项目,只用记事本和命令行即可完成。 环境准备 开发环境需要Java SDK(官网下载),Android SDK(官网下载)。 首先安装Java SDK,然后将Android SDK解压到任意目录(建议解压到某个盘根目录,方便后续命令输入)。 接着需要下载Android SDK。打开刚才解压目录下的SDK Manager,勾选需要安装...

weixin_30808693的博客 235

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

android破解和重新打包

这里使用的是Mac系统,在windows上可能会出现莫名其妙的问题 我这里提前下载号了apktool和apk-signer另个工具,并放在桌面上的tool目录下,要反编译的文件test.apk也在桌面上 1,反编译     打开终端进入到桌面     在命令行输入:java -jar tool/apktool.jar d test.apk 回车   生成test目录,这就是反编译出来的成

duduhali的专栏 1014

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

Android 命令行手动编译打包过程图    【详细步骤】:  1使用aapt生成R.java类文件:  例:  F:\explorer\android-sdk-windows2.2\tools>f:\explorer\android-sdk-windows2.2\platforms\android-3\tools\aapt.exe package -f -m -J F:\

xiongyingzhuantu的专栏 823

使用ant和android的相关工具进行编译,打包android工程

方式一:使用eclipse+ADT编译打包 方式二:命令行手动编译打包 方式三:使用ant自动编译打包 http://blog.youkuaiyun.com/anzhu_111/article/details/6556562

swust_chenpeng的专栏 575

基于android的应用程序,基于android系统的air应用程序开发.pdf

基于android系统的air应用程序开发参考手册3.0ActionScritp 平台的 Flash Adobe •应用AIRAdobe 构建 •预览版发布网站)Adobe发行说明( •除了这个文档,还可以参考下面的文档:相关文档在设备上运行程序。7.仿真器)安装应用程序。Android 工具,在你的机器设备上(或ADBAndroid 使用 6.。)如果你的机器尚未安装(运行时软件RAI 装在...

weixin_31765677的博客 197

Android编译,打包、签名详细教程

Android编译,打包、签名详细教程 1.Android程序编译、打包、签名、发布的三种方式: 方式一:命令行手动编译打包 方式二:使用ant自动编译打包 方式三:使用eclipse+ADT编译打包 2.Android编译、打包的步骤: 2.1第一步 生成R.java类文件: Eclipse中会自动生成R.java,ant和命令行使用android SDK提

JESSE_ZHAO_503的专栏 1153

Android APK反编译

http://www.cnblogs.com/playing/archive/2010/08/11/1797696.html http://jingyan.baidu.com/article/86112f1322fd7e27379787ce.html 注意: 将反编译完的文件重新打包成apk 很简单,只要输入 apktood b c:***文件夹(你编译出来文件夹) 网上搜到的资料中将反...

weixin_33779515的博客 90

如何使用Android SDK开发Android应用?

这是一个根源性问题,Android作为一个还是新兴的平台因为有Google罩着体现出强大的优势,加上现在的Java已经被手机商控制住了咽喉,所以相对而言,Sun对Java的控制力非常之弱,所以学Java是合时宜的。 在网上找了一大堆的有关Android的解释等,找到一个比较不错的,贴出来分享下: android提供的工具链和开发工具比较完善,因此它的开发环境的搭建比较简...

赵振洋(Java学生) 209
上一篇: Linux进程的实际用户ID和有效用户ID
下一篇: Android启动脚本init.rc
cubelee
博客等级 码龄15年 4粉丝 23原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值