Android项目文件结构

大致可以认为,Android APP由两部分组成,布局、属性部分和逻辑代码部分。属性和布局负责Android APP的UI,即用户看到的部分,由XML语言编写,逻辑代码部分则由Java语言编写,负责APP的逻辑控制工作。

新建一个Android项目,查看左侧的Android项目文件结构如图3.1所示。



图3.1 Android项目文件结构

最外层的根目录为app,app目录中有三个子文件夹:

manifests文件夹:Android系统配置文件夹,包含一个AndroidManifest.xml文件;

java文件夹:存放Java代码的文件夹,新建项目时默认生成了三个文件夹,com.first.project文件夹用来存放Java文件,这里包含一个名为MainActivity的Java文件,是新建项目时默认生成的。第二个和第三个文件为测试代码文件夹,不是十分常用。

res文件夹:存放Android项目的资源文件,包含四个文件夹:drawable(图片资源文件夹)、layout(布局资源文件夹)、mipmap(图片资源文件夹,存放项目图标)、values(存放数值资源文件)。

3.1.1 布局属性

本章主要讲Android的属性和布局知识,下面我们着重看一下这个默认的activity_ma-in.xml布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.first.project.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
</RelativeLayout>

默认的布局文件采用RelativeLayout相对布局,在相对布局中仅添加了一个TextView文本控件,布局文件中默认生成的一些属性不太常用,可以手动去除,去除后代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
</RelativeLayout>

最上方的<?xml version="1.0" encoding="utf-8"?>是xml文件的title,里面的version表示xml版本号;encoding表示文本编码类型,这里默认设置为utf-8。

RelativeLayout是父布局的标签,表示相对布局,对于相对布局后面的章节还会详细介绍;对于xmlns属性的全称应该是xmlnamespace,添加了这个属性才可以使用android的属性(即android:开头的属性);layout_width表示父布局的宽属性,属性值为match_parent表示占据整个界面的宽;layout_height表示父布局的高属性,属性值为match_parent表示占据整个界面的高。

TextView是文本控件,同样也设置了两个属性layout_width和layout_height,即宽和高。注意:这两个属性所有布局控件的必备属性,这里设置了这两个属性的值都为wrap_content即包裹文本内容;text属性表示文本的值,这里设置了Hello World,这时TextView中会显示Hello World。Android Studio提供了即时布局渲染显示的功能,即在Android Studio的最右边,如图3.2所示。



图3.2 Android Studio 预览窗口

点击最右侧的Preview按钮即可弹出这个布局的预览窗口,可以看出,在这个预览窗口有一个手机界面,这个手机界面的左上方有一个TextView文本控件,文本控件会显示我们设置的Hello World文本,但是这个文本字体太小了,可以添加属性textSize设置TextView控件中文本的字体大小,如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textSize="40sp" />
</RelativeLayout>

为这个TextView添加了textSize属性并设置其值为40sp,添加后再次查看预览窗口如图3.3所示。



图3.3 Android Studio 预览窗口查看

此时字体就变得很大了,当然除了这些属性之外,还有较多的属性供开发者选用,常用的TextView属性会在后面的TextView章节详细介绍。

3.1.2 配置属性

AndroidMainifest.xml文件是每个android项目必须要包含的文件(项目唯一),创建项目时默认就会生成这个文件,它配置了android运行的基本属性,具有很重要的作用。灵活配置文件中的属性可以处理复杂的页面逻辑操作、简化代码复杂度、提高灵活度等。下面看一下创建项目时默认生成的配置文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.first.project">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

此文件也是xml语言编写的,因此在这个文件的最上方也添加了一个xml标签并设置了其version和encoding属性,这里还添加了几个标签,含义如下:

manifest标签:是整个文件的父标签,这个标签中添加了两个属性,xmlns是命名空间属性,同样需设置这个属性的属性值为:schemas.android.com/apk才可以使用“android:”为首的属性;package属性表示包名,这个属性的属性值为新建项目时设置的。

