导航:首页 > 操作系统 > androidxmls

androidxmls

发布时间:2022-06-11 12:16:58

android 原生atts.xml在哪个文件下面

Android开发之XML文件的解析的三种方法

/*
* Android开发之XML文件的解析的三种方法
*
* Created on: 2012-7-24
* Author: blueeagle
* Email:[email protected]
*/
本文主要讲解Android开发中如何对XML文件的解析,由于XML文件具有与平台无关,广泛应用于数据通信中,因此解析XML文件就显得很有意义。Android对XML文件解析的方法主要有3种。 通常有三种方式:DOM、SAX和PULL,下面就分别针对这三种方式来进行讨论。
假设我们在开发天气预报应用程序的时候,使用google给我们提供的API,以及天气预报数据,例如我们要获得北京当前的天气预报数据,即可在浏览器中输入如下地址:http://www.google.com/ig/api?&weather=beijing。 则可以看到一个XML文件展现在我们面前,对于此XML文件Google给我们的说明是:
“This XML file does not appear to have any style informationassociated with it. The document tree is shown below”.即此XML文件没有任何样式信息,只有文档结构树的显示。
文件内容如下所示:

[html] view plain
<xml_api_reply version="1">
<weather mole_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0">
<forecast_information>
<city data="Beijing, Beijing"/>
<postal_code data="beijing"/>
<latitude_e6 data=""/>
<longitude_e6 data=""/>
<forecast_date data="2012-07-24"/>
<current_date_time data="2012-07-24 15:30:00 +0000"/>
<unit_system data="SI"/>
</forecast_information>
<current_conditions>
<condition data="多云"/>
<temp_f data="77"/>
<temp_c data="25"/>
<humidity data="湿度: 78%"/>
<icon data="/ig/images/weather/cn_cloudy.gif"/>
<wind_condition data="风向: 东北、风速:2 米/秒"/>
</current_conditions>
<forecast_conditions>
<day_of_week data="周二"/>
<low data="22"/>
<high data="30"/>
<icon data="/ig/images/weather/cn_cloudy.gif"/>
<condition data="多云"/>
</forecast_conditions>
<forecast_conditions>
<day_of_week data="周三"/>
<low data="24"/>
<high data="30"/>
<icon data="/ig/images/weather/chance_of_rain.gif"/>
<condition data="可能有雨"/>
</forecast_conditions>
<forecast_conditions>
<day_of_week data="周四"/>
<low data="25"/>
<high data="29"/>
<icon data="/ig/images/weather/thunderstorm.gif"/>
<condition data="雷阵雨"/>
</forecast_conditions>
<forecast_conditions>
<day_of_week data="周五"/>
<low data="24"/>
<high data="31"/>
<icon data="/ig/images/weather/chance_of_storm.gif"/>
<condition data="可能有暴风雨"/>
</forecast_conditions>
</weather>
</xml_api_reply>

附上出处链接:http://blog.csdn.net/shidahong/article/details/7799741

Ⅱ android的String.xml文件中使用%s表示什么意思,怎么使用

今天更新新版android SDK,发现对xml配置文件中各个控件属性设置更加严谨了,以前在strings.xml里配置的带有 %s,%f 等变量格式的符号要求更加成%1$s,%1$f这样的符号来代替,其中%1表示第一个位置的变量, $s表示为字符串类。

Ⅲ android 怎么把俩个xml文件整合到一起

private ViewGroup group;
private ViewGroup main;
main = (ViewGroup) inflater.inflate(R.layout.main, null);//这里的R。latout.main就是当前布局
group = (ViewGroup) main.findViewById(R.id.viewGroup);
group.addView(imageViews[i]);//这样就把一个imageview(你可添加一个任意复杂的View,这个View实例化的时候指向你所谓的其他布局文件)加入当前布局中的某个ViewGroup里了,你布局时可定义一个LinearLayout id 设为(R.id.viewGroup),oratation设为垂直,放到下面就是了。

