Android心得1.1--Android项目的目录与安装以及启动过程分析
1.Android项目的目录架构
src : java原代码存放目录
gen : 自动生成目录
gen 目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。 这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res目录的xml界面文件、图标与常量,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了界面、图标、常量等各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。
res : 资源(Resource)目录
在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。
res/drawable 专门存放png、jpg等图标文件。在代码中使用getResources().getDrawable(resourceId)获取该目录下的资源。drawable文件下有三个文件:drawable-hdpi、drawable-ldpi、drawable-mdpi分别代表高中低三种尺寸的屏幕大小。Android系统自动根据实际手机屏幕大小调用者三个文件的其中一个。
res/layout 专门存放xml界面文件,xml界面文件和HTML文件一样,主要用于显示用户操作界面。
res/values 专门存放应用使用到的各种类型数据。不同类型的数据存放在不同的文件中,如下:
· strings.xml 定义字符串和数值,在Activity中使用getResources().getString(resourceId) 或getResources().getText(resourceId)取得资源。它的作用和struts中的国际化资源文件一样。
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string name="itcast">传智播客</string>
</resources>
· arrays.xml 定义数组。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="colors">
<item>red</item>
<item>yellow</item>
<item>green</item>
<item>blue</item>
</string-array>
</resources>
· colors.xml 定义颜色和颜色字串数值,你可以在Activity中使用getResources().getDrawable(resourceId) 以及getResources().getColor(resourceId)取得这些资源。例子如下:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<color name="contents_text">#ff000000</color>
</resources>
· dimens.xml 定义尺寸数据,在Activity中使用getResources().getDimension(resourceId) 取得这些资源
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<dimen name="key_height">50dip</dimen>
</resources>
· styles.xml 定义样式。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="itcastText" parent="@style/Text">
<item name="android:textSize">18px</item>
<item name="android:textColor">#008</item>
</style>
</resources>
res/anim/ 编译成帧动画的XML文件。
res/xml/ 在Activity中使用getResources().getXML()读取该目录下的XML资源文件。
res/raw/ 该目录下的文件将直接被复制到设备上。编译软件时,这些数据不会被编译,它们被直接加入到程序安装包里。 为了在程序中使用这些资源,你可以调用getResources().openRawResource(ID) , 参数ID形式:R.raw.somefilename。
assets :资源目录
Android除了提供/res目录存放资源外,在assets目录下也可以存放资源文件,而且/assets目录下的资源文件不会在R.java自动生成ID,所以读取其下的文件 必须指定文件路径,如:file/android_assets/xxx.3gp.
AndroidManifest.xml : 功能清单文件
这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务,还需要在改文件中声明权限(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。还有你开发好的各种组件(Activity、ContentProvider、BroadcastReceiver、Service即四大组件)也需要在改文件中进行配置。
default.properties:项目环境信息,一般是不需要修改此文件,比如告诉开发工具(即Eclipse)开发的Android应用程序的版本号:Project target.target=android-8。
2. 清单文件中部分代码的含义
包名用于围标;
<android:icon=”@drawable/icon”>这个的含义分别是:icon翻译过来是图标的意思,@代表R文件;所以这个表达式代表的含义是该应用的图标ID是R文件下的drawable下的icon;
<android:name=”.MainActivity”>,MainActivity如果是当前包下的类,则“.”可以省略,但是建议别省略,否则容易出错;如果是子包下的类,则一定不能省略。例如:<android:name=”.sub.MainActivity”>
Activity一定要放在所在包或其子包中,不能放在其他包中。
清单文件是在软件安装的时候被读取的,而不是在程序运行的时候。可以把清单文件看成是一个注册表,实际上不是啊!
3. <inter-filter>是意图过滤器,作用是:对数据进行过滤,如果匹配怎干一些事,否则什么都不干;意图代表一个想法,是用来匹配你要做的事情。
意图过滤器标签中包含两个参数标签。分别是<activity>、<categroy>分别是动作名称和类别名称。这两个参数的作用是:把应用安装和显示在手机的启动列表中,不加这两个参数也行,但是你编写的应用不会显示在手机的启动列表中。即中两个参数是应用的启动入口,所以这两个参数只能出现在一个activity中,不能出现在多个,因为一个应用程序只有有一个入口。
4. 应用的安装过程分析
.javaà.classà.dex(通过Android SDK下的dx工具)à打包(签名,开发工具自行进行)à.apk
.dex和.apk文件在工作空间的相应项目(即应用)下的bin文件下,所有.java类都编译进一个.dex文件中;
签名在Eclipse下的windowàproferrncesàAndroidàBuild中,Default debug keystore
内部执行的程序时:adb install c:\xxx.apk.
5. 应用的启动过程分析
(1)过程分析。
创建线程à创建主线程à在主线程中实例化Activityà操作系统会把应用有关的信息(context)存在Activity中à调用onCreate()方法(此方法由android系统调用而非程序员调用)
(2)采用sdk安装目录tools下的adb命令进行软件的安装和卸载:
安装:adb install c:\hello.apk
卸载:adb uninstall <应用的包名> 例子:adb uninstall cn.cadn.phone;
6. Android显示单位
px (pixels)像素
一般HVGA代表320x480像素,这个用的比较多。
dip或dp (device independent pixels)设备独立像素
这个和设备硬件有关,一般为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
sp (scaled pixels — best for text size)比例像素
主要处理字体的大小,可以根据系统的字体自适应。
除了上面三个显示单位,下面还有几个不太常用:
in (inches)英寸
mm (millimeters)毫米
pt (points)点,1/72英寸
为了适应不同分辨率,不同的像素密度,推荐使用dip ,文字使用sp。
7. 布局介绍
有四种:LinearLayout(线性布局)、RelativeLayout(相对布局)、TableLayout(表格布局)、FrameLayout(帧布局)。
布局还分为为水平布局(horizontal)和垂直布局(vertical)。
顶级元素一定要指明命名空间,非顶级的可以不指明,但是一旦用作顶级元素时则一定要指明命名空间。例如:
<LinearLayout xmlns:android=”www.zzzyk.com
http://schemas.android.com/apk/res/android”>
作者:tianyazaiheruan
补充:移动开发 , Android ,