本文已参与「新人创作礼」活动,一起开启掘金创作之路。
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文件进行编码,使得我们打开后看到的是一堆乱码。如下图:
那这就需要使用一个工具来进行解码,还原成人类可读的符号。那就是: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
解析之后的结果如下图:
可以看到,解析的十分完美,完整还原了原本的xml配置里的内容。
工具也帮大家准备好了,下载地址:传送门