首页 > 代码库 > android应用框架
android应用框架
Android框架:
Src:主要完成Java代码的编写
Gen:系统自动生成的源代码目录
R.java:默认有attr(属性)、drawable、layout、string 4个静态内部类
Assets:资源目录
Bin:输出文件夹
Res:图片、布局文件、字符串、菜单等文件
Drawable:存放工程图片信息,默认png格式的图片。
Layout:存放工程布局文件
Values:一些重要的值
Stings.xml:字符串和数值、Color.xml颜色和颜色字符串数值
Dimens.xml:定义尺寸数值、Styles.xml:定义样式
Arrays:定义数组
AndroidManifest.xml:一个用来描述 Android 应用程式「整体资讯」的设定档。
A包名(package):指定本应用内java主程序包的包名。当没有指定apk的文件名时,编译后产生程序包将以此命名。本包名应当在Android系统运行时唯一。
B认证(certificate):指定本应用程序所授予的信任级别,目前有的认证级别有platform(system)、shared、media以及应用自定义的认证。不同的认证可以享受不同的权限。
C权限组(permission-group):权限组的定义是为了描述一组具有共同特性的权限。
D权限(permission):权限用来描述是否拥有做某件事的权力。Android系统中权限是分级的,前分为普通级别(Normal),危险级别(dangerous),签名级别(signature)和系统/签名级别(signature or system)。系统中所有预定义的权限根据作用的不同,分别属于不同的级别。对于普通和危险级别的权限,我们称之为低级权限,应用申请即授予。其他两级权限,我们称之为高级权限或系统权限,应用拥有platform级别的认证才能申请。当应用试图在没有权限的情况下做受限操作,应用将被系统杀掉以警示。系统应用可以使用任何权限。权限的声明者可无条件使用该权限。
E权限树(permission-tree):权限树的设置是为了统一管理一组权限,声明于该树下的权限所有者归属该应用。系统提供了API,应用可以在运行时动态添加。 PackageManager.addPermission()
F使用权限(uses-permission):应用需要的权限应当在此处申请,所申请的权限应当被系统或某个应用所定义,否则视为无效申请。同时,使用权限的申请需要遵循权限授予条件,非platform认证的应用无法申请高级权限。
GSDK(uses-sdk):标识本应用运行的SDK版本。高兼容性的应用可以忽略此项。
Happlication:application是Android应用内最高级别(top level)的模块,每个应用内最多只能有一个application,如果应用没有指定该模块,一个默认的application将被启用。 application将在应用启动时最先被加载,并存活在应用的整个运行时生命周期。因此一些初始化的工作适合在本模块完成. Application元素有许多属性,其中:“persistent”表示本应用是否为常驻内存,“enable”表示本应用当前是否应当被加载。
Iactivity:activity 是application模块的运行时子元素,标识了一个UI。除了application,一个应用可以声明并实现零至多个其它运行时模块,activity也同样。activity也包含了许多定义它工作状态的属性,其中:“name”是必须的,它指定了该activity所在的文件名,如果该文件所属包不同于该应用的包名(即本描述文件的最开始处),那么名字前面需要加入所在包名。activity通过增加intent- fliter来标识哪些intent可以被处理,同时intent也是调度activity的主要参数。
Jreceiver:receiver 也是application的运行时子元素。receiver通过增加intent-fliter来标识它需要接受哪些intent。当收到intent 后,receiver将根据不同的intent进行不同的处理。当一个Intent发出后,所有注册了该intent的receiver都将会收到,系统会根据receiver在系统中的注册次序顺序发送。当一个receiver处理完该Intent后,系统才会向下一个receiver发送。当一个receiver有多个未接收的intent时,将按照intent发送的次序顺序接收。
Kservice:service也是application的运行时子元素。Service属于后台模块,启动后将长时间运行,除非停止该service或所在应用进程被杀死。
Lprovider:provider 也是application的运行时子元素。它继承于ContentProvider,是对该应用管理的用户数据的结构化接入,是基于数据库操作方式的封装。如果应用允许外部应用访问/管理它的用户数据,provider是Android平台提供的最佳方式。
Mactivity-alias:顾名思义,是已有activity的别名。
Nuses-library:标识应用启动所必须的共享库。
每个元素节点都有对个属性来描述该节点的信息,最常用的属性有:android:name=".MyName",定义了节点的文件名,这些声明的属性共同构成了元素节点的信息。
<activity android:name=".app.MyName"
<activity android:name="MyName"
<activity android:name=".MyName"
activity组件的android:name属性采用类名的简写方式,查看文档类名的简写格式为“.ClassName”,但为什么<activity android:name="MyName">里的android:anem="MyName",而不是android:anem=".MyName"呢? 而后面的所有Activity组件的android:name的值都是“.ClassName”格式呢?马上google查询android:name属性值的说明,但未查到有类名前不加“.”的说明!
那就实际测试验证结果"MyName"与".MyName"的写法都能正确运行程序。难道类名前有“.”与没有“.”是一样的? 明明文档中说明的是“.ClassName”格式啊!于是把其它的Activity的android:name的值字符串中的第一个“.”去掉,再运行程序,却不行,越发的感觉奇怪!郁闷!经过反复的测试,发现了一个规则:
如果manifest中指定了package属性,比如指定为"com.android.sample",如果activity的实现类也在这个package下,则android:name为实现的类名,这个类名前加不加点都没有关系,如果activity的实现类是在默认包的子包里面,则这个“.”是必须有的,比如activity的实现是com.android.sample.app.DialogActivity,则android:name必须写成.app.DialogActivity或者com.android.sample.app.DialogActivity。如果只写app.DialogActivity,则会报错。
关于Settings$WirelessSettingsActivity 中间这个$符号什么意思
这是在xml中声明Activity时候出现的 Settings$WirelessSettingsActivity 有setting这个包 但是setting下木有WirelessSettingsActivity
Settings$WirelessSettingsActivity 中间这个$符号,表明是WirelessSettingsActivity是Settings类的内部类
Project.properties:工程属性文件配置