用命令行方式写Android应用

在本文中,我们将介绍创建Android应用项目(android create project)和虚拟机(android create avd)的命令。我们也将介绍用Apache Ant生成apk安装包的过程,用JDK(Java)中的keytool和jarsigner对apk进行签名的过程,以及用ADB在设备或虚拟机上安装apk的过程。文中的示例是在Windows 7中进行的,在其他操作系统(包括Linux和Mac OS)中的操作是类似的。

在开始之前,确认电脑中安装了JDK(下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html)、Android SDK(下载地址:http://http://developer.android.com/sdk/index.html)和Apache Ant(下载地址:http://ant.apache.org/index.html)。

1. android命令

在Android SDK中,android命令功能强大,其下包含了create projectcreate avd等子命令。该命令所处的位置为

android-sdk\tools\

1.1 帮助

我们可以使用帮助来了解android命令的用法:

android  -h

下面是android帮助的输出结果:

android帮助的输出结果

从中我们可以看出,android命令的使用格式为

android [全局选项] 子命令 [子命令选项]

进一步地,我们可以使用帮助来查看android子命令的用法,例如查看子命令create project的用法:

android  -h create project

下面是输出结果:

android create project帮助的输出结果

作者认为,在所有的命令中,“帮助”(-h)是功能最强大的工具(没有之一)!学习计算程序,不需要记过多的命令和命令的细节,关键在于理解基本原理,多使用帮助,多尝试。

下面我们介绍两个android子命令:创建Android应用项目(android create project)和创建Android虚拟机(android create avd)。其他子命令的用法请查看“帮助”。

1.2 创建Android应用项目

创建Android应用项目的子命令是android create project。从前面的帮助中,我们看到,这个子命令有4个必选项(用[required]标注部分):

-a: 默认活动(Activity)的名称
-k: 应用的Android包的名称
-t: 项目的目标ID(即目标SDK版本)
-p:项目的路径

例如,我们创建一个名称为HelloWorld的Android应用项目:

android create project -n HelloWorld -a MainActivity -k com.zhangli.shally.helloworld -t android-23 -p D:\workspace\HelloWorld  

下面是这个命令的输出:

android create project的输出结果

该命令在D:\workspace\HelloWorld文件夹下创建了一个名称为HelloWorld的项目(注意:项目的名字(-n)不是必选项),这个项目中的默认活动为MainActivity,Android包的名字为com.zhangli.shally.helloworld,目标SDK为android-23。从前面的输出可以发现,该命令先创建项目目录“D:\workspace\HelloWorld”,然后在该目录下创建与项目相关的目录和文件:

项目目录结构

注:根据具体需要来设置android create project子命令中各个选项。项目、活动和包的命名应尽量遵守Android编程规范。如果不确定支持哪些目标ID(目标SDK版本),可以用命令android list target列出开发机上已有的目标ID。

1.3 创建Android虚拟机

创建Android虚拟机的子命令是android create avd,我们先用帮助查看其用法:

android create avd帮助的输出结果

这个子命令有2个必选项(用[required]标注部分):

-t: 虚拟机的目标ID(即虚拟机中的SDK版本)
-n: 虚拟机的名称

例如,下面的命令创建一个名为myavd的虚拟机,目标ID为android-23

android create avd -t android-23 -n myavd -b armeabi-v7a

在创建虚拟机的过程中,会询问“是否自定义虚拟机硬件属性[no]”(见下图中画红线部分),直接“回车”选择默认配置。虚拟机创建结束后,输出硬件配置信息:

android create avd的输出结果

注:在创建虚拟机时,如果有多个ABI(application binary interface),则需用-b选项指定其中一个;否则会出现上图黄色框中的错误。

虚拟机的默认创建位置为:

%ANDROID_SDK_HOME%.android\avd

在作者的电脑中,我们得到如下虚拟机文件:

创建虚拟结果

文件myavd.ini中包含编码、路径和目标ID信息:

avd.ini.encoding=UTF-8
path=C:\Users\Administrator\.android\avd\myavd.avd
path.rel=avd\myavd.avd
target=android-23

文件myavd.avd\config.ini中包含虚拟机的基本配置信息:

avd.ini.encoding=UTF-8
abi.type=armeabi-v7a
hw.cpu.arch=arm
hw.cpu.model=cortex-a8
hw.lcd.density=240
hw.ramSize=512
image.sysdir.1=system-images\android-23\default\armeabi-v7a\
skin.name=WVGA800
skin.path=platforms\android-23\skins\WVGA800
tag.display=Default
tag.id=default
vm.heapSize=48

文件myavd.avd\userdata.img为虚拟机中用户数据的镜像。

有三种方式设置虚拟机的sd卡、皮肤等属性:(a)在创建虚拟机时使用-t、-s等选项进行设置;(b)在创建虚拟机的交互界面(即在“是否自定义虚拟机硬件属性[no]”时输入y)进行设置;(c)在config.ini文件中进行设置。

虚拟机创建完成后,使用模拟器emulator(位于目录android-sdk\tools\)启动虚拟机:

emulator -avd myavd

启动虚拟机

我们可以用命令android list avd列出所有虚拟机。

2. 用Apache Ant生成Android Apk安装包

Apache Ant是一个Java库,同时也是一个命令行工具,它可以有效地按build文件中描述的方式编译、生成、测试和运行Java应用。用Apache Ant从Android项目生成Android Apk安装包,只需两个步骤:

步骤1:用android update project命令更新Android项目,这个命令将更新build.xml、local.properties、proguard-project.txt等项目文件。(注:使用这个命令必须首先保证项目中有文件AndroidManifest.xml。)

android update project -p D:\workspace\HelloWorld

步骤2:用ant生成debug版本的Android Apk安装包:

ant -f D:\workspace\HelloWorld\build.xml debug 

或release版本的Android Apk安装包:

ant -f D:\workspace\HelloWorld\build.xml release

生成安装包(debug版本和release版本)以后,项目HelloWorld文件夹中发生了两个变化:

(a) 在bin文件夹中产生了下面所列出的文件和文件夹

bin文件夹

其中包含三个apk安装包:

HelloWorld-debug-unaligned.apk是未签名的debug版本apk文件;
HelloWorld-debug.apk是debug版本apk文件;
HelloWorld-release-unaligned.apk是未签名的release版本apk文件

从中我们可以看出,对于release版本的apk安装包,Android是鼓励对其进行数字签名的。我们可以用keytool对release安装包进行签名(见第3节“用keytool和jarsigner对Android Apk进行签名”)。

(b) 生成了一个新文件夹gen

gen文件夹

其中,文件R.java是由aapt工具(位于目录android-sdk\build-tools\)根据应用中的资源文件自动生成的,里面包含了应用中所有资源的唯一编号。

3. 用keytool和jarsigner对Android Apk进行签名

Keytool是一个Java密钥和证书管理工具,它将密钥和证书储存在一个密钥仓库(keystore)中;jarsigner 工具利用密钥仓库中的信息来产生或校验Java存档 (JAR) 文件的数字签名。在这里我们仅演示如何用keytool来生成秘钥仓库,并演示jarsigner工具如何利用密钥仓库中的信息来对Android Apk进行数字签名。对于keytool和jarsigner的更多用法,请查阅“帮助”文档。

keytool和Jarsigner所处的位置为:

%JAVA_HOME%\bin\

用keytool和jarsigner对Android Apk进行签名需要两个步骤:

步骤1:用keytool -genkeypair创建一对密钥并保存在密钥库中

keytool -genkeypair  -alias shally -keyalg RSA 
-validity 100  -keystore D:\workspace\shally.jks

该命令生成一个别名为shally的密钥对,使用的密钥算法为RSA,密钥对的有效期是100天,并把密钥对保存在D:\workspace\shally.jks中。

keytool -genkeypair的输出结果

在创建密钥对的过程中,先要输入密钥库的密码;然后针对密钥对,输入您名字、单位名称等信息,并对这些信息进行确认;最后输入密钥对的密码。可以用keytool -list列出密钥库中的信息:

keytool -list的输出结果

步骤2:用jarsigner和前面创建的密钥对签名的Android Apk安装包

jarsigner -verbose  -keystore D:\workspace\shally.jks  -signedjar D:\workspace\HelloWorld\bin\HelloWorld-release.apk D:\workspace\HelloWorld\bin\HelloWorld-release-unsigned.apk shally

这个命令运行结束时,将在D:\workspace\HelloWorld\bin\目录下产生一个签名后的apk安装包HelloWorld-release.apk

jarsigner的输出结果

步骤2*:我们也可以在用ant生成Android Apk安装包时,对release版本的apk包进行签名。只需在Android应用项目根目录文件ant.properties中配置密钥库路径,密钥对别名,以及密钥库和密钥对密码:

key.store=D:\workspace\shally.jks
key.alias=shally
key.store.password=111111
key.alias.password=111111

4. 用adb安装Android Apk包

Adb(android debug bridge)是一个Android调试桥,用来对设备或虚拟机进行管理,它可以进行以下的操作:
(1)在设备上运行Shell命令;
(2)管理设备或虚拟机上的文件
(3)管理设备或虚拟机上的预定端口;
(4)更新设备或虚拟机中,如Android系统和应用软件升级等。
在这里我们介绍如何使用adb来安装Android Apk安装包,关于adb的更多用法,请查看“帮助”。

adb所处的位置为:

android-sdk/platform-tools/

我们先用命令adb devices来查看连接的设备或虚拟机:

adb devices的输出结果

从上面的输出结果我们可以看到,在作者的开发机上连接了两个设备,其中3a25b5c是作者的手机,emulator-5554是前面创建和启动的虚拟机。

注: 5554是adb监听的Socket TCP端口之一,adb通过监听Socket TCP 5554等端口让IDE和Qemu进行通信。

我们可以通过命令adb shell来管理设备或虚拟机:

adb shell的输出结果

当连接了多台设备或虚拟机是,需要用选项-s来指定具体使用的设备或虚拟机,否则或出现以下错误:

error: more than one device and emulator

安装Android Apk的方式很简单,用命令adb push将待安装的apk复制到目录data/app/即可:

adb push的输出结果

这时在虚拟机上我们将看到刚才安装的应用程序MainActivity(注:这是在HelloWorld应用项目的AndroidManifest.xml文件中设置的应用名字):

这里写图片描述

这里写图片描述

我们也可以通过其他方式进行安装,例如,首先将apk复制到设备或虚拟,然后在设备或虚拟机中用命令adb install进行安装。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值