七的博客

安卓系统目录结构跟APK安装包结构

Android

安卓系统目录结构跟APK安装包结构

要学习 ROM 定制、软件汉化、去广告、软件逆向等,需要有一定的基础。

最基本的就是对安卓系统常用的目录结构,还有就是安装安装包 APK 的基本结构。对这些结构有一定了解,才能去做修改。

安卓系统常用的一些目录有这么些:

  • /system 目录是核心目录,存放系统运行的关键文件。

    • /system/app 是一些预装的系统应用,如果要做定制 ROM 或者精简系统的话,就对这个目录操作。比如 Browser.apk 就是自带的浏览器,很难用。

    • /system/bin 是一些系统二进制执行文件。

    • /system/lib/ 是系统库文件,包括一些动态库。

    • /system/framework/ 这个是框架文件夹。 这里面有好几个 JAR 包,framework.jar 可以稍微改改,比如状态栏之类的。其他的 JAR 包务必别改。

    • /system/etc/ 是一些安卓系统的配置文件,比如 init.rc 是一个启动的初始化脚本,一些 ROM 优化就会从这个脚本入手去改。hosts 是一个解析主机的文件,有时候会用来加速网络访问。

    • /system/media/ 是一个系统多媒体文件夹。 如果要美化系统之类的,这个文件夹是必须知道作用的。比如文件夹下面的 bootanimation.zip 就是开机动画文件。 audio/ringtones/ 文件夹下的就是系统铃声文件。 audio/alarms/ 这个文件夹下的就是系统的闹钟铃声文件。

  • /data 目录是一些用户的数据目录,包括安装的程序跟数据。

    • /data/app/ 是 用户安装的应用程序 APK 文件。你可以直接替换这个目录下的 APK 文件。

    • /data/data/ 是程序的数据目录。如果要备份的话,通常就是备份这个目录。

  • /sdcard 就是内存卡的目录。

    • /sdcard/DCIM/ 放的是相机拍的照片。

    • /sdcard/Download/ 放平时下载的文件。

    • /sdcard/Music/ 放音乐文件。

    • /sdcard/Movies/ 放视频文件。

  • /mnt 目录是一个挂载点,通常用来挂其他的存储设备,比如内存卡或者 USB 。 手机也是可以连接 U 盘的。

安装包就是平时下载的 *.APK 文件,APK 文件夹其实就是一个压缩包。 跟 Windows 系统上的 exe 文件,还有以前诺基亚系统上的 JAR 文件类似,都是包含程序跟资源的集合。

安装包直接将后缀 .apk 改成 .zip 就可以直接用压缩软件解压。解压出来的结构大致如下:

  • /META-INF 目录,主要放证书相关的文件。

  • /AndroidManifest.xml 这个文件包含应用的基本信息,要获取的权限列表等等。

  • /assets 目录,放置一些资源文件,比如图片、数据等。

  • /lib 目录。 放置一些动态库,跟架构相关的。

  • /res 目录存放应用程序的资源文件,如布局文件、图片、字符串等等。

    • /res/drawable/ 包含各种分辨率的图片资源。
    • /res/layout/ 放布局文件,比如如 activity_main.xml。汉化可以注意这个目录。
    • /res/xml/ 放通用的 xml 文件。汉化可以注意这个目录。
    • /res/values/ 包含字符串、样式等资源,比如 strings.xml,styles.xml。做汉化可以注意这个目录。
  • /classes.dex ,就是安卓程序的主要部分。也称作 Dalvik可执行文件,就是 Java 代码编译后的字节码。汉化跟篡改逻辑就需要去改动这个。

  • resources.arsc 是编译后的二进制资源文件,汉化的时候主要关注这个文件。