Ⅳ android里面怎么解析xml

Android解析xml文件总共有三种方法,分别是:

  1. SAX解析XML文件:SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。如下代码:


    java">publicstaticList<Person>readXML(InputStreaminStream){
    try{
    //创建解析器
    SAXParserFactoryspf=SAXParserFactory.newInstance();
    SAXParsersaxParser=spf.newSAXParser();

    //设置解析器的相关特性,true表示开启命名空间特性
    saxParser.setProperty("http://xml.org/sax/features/namespaces",true);
    XMLContentHandlerhandler=newXMLContentHandler();
    saxParser.parse(inStream,handler);
    inStream.close();

    returnhandler.getPersons();
    }catch(Exceptione){
    e.printStackTrace();
    }

    returnnull;
    }


    //SAX类:DefaultHandler,它实现了ContentHandler接口。在实现的时候,只需要继承该类,重载相应的方法即可。
    {

    privateList<Person>persons=null;
    privatePersoncurrentPerson;
    privateStringtagName=null;//当前解析的元素标签

    publicList<Person>getPersons(){
    returnpersons;
    }

    //接收文档开始的通知。当遇到文档的开头的时候,调用这个方法,可以在其中做一些预处理的工作。
    @Override
    publicvoidstartDocument()throwsSAXException{
    persons=newArrayList<Person>();
    }

    //接收元素开始的通知。当读到一个开始标签的时候,会触发这个方法。其中namespaceURI表示元素的命名空间;
    //localName表示元素的本地名称(不带前缀);qName表示元素的限定名(带前缀);atts表示元素的属性集合
    @Override
    publicvoidstartElement(StringnamespaceURI,StringlocalName,StringqName,Attributesatts)throwsSAXException{

    if(localName.equals("person")){
    currentPerson=newPerson();
    currentPerson.setId(Integer.parseInt(atts.getValue("id")));
    }

    this.tagName=localName;
    }

    //接收字符数据的通知。该方法用来处理在XML文件中读到的内容,第一个参数用于存放文件的内容,
    //后面两个参数是读到的字符串在这个数组中的起始位置和长度,使用newString(ch,start,length)就可以获取内容。
    @Override
    publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{

    if(tagName!=null){
    Stringdata=newString(ch,start,length);
    if(tagName.equals("name")){
    this.currentPerson.setName(data);
    }elseif(tagName.equals("age")){
    this.currentPerson.setAge(Short.parseShort(data));
    }
    }
    }

    //接收文档的结尾的通知。在遇到结束标签的时候,调用这个方法。其中,uri表示元素的命名空间;
    //localName表示元素的本地名称(不带前缀);name表示元素的限定名(带前缀)
    @Override
    publicvoidendElement(Stringuri,StringlocalName,Stringname)throwsSAXException{

    if(localName.equals("person")){
    persons.add(currentPerson);
    currentPerson=null;
    }

    this.tagName=null;
    }
    }
  2. DOM解析XML文件: DOM解析XML文件时,会将XML文件的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据。使用DOM操作XML的代码看起来比较直观,并且,在某些方面比基于SAX的实现更加简单。但是,因为DOM需要将XML文件的所有内容读取到内存中,所以内存的消耗比较大,特别对于运行Android的移动设备来说,因为设备的资源比较宝贵,所以建议还是采用SAX来解析XML文件,当然,如果XML文件的内容比较小采用DOM是可行的。

  3. Pull解析器解析XML文件: Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型元素的值

Ⅳ android.xml哪个命令是获取root权限

Android的应用程序入口肯定是java程序。应用程序的启动者是由系统临时根据Androidmanifest.xml中定义的权限而创建的临时用户。而不像linux那样是使用登陆者的身份启动,从而使得进程具有登陆者的所有权限。这也是Android的安全机制之一。

