AndroidManifest文件格式解析

630 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

AndroidManifest文件

做过安卓开发的应该对AndroidManifest文件不陌生。在Android应用中,AndroidManifest是应用清单(Manifest意思是货单),每个应用的根目录中都必须包含一个,并且文件名必须为AndroidManifest,一般后缀都是xml,完整名称就是:AndroidManifest.xml。

AndroidManifest.xml 是每个Android程序都有的文件,位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。

Android四大组件都需要声明才能使用,每个组件都需要在 AndroidManifest.xml文件中进行配置。Android四大组件如下:

  • Activity:界面组件,就是一个单独的窗口(例如冷启动应用进入界面的就是launchale-activity)。
  • Service:服务组件,用于在后台完成用户指定的操作(如后台音乐播放)。
  • Cotent provider:内容组件,是一种数据共享型组件,用于向其他组件乃至其他应用共享数据(如短信和联系人应用之间的数据共享)。
  • Broadcast receiver:消息组件,监听/接收应用App发出的广播消息并做出响应(如电话呼入,耳机插入)。

除了声明程序中的四大组件,程序用到的权限也必须在里面声明,指定permissions和instrumentation(安全控制和测试)。所以该文件显得十分重要。

简要概括来说就是,Manifest清单文件包括但不限于以下内容: --为Java应用程序指定一个独一无二的名字。
--描述程序所包括的成分,如activities, services, broadcast receivers和content providers等内容。
--定义哪一个成分是主要的。比如主线程等。
--声明程序正常运行所需要的权限。比如,读写SD卡等。
--声明该程序的API Level,低于该API Level的机器不能运行该程序。
--声明程序需要使用的设备
--声明程序支持的分辨率

AndroidManifest.xml示例如下:

<?xml version="1.0" encoding="utf-8"?>

<manifest>

    <uses-permission />
    <permission />
    <permission-tree />
    <permission-group />
    <instrumentation />
    <uses-sdk />
    <uses-configuration />  
    <uses-feature />  
    <supports-screens />  
    <compatible-screens />  
    <supports-gl-texture />  

    <application>

        <activity>
            <intent-filter>
                <action />
                <category />
                <data />
            </intent-filter>
            <meta-data />
        </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 />
            <path-permission />
        </provider>

        <uses-library />

    </application>

</manifest>

AXMLPrinter

有时候,我们需要对已经打包好的apk文件进行分析。尤其是查看其中的AndroidManifest.xml文件。但是Android在打包过程中,会对AndroidManifest.xm文件进行编码,使得我们打开后看到的是一堆乱码。如下图:

image.png 那这就需要使用一个工具来进行解码,还原成人类可读的符号。那就是:AXMLPrinter。

工具就是一个单独的jar包,名为AXMLPrinter2.jar。 apk分析APK文件,取得APK文件中的 包名、版本号及图标,很强大的工具。它可以将编译过的二进制XML文件(binary xml file)逆向编译输出明文。例如需要查看apk安装包的权限、名称等,可以用AXMLPrinter2对androidmanifest.xml反编译进行明文查看。反编译速度非常快、好用,可以顺利捣鼓出XML文件。 下载好工具后,直接运行命令(AXMLPrinter2.jar和AndroidManifest.xml在同一目录下):

java -jar AXMLPrinter2.jar AndroidManifest.xml >> AndroidManifest.txt

解析之后的结果如下图: image.png 可以看到,解析的十分完美,完整还原了原本的xml配置里的内容。

工具也帮大家准备好了,下载地址:传送门