application标签:表示整个android应用,在项目中是唯一的,在这个标签中添加了几个属性:allowBackup属性设置为true表示允许备份应用的数据;icon属性设置了这个APP在桌面上显示的icon图标;label属性设置APP在桌面上显示的名称,可以查看图3.4。

这两个属性是可以自定义的,例如修改这两个属性如下:

   <application
    android:allowBackup="true"
    android:icon="@drawable/QQ"
    android:label="QQ"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

这时再次运行项目观察桌面图标和名称,如图3.5所示。可以看出整个项目的icon和项目名称都改变成了自定义的结果;supportRtl属性设置为true表示支持从右向左布局(阿拉伯语言时会用到),这个属性不太常用;theme属性为主题,整个项目的主题。



图3.4 Android Studio Preview查看



图3.5 Android 替换icon图标

activity标签:一个Activity可以理解成一个APP的界面,这里只添加了一个name属性,设置属性值为 .MainActivity,这里的这个 “.” 表示当前Activity的包名,即name属性值为“包.Activity名”。注意,项目中的每一个Activity都需要在这个布局文件中添加配置。

intent-filter标签:顾名思义,此标签可以添加过滤,一般在隐式启动时用来过滤和匹配Activity,隐式启动在后面的章节会介绍。

action标签:添加这个标签并设置其name属性为android.intent.action.MAIN表示这个Activity为项目的主Activity,项目启动时会首先启动这个Activity。

category标签:添加这个标签并设置其name属性为android.intent.category.LAUNCHER,项目将在程序列表中显示,即上图显示在桌面上的图标,若去除这个标签该项目将不会出现在程序列表中。

3.1.3 其他文件

1. 颜色资源文件

android 的颜色属性也是通过xml资源来管理的,默认生成的文件如下(colors.xml):

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
</resources>

同样,最上面一行代码为xml文件的title,color文件的父标签是resource资源标签,每一个color标签中添加了一个name属性,通过这个name属性即可以找到这个颜色值(@color/name值),name值在项目中应该是唯一的。这个color标签之间的十六进制数值为颜色值,这种数值不便于理解和记忆,Android Studio还提供了颜色选择器供开发者调用,点击编辑器左边栏的小颜色色块即可成功打开颜色编辑器,颜色色块如图3.6所示。



图3.6 Android Studio颜色色块

颜色编辑器界面如图3.7所示。



图3.7 Android Studio颜色编辑器

既可以在右上角直接输入颜色色值,也可以分别输入A、R、G、B的值合成颜色数值,同时拖动下面的Due和Opacity来调整色调和透明度。输入或调整完毕后,点击Choose按钮即可设置成功,设置后观察左边的的小色块,如图3.8所示。



图3.8 Android Studio色块

可以看出,颜色值和小色块都对应改变了。

2. 尺寸资源文件(dimens.xml)

这个资源文件定义了布局文件中的各种尺寸的大小,默认生成的代码如下:

<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
</resources>

和颜色资源文件相似,尺寸资源dimen标签同样也是由resource资源标签包裹,同样dimen尺寸标签中定义了name属性,这个name属性也是唯一的,两个dimen标签内部的数值即为这个尺寸的大小,考虑到Android手机屏幕分辨率的多样性,这里采用了dp作为单位。字符串大小一般采用sp作为单位。

3. 字符资源文件(strings.xml)

<resources>
    <string name="app_name">FirstProject</string>
</resources>

resource标签中添加了一个<string>标签,同样为了找到这个字符串也为其添加了name属性并设置了唯一的属性值,其属性值为String型。

4. 样式资源文件(styles.xml)

样式资源文件可以方便的定义android项目的样式和外观,默认生成的代码如下:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>

同样resource标签作为父标签,<style>标签中添加了一个name属性方便引用,parent属性表示继承关系。在这个标签中添加了多个<item>标签,这些标签共同构成整个样式表。


如果你喜欢作者的文章,还可以购买他的书(京东自营):


  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
