使用命令行“徒手”开发安卓项目
引言
Eclipse+ADT或者是Android Studio可以帮助我们快速建立项目,然而也正是因为如此,造成了自学者不求甚解的现象。比如,你能详细道出安卓项目中每个文件的作用及其相互包含关系吗?你知道R.layout.main,R.id.button等等中的R怎么来的吗?为了知其所以然,我们很有必要通过命令行工具去徒手开发一个安卓项目。
创建安卓项目
在命令行窗口输入以下命令:
android create project -n PictureBrowse -t android-21 -p PictureBrowse -k com.golfer.PictureBrowse -a PictureBrowse
按下回车键后即可生成一个符合要求的安卓项目
提示:
1.-n(name的缩写)用于指定项目名称;-t用于指定安卓系统版本(详解参考附录);-p用于指定项目的保存路径(如果没有交代父目录,则会新建文件夹PictureBrowse并保存在当前文件夹下);-k指定包名(包名决定了src文件夹内嵌的文件夹,比如上面的例子,src文件夹中就会包含com文件夹,com文件夹又包含golfer文件夹,golfer文件夹又包括PictureBrowse文件夹);-a指定Activity的名称。
2.使用android命令的前提是Sdk目录下的platform-tools及tools的路径已经添加到path环境变量中,否则cmd会报错。
附:关于安卓系统版本
Sdk的安装目录下有一个子目录:platforms,它里面包含了已配备的安卓系统版本,打开后会发现里面是命名为android-21、android-24之类的文件夹。如果没有配备android-19版本,而你把Compile Sdk Version设置为android-21(命令行中通过-t选项设置),则编译项目时会报错。其实这里的19、21、24表示的是API的版本。
项目文件解析
项目创建完毕后,打开PictureBrowse文件夹,可以看到如下子文件夹:
src文件夹保存负责业务实现的java源码
res(resources的缩写)是资源文件夹,其中的values子夹保存着字符串资源(strings.xml)、颜色资源(colors.xml)等;layout子夹保存布局文件(刚创建时只有一个以Activity的名称命名的xml布局文件(如例子为PictureBrowse.xml),但其实我们可以增加很多布局文件,比如我们在layout下增加main.xml,然后我们只需在负责主线程的java文件(即刚创建时就存在的java文件)中的onCreate函数中添加如下代码:setContentView(R.layout.main),就可以把main.xml中的布局显示出来);drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi分别保存低、中、高、超高分辨率的图片(图片名称需以字母开始,引用方式为:R.drawable-ldpi.图片名,注意使用android studio创建的项目不区分ldpi、mdpi、hdpi、xhdpi)。
AndroidMainfest.xml用于控制应用名称、图标、访问权限等整体属性。
项目调试及运行
写好代码后,我们就可以进行编译以及生成apk并安装了。这时候需要用到ant工具。ant命令有如下选项:
ant debug 生成用于调试的apk包
ant release 生成用于发布的apk包
ant install 将apk包安装到Emulator模拟器(常用的有AVD((Android Virtual Devices)、Genymotion等)上
注意:
1.使用ant命令的条件:
下载了ant工具并且正确设置了JDK_HOME、ANT_HOME这两个环境变量的值(它们的值分别是JDK、Ant的安装路径);
ant目录下的bin的路径已添加到环境变量path之中。
2.执行ant命令时必须先切换至项目所在的目录(比如例子中要切换至PictureBrowse目录),这是因为我们必须指定对哪一个项目进行生成,这里涉及到子夹build.xml的作用,此处省略)
R文件究竟是什么?
项目生成后,在项目目录下会增加如下子目录:bin、gen
其中gen文件夹就保存着R.java文件
R.java文件中定义了类R,里面包含很多内部类(其实每种资源对应一个内部类),比如layout内部类、strings内部类、colors内部类、id内部类等。所以现在我们应该可以理解R.layout.main、R.id.root是什么意思了吧。R文件相当于资源字典,我们可以通过它引用各种资源,比如要在ImageView组件中显示名为ic_launcher的图片,就可以键入如下代码:imageview.setImageResources(R.drawable-mdpi.ic_launcher)。这里还要指出的是R.id.root、R.drawable.ic_launcher的类型是int,因此面对以下代码不要觉得很难理解:
int[] picture=new int[]{R.drawable.ic_launcher,R.drawable.image1,R.drawable.image2,}
初学者使用Android Studio时经常遇到的一个问题是R文件缺失,造成缺失的原因往往是代码复制时R文件没有自动生成,解决办法为:先Clean Project,再Rebuild Project.
这篇文章都是自己阅读《Android疯狂讲义》前部分内容后的体会,难免存在纰漏、不足乃至错误,期待与诸位共同交流!----陈光科(2016.09.13)