新的权限机制也带来新的问题,Android给应用程序的权限是按功能来分,java虽然可以访问文件系统。但由于应用程序本身是临时用户启动,这个临时用户权限十分有限。因此诞生了<越狱/root机器>这样的产物。

其实root机器不是真正能让你的应用程序具有root权限。它原理就跟linux下的像sudo这样的命令。在系统的bin目录下放个su程序并属主是root并有suid权限。则通过su执行的命令都具有Android root权限。

Su的源代码网上也有,有兴趣的同学去google下。

当然使用临时用户权限想把su拷贝的/system/bin目录并改属性并不是一件容易的事情。这里用到2个工具跟2个命令。工具就是busybox。不熟悉的同学可以去网上google下。这个太有名了我就不多说了。

把busybox拷贝到你有权限访问的目录然后给他赋予4755权限,你就可以用它做很多事了。

当然busybox只能不能提升权限,真正提升权限的是ratc这个程序,这个程序中一键root包里面可以找到,作用是rooting在adb的shell。

网上介绍Ratc的文章不多,它是rage against the cage 的缩写。是真正的提升权限的破解程序。虽然我没看过源代码,但估计是利用adb源代码部分内容来实现的,原理估计跟模拟器使用adb shell登陆可以获得root shell差不多。(因为它运行需要adb连接才会成功)。

使用busybox前先运行ratc,这样运行busybox的UID将是0,也就是root。

首先把system目录改成可读性的:busybox mount -o remount,rw /system,当然你还不能改下面的文件,因为system下文件的所有者都不是你,但你可以偷梁换柱把system下的目录给换掉。

使用命令Busybox mount -t tmpfs none /system/xbin,呵呵这下xbin目录你随便写了。

将su跟busybox弄过去cp /data/data/xxx/su /system/xbin。然后赋权限chmod 4755 /system/xbin/su。然后使目录生效busybox --install -s /system/xbin,别忘善后busybox mount -o remount,ro /system去掉system可写。

这样只是临时的,只能用su跟busybox能执行一些原来系统没有权限执行的命令而已。当系统重启后/system/xbin又变为原来的文件。真正要改系统的话需要自己写内核代码(相当于windows的驱动程序)。内核文件拥有所有权限。使用busybox命令insmod /data/data/xxx/xxx.ko装载内核文件,你想干嘛就可以干嘛了。

当然我们不是搞破解的没必要去改别人的机器,我们只是想让自己应用程序具有root权限而已。所以临时的su就可以了。我们用c++写一个可执行文件。使用socket可以跟java的程序通讯。然后将需要使用root权限才能执行的代码放在c++程序里,然后java程序中创建新的su进程,将c++程序带全路径作为参数1。启动后就可以通过socket调用c++函数去执行你想干的事了。

最后程序执行完了别忘了善后busybox umount /system/xbin。

最后说说要注意的事情,如果机器已经拥有Android root权限的话就不需要做这些事情了,但root过的机器都有装有个权限管理的程序。会弹出对话框。但这个程序管理能力有限,如果不想让他弹出的话。也许可以通过改su文件名来解决。有兴趣的同学不妨试试。

Ⅵ Android在xml为什么使用不了ClearEditText 求指导

效果图如上,接下来我们看代码:

首先新建一个java文件继承EditText,小编新建的是ClearEditText.java

在XML文件中使用:详细代码

Ⅶ android中怎么解析复杂的xml文件

本文主要讲解Android开发中如何对XML文件的解析,由于XML文件具有与平台无关,广泛应用于数据通信中,因此解析XML文件就显得很有意义。Android对XML文件解析的方法主要有3种。 通常有三种方式:DOM、SAX和PULL,下面就分别针对这三种方式来进行讨论。

文件内容如下所示:
那么就是要对此XML文件做解析。下面我们就分别用DOM,SAX和PULL三种方式,分别对此XML文件做解析。

DOM方式