android文件架构详解 cache : 是缓存临文件夹,据说是除了T-mobile的OTA更新外,别无用处。 红色标记的两个文件是debug模式下产生的 data : 存放用户安装的软件以及各种数据。 default.prop : 默认配置文件 dev : 设备节点文件的存放地 etc : 指向 /system/etc ,配置文件存放目录 init : 系统启动到文件系统的候第一个运行的程序。 init.goldfish.rc : 初始化文件 init.rc : 初始化文件 proc : /proc文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文使用。 root : 为空 。 sbin: 只放了一个用於调试的adbd程序 sdcard: 是SD卡的FAT32文件系统挂载的目录 sqlite_stmt_journals: 一个根目录下的tmpfs文件系统,用於存放临文件数据。 sys : 用於挂载 sysfs文件系统。 在设备模型,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间.用户空间可以修改sysfs文件属性来修改设备的属性值 system :系统的大部分东西都在这各目录下,很重要的一个目录文件 system目录是在Android文件系统占有及其重要的位置,基本上所有的工具和应用程序都在这个目录下,我看来是一个真正的rootfs。他在Android手机存放在nandflash的 mtd3,是一个yaffs2文件系统,在启动被挂载在root的/system目录下,其包含有: # ls -a -l /system drwxr-xr-x root 208 1970-01-01 08:00 xbin drwxr-xr-x root root 1970-01-01 08:00 modules drwxr-xr-x root root 2010-06-23 09:39 framework drwxr-xr-x root root 2010-06-23 09:39 fonts drwxr-xr-x root root 2010-06-23 09:39 etc -rw-r--r-- root root 2197 2010-06-23 09:39 build.prop drwxr-xr-x root root 2010-06-23 09:39 media drwxr-xr-x root shell 2010-06-23 09:39 bin drwxr-xr-x root root 2010-06-23 09:39 usr drwxr-xr-x root root 2010-06-23 09:39 app drwxr-xr-x root root 2010-06-23 09:39 lost+found drwxr-xr-x root root 2010-06-23 09:39 lib drwxr-xr-x root root 2010-06-23 09:39 sd -rw-r--r-- root root 1452010-06-23 09:39 init.rc # xbin :下放了很多系统管理工具,这些工具不是到toolbox的链接,每个都是可执行程序。如果你看到这些命令你会发现他们根本不常用,他们都是为系统管理员准备的,是一些系统管理和配置工具。这个文件夹的作用相当於标准Linux文件系统的 /sbin。 modules:使用来存放内核模块(主要是fs和net)和模块配置文件的地方。 framework: 是JAVA平台的一些核心文件,属於JAVA平台系统框架文件。里面的文件都是.jar和.odex文件。 备注:什么是odex文件? odex是被优化过的JAVA程序文件,体积通常是.jar的4倍左右。执行效率比.jar高。 fonts :字体库文件的存放目录。 etc :这里存放了系统几乎所有的配置文件,根目录下的/etc就链结於此。 build.prop :是一个属性文件,在Android系统.prop文件很重要,记录了系统的设置和改变,类似於/etc文件。 media :里面主要是存放了系统的铃声的,分为 notifications(通知)、ui(界面)、alarms(警告)和ringtones(铃声),里面都是.ogg音频文件。 bin :是存放用户常用的工具程序的,其大部分是到toolbox的链接(类似嵌入式Linux的busybox)。toolbox应该是 google简化版的busybox。 usr :用户的配置文件,如键盘布局、共享、文件等等。您可以cat 来看看。 app :存放的是Android系统自带的JAVA应用程序。 lost+found :yaffs文件系统固有的,类似回收站的文件夹,只有是yaffs文件系统都会有。 lib :存放几乎所有的共享库(.so)文件。 sd :SD卡的EXT2分区的挂载目录 init.rc :一个初始化脚本,用於将/system/modules和/system/xbin挂载为cramfs,避免系统被无意破坏

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值