`
runfeel
  • 浏览: 935808 次
文章分类
社区版块
存档分类
最新评论

Android应用程序分析——apk的组成

 
阅读更多

APKAndroid PacKage的缩写,即Android安装包。将APK文件直接传到Android模拟器或Android手机中执行即可安装。APK文件其实是zip格式,但后缀名被修改为apk,在windows上可以通过winrar等程序直接解压查看。

解压apk后,一般的可看到的目录结构如下:

文件或目录

作用

META-INF/

也就是一个manifest,从java jar文件引入的描述包信息的目录

res/

存放资源文件的目录

libs/

如果存在的话,存放的是ndk编出来的so

AndroidManifest.xml

程序全局配置文件

classes.dex

最终生成的dalvik字节码

resources.ars

编译后的二进制资源文件

这里资源文件时相对比较重要的,sdk 文档(中文指南)上有相关的详细介绍:

目录Directory

资源类型Resource Types

res/anim/

Define pre-determined animations.
Tween animations are saved in res/anim/ and accessed from the R.anim class.
Frame animations are saved in res/drawable/ and accessed from the R.drawable class.

定义的是预置的动画对象。一般是逐帧动画(Frame animations)或补间动画(Tween animations)。而实际使用上,都是一些淡入淡出、缩放和移动等的补间动画居多。

res/color

Define a color resources that changes based on the View state.
Saved in res/color/ and accessed from the R.color class

定义一些android view状态变化时,使用的颜色值。这通常是绑定到一个界面元素上的,比如一个button被按下,弹起或disable时的颜色。

res/drawable/

res/drawable-hdpi

res/drawable-land-hdpi

res/drawable/mdpi

res/drawable/ldpi

res/drawable/port

Define various graphics with bitmaps or XML.
Saved in res/drawable/ and accessed from the R.drawable class.

定义要被用到的位图资源文件。这些位图资源可以是bitmap,也可以是用xml描述的bitmap

注意:文件后缀为9.png是一种特殊的位图,一般是通过draw9patch生成的,是一种可自动伸缩的位图资源。

Drawable的其他目录形势,land是横屏的,port是竖屏的;hdpi是高分辨率的,ldpi是低分辨率的,hdpi是高分辨率的。这里可以放置为特定情况下的界面优化资源。

res/layout/

Define the layout for your application UI.
Saved in res/layout/ and accessed from the R.layout class.

定义的UI layout,被aapt parser后,可由android直接renderview界面。

这里也有横竖屏和dpi之分。

res/values/

可以被编译成很多种类型的资源的XML文件。

注意: 不像其他的res/文件夹,它可以保存任意数量的文件,这些文件保存了要创建资源的描述,而不是资源本身。XML元素类型控制这些资源应该放在R类的什么地方。

尽管这个文件夹里的文件可以任意命名,不过下面使一些比较典型的文件(文件命名的惯例是将元素类型包含在该名称之中):

array.xml 定义数组

colors.xml 定义color drawable颜色的字符串值(color string values)。使用Resource.getDrawable()Resources.getColor()分别获得这些资源。

dimens.xml定义尺寸值(dimension value)。使用Resources.getDimension()获得这些资源。

strings.xml定义字符串(string)值。使用Resources.getString()或者Resources.getText()获取这些资源。getText()会保留在UI字符串上应用的丰富的文本样式。

styles.xml 定义样式(style)对象。

多国语言,由values-xxx的后缀组成。比如简体中文:res/values-zh-rCN

res/xml/

任意的XML文件,在运行时可以通过调用Resources.getXML()读取。

res/raw/

直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。要使用这些资源,可以调用Resources.openRawResource(),参数是资源的ID,即R.raw.somefilename

Android应用程序的生成过程,输入就是我们在eclipse或源码中监理的工程及其下面的源文件。输出就是处理后的apk文件。整个过程可以如下图所示:

整个过程的第一步,资源打包的工作,就是aapt这个工具完成的。

1.在最后打包的apk中,所有的xml文件已经不是原来的文本文件了,是被aapt parser后,直接保存下来的xml数据结构,这样做的一大好处就是:到手机中无需再次parser xml文件,直接读到定义好的数据结构中就可以了。

2. drawable中的png图片也被aapt给优化过了。

3. 所有的资源文件都被自动生成一个索引,并生成到R.java中。为什么这么做?我想一个是效率,另一个好处就是最大限度的在编译过程中由编译器给你找错(通过string来索引很难做到)

其实这里,我们最关心的就是android对资源究竟做了些什么,还是看看aapt的代码吧

分享到:
评论

相关推荐

    Android恶意代码——木马APK分析.pdf

    "Android恶意代码——木马APK分析.pdf" Android 恶意代码分析是移动安全领域中的一個亟待解决的问题。随着 Android 系统的普及,恶意代码的数量也呈爆炸式增长,对用户的隐私数据和手机安全造成了严重的威胁。 ...

    android 应用 源代码——桌面小程序 免费

    以下是一些关于Android应用源代码和桌面小程序开发的重要知识点: 1. **Android SDK**: 开发Android应用的基础是Android Software Development Kit (SDK),它包含了开发者需要的所有工具,包括编译器、模拟器、调试...

    安卓Android源码——APK实现静默安装整套资料.zip

    在安卓(Android)系统中,静默安装(Silent Installation)指的是在用户无感知的情况下,自动安装APK应用的过程。这种技术通常用于企业级管理,批量部署应用或者自动化测试场景。下面将详细介绍如何通过源码实现...

    安卓Android源码——更换软件主题(apk方式).rar

    综上所述,"安卓Android源码——更换软件主题(apk方式).rar"这个压缩包很可能是提供了一个实际的项目实例,用于教学如何在Android应用中实现主题更换。通过对源码的分析和学习,开发者可以掌握这一功能的实现原理...

    Gen_Signature_Android.apk

    《Android应用签名详解——以Gen_Signature_Android.apk为例》 在移动应用开发领域,尤其是Android系统中,应用的签名是确保软件安全性和完整性的关键环节。本篇文章将详细探讨Android应用签名的重要性、原理以及...

    查看微信应用签名工具——base.apk.rar

    - 开发者使用私钥对APK文件(Android应用程序包)进行签名,这个过程会产生一个数字签名。 - 安装时,Android系统会使用对应的公钥验证数字签名,确认应用未经修改且来自可信源。 - 签名还用于权限检查,如果新...

    一款适用于 Android 的可自定义APK提取器应用.rar

    压缩包子文件的文件名“ML Manager Pro v3.5.3 for Android 一款适用于 Android 的可自定义APK提取器应用.apk”揭示了具体的应用程序名称——ML Manager Pro,版本号为3.5.3,是专为Android设计的专业版应用。...

    安卓Android源码——从安卓手机ROM包提取APK工具.zip

    这个压缩包"安卓Android源码——从安卓手机ROM包提取APK工具.zip"显然提供了帮助开发者从ROM包中提取APK应用的工具,这对于定制ROM、系统优化或者逆向工程等任务非常有用。下面我们将详细探讨这一主题。 首先,我们...

    android系统入门了解——main.rar

    1. **架构**:Android系统由Linux内核、系统库、运行时环境、应用程序框架和应用程序五大部分组成。 2. **权限管理**:Android采用基于权限的模型,每个应用都有自己的沙箱,互不干扰。 3. **组件**:Activity(活动...

    Android源码——应用程序自动更新源码.7z

    "Android源码——应用程序自动更新源码.7z" 提供了关于如何实现这一功能的源代码示例。下面我们将深入探讨Android应用自动更新的相关知识点。 1. **Android SDK和版本管理**: - Android应用程序基于Java语言,...

    安卓Android源码——更换软件主题(apk方式).zip

    本教程将通过分析“安卓Android源码——更换软件主题(apk方式)”来讲解如何在Android应用程序中实现主题的动态切换。以下是相关知识点的详细说明: 1. **主题与样式**:在Android中,主题(Theme)是全局的UI风格...

    android apk文件里MANIFEST.MF、CERT.SF、CERT.RSA三者的关系(csdn)————程序.pdf

    在Android应用开发中,APK文件是应用程序的打包格式,其中包含了所有必要的资源和代码。为了确保APK的安全性和完整性,Android系统使用签名机制。在APK中,MANIFEST.MF、CERT.SF和CERT.RSA这三个文件是签名过程的...

    Android应用框架原理与程序设计(简体中文版)

    11. **Android程序调试**:学习使用Android Studio的调试工具,如Logcat、Breakpoint、Step Over/Into/Out,以及性能分析工具。 12. **应用程序发布流程**:从签名证书的生成到APK打包,再到Google Play或其他第三...

    Android源码——笑话故事android应用源码.zip

    【Android源码解析——构建笑话故事应用】 在深入解析这个"Android源码——笑话故事android应用源码.zip"之前,我们需要了解Android应用的基本结构和开发流程。Android应用主要由Java或Kotlin语言编写,通常包括...

    Android反编译工具——jadx

    在Android应用开发的世界里,理解和分析APK文件的内部结构往往至关重要,无论是为了学习、调试还是安全检查。而`jadx`就是这样一款强大的工具,它专为Android开发者和安全研究人员设计,用于对APK进行反编译,将...

    APK瘦身优化检测工具-Matrix ApkChecker 使用(csdn)————程序.pdf

    Matrix ApkChecker 是一个强大的Android APK分析和优化工具,它能够帮助开发者检查APK安装包中可能存在的问题,以实现APK的瘦身和性能优化。该工具通过一系列预设的规则进行检测,并生成详细的报告,便于分析和解决...

    安卓Android源码——应用程序自动更新源码.rar

    这份"安卓Android源码——应用程序自动更新源码.rar"包含了实现这一功能的相关源码和文档,为开发者提供了深入理解并实践自动更新机制的机会。 一、自动更新机制 1. **检查更新**: 应用启动时或在后台定期检查...

    安卓Android源码——Android 英语单词记忆程序源码.zip

    在本压缩包“安卓Android源码——Android 英语单词记忆程序源码.zip”中,包含了一个用于帮助用户记忆英语单词的应用程序的源代码。这个程序可能是为Android操作系统设计的,利用了Android SDK(软件开发工具包)...

    安卓Android源码——浮动窗口播放器.zip

    【标题】"安卓Android源码——浮动窗口播放器"指的是一个专门为Android平台设计的应用程序源代码,它允许视频在屏幕的任何位置以浮动窗口的形式进行播放。这种功能常见于一些多任务处理的应用,如音乐播放器或视频...

Global site tag (gtag.js) - Google Analytics