DOM方式解析xml是先把xml文档都读到内存中,然后再用DOM API来访问树形结构,并获取数据。由DOM解析的方式可以知道,如果XML文件很大的时候,处理效率就会变得比较低,这也是DOM方式的一个缺点。
现在我们来解析上文中提到的有关天气预报信息相关的xml文件。什么是解析呢?说的通俗一点,就是将这个带标签的XML文件识别出来,并抽取一些相关的,对我们有用的信息来给我们使用。那在这个文件里,时间,天气,温度,以及图标对我们来说是需要得到的。我们要对其做解析。
解析的具体思路是:
1. 将XML文件加载进来。
2. 获取文档的根节点
3. 获取文档根节点中所有子节点的列表
4. 获取子节点列表中需要读取的节点信息
根据这4个步骤,我们进行开发:
首先就是如何加载XML文件,假设此文件来源于网络。

SAX方式

SAX是Simple API for XML的缩写。是一个包也可以看成是一些接口。
相比于DOM而言SAX是一种速度更快,更有效,占用内存更少的解析XML文件的方法。它是逐行扫描,可以做到边扫描边解析,因此SAX可以在解析文档的任意时刻停止解析。非常适用于Android等移动设备。
SAX是基于事件驱动的。所谓事件驱动就是说,它不用解析完整个文档,在按内容顺序解析文档过程中,SAX会判断当前读到的字符是否符合XML文件语法中的某部分。如果符合某部分,则会触发事件。所谓触发事件,就是调用一些回调方法。当然android的事件机制是基于回调方法的,在用SAX解析xml文档时候,在读取到文档开始和结束标签时候就会回调一个事件,在读取到其他节点与内容时候也会回调一个事件。在SAX接口中,事件源是org.xml.sax包中的XMLReader,它通过parser()方法来解析XML文档,并产生事件。事件处理器是org.xml.sax包中ContentHander、DTDHander、ErrorHandler,以及EntityResolver这4个接口。
这四个接口的详细说明如下:

事件处理器名称

事件处理器处理的事件

XMLReader注册方法

ContentHander

XML文档的开始与结束,
XML文档标签的开始与结束,接收字符数据,跳过实体,接收元素内容中可忽略的空白等。

setContentHandler(ContentHandler h)

DTDHander

处理DTD解析时产生的相应事件

setDTDHandler(DTDHandler h)

ErrorHandler

处理XML文档时产生的错误

setErrorHandler(ErrorHandler h)

EntityResolver

处理外部实体

setEntityResolver(EntityResolver e)

我们用来做内容解析的回调方法一般都定义在ContentHandler接口中。
ContentHandler接口常用的方法:
startDocument()
当遇到文档的开头的时候,调用这个方法,可以在其中做一些预处理的工作。
endDocument()
当文档结束的时候,调用这个方法,可以在其中做一些善后的工作。
startElement(String namespaceURI, String localName,String qName, Attributes atts)
当读到开始标签的时候,会调用这个方法。namespaceURI就是命名空间,localName是不带命名空间前缀的标签名,qName是带命名空间前缀的标签名。通过atts可以得到所有的属性名和相应的值。
endElement(String uri, String localName, String name)
在遇到结束标签的时候,调用这个方法。
characters(char[] ch, int start, int length)
这个方法用来处理在XML文件中读到的内容。例如:<high data="30"/>主要目的是获取high标签中的值。
第一个参数用于存放文件的内容,后面两个参数是读到的字符串在这个数组中的起始位置和长度,使用new String(ch,start,length)就可以获取内容。
注意:
SAX的一个重要特点就是它的流式处理,当遇到一个标签的时候,它并不会纪录下之前所碰到的标签,即在startElement()方法中,所有能够知道的信息,就是标签的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元属等等其它与结构相关的信息,都是不知道的,都需要你的程序来完成。这使得SAX在编程处理上没有DOM方便。
现在我们截取一段XML文件来做解析,其调用方法是这样的:
<?xml version="1.0"?> ----------> startDocument()
<weather> ----------> startElement
<forecast_information> ----------> startElement
<city> ----------> startElement
beijing ----------> characters
</city> ----------> endElement
</forecast_information > ----------> endElement
</weather > ----------> endElement
文档结束 ----------> endDocument()
SAX的解析步骤:
首先需要注意的是:
SAX还为其制定了一个Helper类:DefaultHandler它实现了ContentHandler这个接口,但是其所有的方法体都为空,在实现的时候,你只需要继承这个类,然后重载相应的方法即可。
使用SAX解析XML文件一般有以下五个步骤:
1、创建一个SAXParserFactory对象;
2、调用SAXParserFactory中的newSAXParser方法创建一个SAXParser对象;
3、然后在调用SAXParser中的getXMLReader方法获取一个XMLReader对象;
4、实例化一个DefaultHandler对象
5、连接事件源对象XMLReader到事件处理类DefaultHandler中
6、调用XMLReader的parse方法从输入源中获取到的xml数据
7、通过DefaultHandler返回我们需要的数据集合。
我们仍然来解析上述那个天气预报的XML文件。
编写代码如下:

[java] view plain
mySAX.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
try{
String url = "http://www.google.com/ig/api?&weather=beijing";
DefaultHttpClient client = new DefaultHttpClient();
HttpUriRequest req = new HttpGet(url);
HttpResponse resp = client.execute(req);
HttpEntity ent = resp.getEntity();
InputStream stream = ent.getContent(); //将文件导入流,因此用InputStream

SAXParserFactory saxFactory = SAXParserFactory.newInstance(); //获取一个对象
SAXParser saxParser = saxFactory.newSAXParser();//利用获取到的对象创建一个解析器
XMLContentHandler handler = new XMLContentHandler();//设置defaultHandler
saxParser.parse(stream, handler);//进行解析
stream.close();//关闭流
/*XMLReader xmlReader = saxFactory.newSAXParser().getXMLReader(); //获取一个XMLReader
xmlReader.setContentHandler(handler);
xmlReader.parse(new InputSource(stream));
stream.close();*/
}catch(Exception e){
e.printStackTrace();
}
}
});
}
public class XMLContentHandler extends DefaultHandler {
private static final String TAG = "XMLContentHandler";

@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
Log.i(TAG, "解析内容:"+new String(ch,start,length));
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
Log.i(TAG, "文档解析完毕。");
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
Log.i(TAG, localName+"解析完毕");
}
@Override
public void startDocument() throws SAXException {
Log.i(TAG, "开始解析... ...");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
Log.i(TAG, "解析元素:"+localName);

if(localName.equals("high")){
Log.i(TAG, "解析元素:"+localName);
i++;
if(i==2){
highestTmp.setText(String.valueOf((Integer.parseInt(attributes.getValue(0))-32)*5/9));
}
}
}
}

上面的那段注释:

[java] view plain
/*XMLReader xmlReader =saxFactory.newSAXParser().getXMLReader(); //获取一个XMLReader
xmlReader.setContentHandler(handler);
xmlReader.parse(newInputSource(stream));
stream.close();*/

是用XMLReader来做解析的另外一种方法。效果是一样的。这里可以传流,也可以传一个字符串,如下所示:是传字符串。
[java] view plain
xmlReader.parse(new InputSource(new StringReader(xmlStr)));
PULL方式
除了可以使用 SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件。 Pull解析器的运行方式与 SAX 解析器相似。它也是事件触发的。Pull解析方式让应用程序完全控制文档该怎么样被解析。比如开始和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。通过Parser.getEventType()方法来取得事件的代码值,解析是在开始时就完成了大部分处理。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。
Pull解析是一个遍历文档的过程,每次调用next(),nextTag(), nextToken()和nextText()都会向前推进文档,并使Parser停留在某些事件上面,但是不能倒退。然后把文档设置给Parser。
Android中对Pull方法提供了支持的API,主要是
org.xmlpull.v1.XmlPullParser;
org.xmlpull.v1.XmlPullParserFactory;
二个类,其中主要使用的是XmlPullParser,XmlPullParserFactory是一个工厂,用于构建XmlPullParser对象。
应用程序通过调用XmlPullParser.next()等方法来产生Event,然后再处理Event。
我们仍然拿上述天气预报的XML文件的一部分来做例子。
例如:需要解析的XML文件是:

[java] view plain
<forecast_conditions>
<day_of_week data="周三"/>
<low data="22"/>
<high data="29"/>
<icon data="/ig/images/weather/chance_of_rain.gif"/>
<condition data="可能有雨"/>
</forecast_conditions>

这部分XML文件中day_of_week,low,high等是TAG,data是ATTRIBUTEA。当然,如果有<></>夹在开始和结束符号之间的部分,则为TXET。
要想解析文档先要构建一个XmlPullParser对象。

[java] view plain
final XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
final XmlPullParser parser = factory.newPullParser();
parser.setInput(new StringReader("xmlStr");

这里的xmlStr就是上边的XML文件。
此时,文档刚被初始化,所以它应该位于文档的开始,事件为START_DOCUMENT,可以通过XmlPullParser.getEventType()来获取。然后调用next()会产生
START_TAG,这个事件告诉应用程序一个标签已经开始了,调用getName()会返回" day_of_week ";若有TEXT,则再next()会产生TEXT事件,调用getText()会返回TEXT,由于此处没有,所以再next(),会产生END_TAG,这个告诉你一个标签已经处理完了,再next()直到最后处理完TAG,会产生END_DOCUMENT,它告诉你整个文档已经处理完成了。除了next()外,nextToken()也可以使用,只不过它会返回更加详细的事件,比如COMMENT, CDSECT, DOCDECL, ENTITY等等非常详细的信息。如果程序得到比较底层的信息,可以用nextToken()来驱动并处理详细的事件。需要注意一点的是TEXT事件是有可能返回空白的White Spaces比如换行符或空格等。
nextTag()--会忽略White Spaces,如果可以确定下一个是START_TAG或END_TAG,就可以调用nextTag()直接跳过去。通常它有二个用处:当START_TAG时,如果能确定这个TAG含有子TAG,那么就可以调用nextTag()产生子标签的START_TAG事件;当END_TAG时,如果确定不是文档结尾,就可以调用nextTag()产生下一个标签的START_TAG。在这二种情况下如果用next()会有TEXT事件,但返回的是换行符或空白符。
nextText()--只能在START_TAG时调用。当下一个元素是TEXT时,TEXT的内容会返回;当下一个元素是END_TAG时,也就是说这个标签的内容为空,那么空字串返回;这个方法返回后,Parser会停在END_TAG上。

小结一下,如果在一个XML文档中我们只需要前面一部分数据,但是使用SAX方式或DOM方式会对整个文档进行解析,尽管XML文档中后面的大部分数据我们其实都不需要解析,因此这样实际上就浪费了处理资源。使用PULL方式正合适。
当点击三种方式的任何一个按钮时,均能够得到相同的结果

Ⅷ Android是如何使用AndroidManifest.xml的

一、关于AndroidManifest.xml

AndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)

二、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>

三、各个节点的详细介绍

上面就是整个am(androidManifest).xml的结构,下面以外向内开始阐述~~

1、第一层(<Manifest>):(属性)

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.woody.test"
android:sharedUserId="string"
android:sharedUserLabel="string resource"
android:versionCode="integer"
android:versionName="string"
android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
</manifest>

A、xmlns:android

定义android命名空间,一般为http://schemas.android.com/apk/res/android,这样使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据。


B、package

指定本应用内java主程序包的包名,它也是一个应用进程的默认名称


