Android清单文件详解(五)----<application>的属性详解

本文深入探讨了Android清单文件中<application>节点的各项属性,包括android:allowBackup、android:debuggable、android:enabled等,详细解释了它们的功能、默认值及其在应用程序中的作用。例如,android:allowBackup属性控制应用是否参与备份,android:debuggable标志决定了应用是否可调试。了解这些属性有助于优化应用性能和安全设置。
摘要由CSDN通过智能技术生成

前面第三篇,第四篇博文虽然讲解了application节点的几个属性,但是还不够完全,本着对专业执着的精神,有必要深挖下去。



1.android:allowBackup



它表示是否允许应用程序参与备份。如果将该属性设置为false,则即使备份整个系统,也不会执行这个应用程序的备份操作,而整个系统备份能导致所有应用程序数据通过ADB来保存。该属性必须是一个布尔值,或为true,或为false,其默认值为true。


现在,我们就对前面的HelloWorld实例进行修改。在工程的AndroidManifest.xml文件中添加allowBackup属性,并将其设置为false。该属性属于<application>节点,如下图所示的代码:



编译并安装应用程序,完成后运行应用程序。


单击“myBackup”按钮,并执行adb shell bmgr run命令来执行一次备份操作,这样操作后看到的日志如下所示:



上图所示,我们没有看到任何执行应用程序备份的日志输出,这说明android:allowBackup限制了备份的执行。



2.allowTaskReparenting



android:allowTaskReparenting是任务调整属性,它表明这个任务重新被送到前台的时候,该应用程序所定义的Activity是否可以从被启动的任务中转移到有相同亲和力的任务中。


这个属性的数据类型是布尔型,它的取值只有true和false两种。它不是必须指定的属性,如果我们没有显示指定这个属性,那么它将被指定为默认值false。


<application>和<activity>节点上都有这个属性可以配置。如果将该属性配置在<application>节点上,并且没有在<activity>节点上配置的情况下,<application>节点上的值将会应用到每一个<activity>节点上。反之,如果<activity>节点上配置了这个属性,则以<activity>节点上的值为准。



3.android:killAfterRestore



这个属性是指在一个完整的系统恢复操作之后应用程序是否被终止。单个应用程序的恢复操作不会引起应用程序的终止。完整的系统恢复操作一般仅在手机首次安装时才会发生一次。第三方应用通常都不需要使用该属性。


该属性的默认值为true,意为在完整的系统恢复期间,应用程序在结束处理其数据之后将被终止。



4.android:restoreAnyVersion



它指是否允许恢复任意版本的备份数据来恢复应用程序的数据,即使备份明显来自于当前安装在设备上的应用程序的更新版本。将该属性设置为true,则将允许备份管理器尝试恢复操作,有的时候版本不匹配表明数据是不兼容的,这个时候如果可以恢复到不同版本的数据,那么应用程序将承受很大的风险,所以请谨慎使用此属性


它必须是布尔值,或为true,或为false,默认值为false。



5.android:debuggable



这是一个布尔型标志,它的取值是true或false,这个标志指示应用程序在用户模式的设备上是否可以调试。如果为true,则表示应用程序可以被调试;如果为false,则表示应用程序不可以被调试。它的默认值是false。使用这个标志唯一需要注意的是,它只在用户模式的机器上生效,用户模式既是买着用的android手机,而虚拟机一般都是工程模式。


当你创建一个项目的时候,一般这个属性没有配置,但它有默认值,为false。


要发挥极客精神,就有必要对这个只是深挖,下面就来介绍这个标志是如何生效的。


首先,在安装一个应用程序的APK到设备中时,包管理服务(PackageManagerService)会调用自己的解析器(PackageParser)去解析应用程序的"AndroidManifest.xml"文件,从而形成包信息。它的解析入口函数位于“/frameworks/base/core/java/android/content/pm/PackageParser.java”的parsePackage()方法中,该方法的关键代码如下所示:


public Package parsePackage(File source,String destCodePath,DisplayMetrics metrics,int false){

.......

//打开AndroidManifest.xml文件

parser=assmgr.openXmlResourceParser(cookie,ANDROID_MANIFES_FILENAME);

........

try{

//开始解析AndroidManifest.xml文件

pkg=parserPackage(res,parser,flags,errorText);

}catch(Exception e){

......

}

//返回包信息

return pkg;

}


这里pkg=parserPackage(res,parser,flags,errorText);;负责解析整个AndroidManifest.xml文件。由于android:debuggable是<application>节点的属性之一,这里将通过parseApplication()方法解析整个<application>节点,其中包括自身属性,<service>节点,<activity>节点等的处理。对于android:debuggable属性,它是这样处理的:


private boolean parseApplication(Package owner,Resources res,XmlPullParser parser,AttributeSet attrs,int flags,String[] outError)throws XmlPullParserException,IOException{

final ApplicationInfo ai=owner.applicationInfo;

final String pkgName=owner.applicationInfo.packageName;

.....

if(sa.getBoolean(com.android.internal.R.sytleable.AndroidManifestApplication_debuggable,false)){

ai.flags|=ApplicationInfo.FLAG_DEBUGGABLE;

}

.....

return true;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李元静

您的鼓励就是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值