1.src 目录
该目录下存放的是项目的源代码,与一般的java项目一样,src文件夹是项目所有包以及源文件的存放处,其内部结构会根据用户声明的包自动组织。
2.gen 目录
该目录下的文件都是ADT自动生成的,一般不需要去修改,实际上该目录下只定义了一个R.java文件,该文件相当于项目的字典,为项目中的用户界面、字符串、图片等资源会在该类中创建其唯一的id,当项目中要使用这些资源时,便可以通过id找到该资源,当用户为项目引入了新的资源时,只需要刷新一下该目录R.java文件便可以生成一个新的资源id。
3.android 2.2 目录
该文件夹下包含android.jar文件,这是一个java归档文件,其中包含构建应用程序所需要的所有的android SDK库(如:views、controls等)以及APIs。通过android.jar将自己的应用程序绑定到android SDK和android emulator中,这样用户就可以使用android的所有库和包,且使用户的程序能在适当的环境中调试。
4.assets 目录
该目录存放应用程序中使用的外部资源文件,如声音、视频等,在android中可以通过输入、输出流对该目录中的文件进行读写操作。
assets 目录支持任意深度的目录。其下的文件不会被编译成二进制,并且不会生成资源id。必须使用/assets开始的相对路径按照文件方式进行访问,也可以使用 AssetManager 并结合其他类进行访问。
5.res 目录
该目录存放应用程序用到的图片、界面布局文件以及XML格式的描述文件,当这个目录下的文件发生变化时,R.java文件也会同步的发生变化。
一般情况下,新建一个android项目,res目录下会有三个目录 drawable、layout、valuse,第一个用来存放图片资源,第二个用来存放应用程序的界面布局文件,最后一个存放字符串资源、颜色资源、数据资源等XML文件。且res下的资源都会在R.java文件中自动生成资源id。
6.AndroidManifest.xml 文件
该文件包含项目中所使用的 activity、service、receiver,该文件为应用程序的系统控制文件,每个应用程序必须包含这个文件,它时应用程序全剧描述文件,让外界知道应用程序包含哪些组建,哪些资源以及和时运行该程序等。
AndroidManifest.xml结构
< ?xmlversion="1.0"encoding="utf-8"? >
< manifest >
< application >
< activity >
< intent-filter >
< action/ >
< category/ >
< /intent-filter >
< /activity >
< activity-alias >
< intent-filter >< /intent-filter >
< meta-data/ >
< /activity-alias >
< service >
< intent-filter >< /intent-filter >
< meta-data/ >
< /service >
< receiver >
< intent-filter >< /intent-filter >
< meta-data/ >
< /receiver >
< provider >
< grant-uri-permission/ >
< meta-data/ >
< /provider >
< uses-library/ >
< /application >
< uses-permission/ >
< permission/ >
< permission-tree/ >
< permission-group/ >
< instrumentation/ >
< uses-sdk/ >
< uses-configuration/ >
< uses-feature/ >
< supports-screens/ >
< /manifest >
1)< Manifest >
xmlns:android
定义android命名空间,一般为http://schemas.android.com/apk/res/android,这样使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据。
package
指定本应用内Java主程序包的包名,它也是一个应用进程的默认名称
sharedUserId
表明数据权限,因为默认情况下,Android给每个APK分配一个唯一的UserID,所以是默认禁止不同APK访问共享数据的。若要共享数据,第一可以采用Share Preference方法,第二种就可以采用sharedUserId了,将不同APK的sharedUserId都设为一样,则这些APK之间就可以互相共享数据了。
sharedUserLabel
一个共享的用户名,它只有在设置了sharedUserId属性的前提下才会有意义
versionCode
是给设备程序识别版本(升级)用的必须是一个interger值代表app更新过多少次。
versionName
这个名称是给用户看的,你可以将你的APP版本号设置为1.1版,后续更新版本设置为1.2、2.0版本等等。。。
installLocation
安装参数,是Android2.2中的一个新特性,installLocation有三个值可以选择:internalOnly、auto、preferExternal
选择preferExternal,系统会优先考虑将APK安装到SD卡上(当然最终用户可以选择为内部ROM存储上,如果SD存储已满,也会安装到内部存储上)
选择auto,系统将会根据存储空间自己去适应
选择internalOnly是指必须安装到内部才能运行
2)< Application >
android:allowClearUserData('true' or 'false')
用户是否能选择自行清除数据,默认为true,程序管理器包含一个选择允许用户清除数据。当为true时,用户可自己清理用户数据,反之亦然
android:allowTaskReparenting('true' or 'false')
是否允许activity更换从属的任务,比如从短信息任务切换到浏览器任务
android:backupAgent
这也是Android2.2中的一个新特性,设置该APP的备份,属性值应该是一个完整的类名,如com.project.TestCase,此属性并没有默认值,并且类名必须得指定(就是个备份工具,将数据备份到云端的操作)
android:debuggable
这个从字面上就可以看出是什么作用的,当设置为true时,表明该APP在手机上可以被调试。默认为false,在false的情况下调试该APP,就会报错
android:description/android:label
此两个属性都是为许可提供的,均为字符串资源,当用户去看许可列表(android:label)或者某个许可的详细信息(android:description)时,这些字符串资源就可以显示给用户。label应当尽量简短,之需要告知用户该许可是在保护什么功能就行。而description可以用于具体描述获取该许可的程序可以做哪些事
android:enabled
Android系统是否能够实例化该应用程序的组件,如果为true,每个组件的enabled属性决定那个组件是否可以被 enabled。如果为false,它覆盖组件指定的值;所有组件都是disabled。
android:hasCode('true' or 'false')
表示此APP是否包含任何的代码,默认为true,若为false,则系统在运行组件时,不会去尝试加载任何的APP代码
一个应用程序自身不会含有任何的代码,除非内置组件类,比如Activity类,此类使用了AliasActivity类,当然这是个罕见的现象
android:icon
声明整个APP的图标,图片一般都放在drawable文件夹下
android:killAfterRestore
android:manageSpaceActivity
android:name
为应用程序所实现的Application子类的全名。当应用程序进程开始时,该类在所有应用程序组件之前被实例化。
android:permission
设置许可名,这个属性若在< application >上定义的话,是一个给应用程序的所有组件设置许可的便捷方式,当然它是被各组件设置的许可名所覆盖的
android:presistent
该应用程序是否应该在任何时候都保持运行状态,默认为false。因为应用程序通常不应该设置本标识,持续模式仅仅应该设置给某些系统应用程序才是有意义的。
android:process
应用程序运行的进程名,它的默认值为< manifest >元素里设置的包名,当然每个组件都可以通过设置该属性来覆盖默认值。如果你想两个应用程序共用一个进程的话,你可以设置他们的android:process相同,但前提条件是他们共享一个用户ID及被赋予了相同证书的时候
android:restoreAnyVersion
同样也是android2.2的一个新特性,用来表明应用是否准备尝试恢复所有的备份,甚至该备份是比当前设备上更要新的版本,默认是false
android:taskAffinity
拥有相同的affinity的Activity理论上属于相同的Task,应用程序默认的affinity的名字是< manifest >元素中设定的package名
android:theme
是一个资源的风格,它定义了一个默认的主题风格给所有的activity。
3)< Activity >
android:alwaysRetainTaskState
是否保留状态不变, 比如切换回home, 再从新打开,activity处于最后的状态。比如一个浏览器拥有很多状态(当打开了多个TAB的时候),用户并不希望丢失这些状态时,此时可将此属性设置为true
android:clearTaskOnLaunch
比如 P 是 activity, Q 是被P 触发的 activity, 然后返回Home, 重新启动 P,是否显示 Q
android:configChanges
正常情况下. 如果手机旋转了.当前Activity后杀掉,然后根据方向重新加载这个Activity. 就会从onCreate开始重新加载.
如果你设置了 这个选项, 当手机旋转后,当前Activity之后调用onConfigurationChanged() 方法. 而不跑onCreate方法等.
android:excludeFromRecents
是否可被显示在最近打开的activity列表里,默认是false
android:finishOnTaskLaunch
当用户重新启动这个任务的时候,是否关闭已打开的activity,默认是false
如果这个属性和allowTaskReparenting都是true,这个属性就是王牌。Activity的亲和力将被忽略。该Activity已经被摧毁并非re-parented
android:launchMode(Activity加载模式)
在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这需要为Activity配置特定的加载模式,而不是使用默认的加载模式
android:multiprocess
是否允许多进程,默认是false
android:noHistory
当用户从Activity上离开并且它在屏幕上不再可见时,Activity是否从Activity stack中清除并结束。默认是false。Activity不会留下历史痕迹
android:screenOrientation
activity显示的模式
默认为unspecified:由系统自动判断显示方向
landscape横屏模式,宽度比高度大
portrait竖屏模式, 高度比宽度大
user模式,用户当前首选的方向
behind模式:和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)
sensor模式:有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换
nosensor模式:忽略物理感应器,这样就不会随着用户旋转设备而更改了
android:stateNotNeeded
activity被销毁或者成功重启时是否保存状态
android:windowSoftInputMode
activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。
7.res/values/string.xml 文件
该文件中定义的是一些程序所需要的字符串资源。
8.activity_main.xml 文件
视图文件 layout/activity_main.xml定义了视图的布局和参数。
9.android.jar 文件
每一个java项目都要引入工具类,绝大部分的工具包都被封装在该文件中。