C、sharedUserId

表明数据权限,因为默认情况下,Android给每个APK分配一个唯一的UserID,所以是默认禁止不同APK访问共享数据的。若要共享数据,第一可以采用Share Preference方法,第二种就可以采用sharedUserId了,将不同APK的sharedUserId都设为一样,则这些APK之间就可以互相共享数据了。详见:http://wallage.blog.163.com/blog/static/17389624201011010539408/

D、sharedUserLabel

一个共享的用户名,它只有在设置了sharedUserId属性的前提下才会有意义


E、versionCode

是给设备程序识别版本(升级)用的必须是一个interger值代表app更新过多少次,比如第一版一般为1,之后若要更新版本就设置为2,3等等。。。


F、versionName

这个名称是给用户看的,你可以将你的APP版本号设置为1.1版,后续更新版本设置为1.2、2.0版本等等。。。


G、installLocation

安装参数,是Android2.2中的一个新特性,installLocation有三个值可以选择:internalOnly、auto、preferExternal

选择preferExternal,系统会优先考虑将APK安装到SD卡上(当然最终用户可以选择为内部ROM存储上,如果SD存储已满,也会安装到内部存储上)

选择auto,系统将会根据存储空间自己去适应

选择internalOnly是指必须安装到内部才能运行

(注:需要进行后台类监控的APP最好安装在内部,而一些较大的游戏APP最好安装在SD卡上。现默认为安装在内部,如果把APP安装在SD卡上,首先得设置你的level为8,并且要配置android:installLocation这个参数的属性为preferExternal)


2、第二层(<Application>):属性

一个AndroidManifest.xml中必须含有一个Application标签,这个标签声明了每一个应用程序的组件及其属性(如icon,label,permission等)

<application android:allowClearUserData=["true" | "false"]
android:allowTaskReparenting=["true" | "false"]
android:backupAgent="string"
android:debuggable=["true" | "false"]
android:description="string resource"
android:enabled=["true" | "false"]
android:hasCode=["true" | "false"]
android:icon="drawable resource"
android:killAfterRestore=["true" | "false"]
android:label="string resource"
android:manageSpaceActivity="string"
android:name="string"
android:permission="string"
android:persistent=["true" | "false"]
android:process="string"
android:restoreAnyVersion=["true" | "false"]
android:taskAffinity="string"
android:theme="resource or theme" >
</application>

A、android:allowClearUserData('true' or 'false')

用户是否能选择自行清除数据,默认为true,程序管理器包含一个选择允许用户清除数据。当为true时,用户可自己清理用户数据,反之亦然


B、android:allowTaskReparenting('true' or 'false')

是否允许activity更换从属的任务,比如从短信息任务切换到浏览器任务


C、android:backupAgent

这也是Android2.2中的一个新特性,设置该APP的备份,属性值应该是一个完整的类名,如com.project.TestCase,此属性并没有默认值,并且类名必须得指定(就是个备份工具,将数据备份到云端的操作)


D、android:debuggable

这个从字面上就可以看出是什么作用的,当设置为true时,表明该APP在手机上可以被调试。默认为false,在false的情况下调试该APP,就会报以下错误:

Device XXX requires that applications explicitely declare themselves as debuggable in their manifest.

Application XXX does not have the attribute 'debuggable' set to TRUE in its manifest and cannot be debugged.


E、android:description/android:label

此两个属性都是为许可提供的,均为字符串资源,当用户去看许可列表(android:label)或者某个许可的详细信息(android:description)时,这些字符串资源就可以显示给用户。label应当尽量简短,之需要告知用户该许可是在保护什么功能就行。而description可以用于具体描述获取该许可的程序可以做哪些事情,实际上让用户可以知道如果他们同意程序获取该权限的话,该程序可以做什么。我们通常用两句话来描述许可,第一句描述该许可,第二句警告用户如果批准该权限会可能有什么不好的事情发生


F、android:enabled

Android系统是否能够实例化该应用程序的组件,如果为true,每个组件的enabled属性决定那个组件是否可以被 enabled。如果为false,它覆盖组件指定的值;所有组件都是disabled。


G、android:hasCode('true' or 'false')

表示此APP是否包含任何的代码,默认为true,若为false,则系统在运行组件时,不会去尝试加载任何的APP代码

一个应用程序自身不会含有任何的代码,除非内置组件类,比如Activity类,此类使用了AliasActivity类,当然这是个罕见的现象

(在Android2.3可以用标准C来开发应用程序,可在androidManifest.xml中将此属性设置为false,因为这个APP本身已经不含有任何的JAVA代码了)

H、android:icon

这个很简单,就是声明整个APP的图标,图片一般都放在drawable文件夹

I、android:killAfterRestore

J、android:manageSpaceActivity

K、android:name

为应用程序所实现的Application子类的全名。当应用程序进程开始时,该类在所有应用程序组件之前被实例化。

若该类(比方androidMain类)是在声明的package下,则可以直接声明android:name="androidMain",但此类是在package下面的子包的话,就必须声明为全路径或android:name="package名称.子包名成.androidMain"

L、android:permission

设置许可名,这个属性若在<application>上定义的话,是一个给应用程序的所有组件设置许可的便捷方式,当然它是被各组件设置的许可名所覆盖的

M、android:presistent

该应用程序是否应该在任何时候都保持运行状态,默认为false。因为应用程序通常不应该设置本标识,持续模式仅仅应该设置给某些系统应用程序才是有意义的。

N、android:process

应用程序运行的进程名,它的默认值为<manifest>元素里设置的包名,当然每个组件都可以通过设置该属性来覆盖默认值。如果你想两个应用程序共用一个进程的话,你可以设置他们的android:process相同,但前提条件是他们共享一个用户ID及被赋予了相同证书的时候

O、android:restoreAnyVersion

同样也是android2.2的一个新特性,用来表明应用是否准备尝试恢复所有的备份,甚至该备份是比当前设备上更要新的版本,默认是false

P、android:taskAffinity

拥有相同的affinity的Activity理论上属于相同的Task,应用程序默认的affinity的名字是<manifest>元素中设定的package名


Q、android:theme

是一个资源的风格,它定义了一个默认的主题风格给所有的activity,当然也可以在自己的theme里面去设置它,有点类似style。



不过现在在android stuido 上面 版本控制已经使用Gradle了。

Ⅸ android中manifest.xml这个文件在哪

AndroidManifest.xml是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities,services,等等),他们各自的实现类,各种能被处理的数据和启动位置。除了能声明程序中的Activities,ContentProviders,Services,和IntentReceivers,还能指定permissions和instrumentation(安全控制和测试)。AndroidManifest能够包含的标签:1.。2.。3.。4.。5.。6.。Service的正确注册方式:启动service应该要调用startService而不是startActivity。

阅读全文

与androidxmls相关的资料

热点内容
解压视频白头小哥 浏览:748
cadq命令 浏览:954
python连接本地数据库报错 浏览:194
手机模拟加密禁卡操作 浏览:105
电荷数怎么算法 浏览:589
cad如何打开命令行 浏览:150
php图片限制大小 浏览:164
程序员一夜未归 浏览:593
苹果xsmaxapp怎么不显示更新 浏览:600
苹果app怎么清除角标 浏览:483
解压屁屁玩具脏了怎么办 浏览:670
算法识别自动折叠 浏览:9
dos命令遍历文件 浏览:456
翻译整个pdf 浏览:198
怎么给解压软件授权 浏览:621
怎么换手机桌面壁纸安卓 浏览:957
pdf转换阅读器 浏览:344
特斯拉怎么app预约充电 浏览:498
安卓怎么录像更清晰 浏览:919
怎么服务器输入命令没有显示出来 浏览:799