You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当前APK中META-INF文件夹的作用及MANIFEST.MF去向咨询

Android Studio Iguana签名APK中META-INF结构及MANIFEST.MF去向疑问

我知晓该问题已有诸多解答,但均不符合当前实际情况:使用Android Studio Iguana创建空视图Activity项目,生成签名APK并解压后,META-INF文件夹结构如下:

└─$ tree META-INF/
META-INF/
├── androidx.activity_activity.version
├── androidx.annotation_annotation-experimental.version
├── androidx.appcompat_appcompat-resources.version
├── androidx.appcompat_appcompat.version
├── androidx.arch.core_core-runtime.version
├── androidx.cardview_cardview.version
├── androidx.coordinatorlayout_coordinatorlayout.version
├── androidx.core_core-ktx.version
├── androidx.core_core.version
├── androidx.cursoradapter_cursoradapter.version
├── androidx.customview_customview.version
├── androidx.documentfile_documentfile.version
├── androidx.drawerlayout_drawerlayout.version
├── androidx.dynamicanimation_dynamicanimation.version
├── androidx.emoji2_emoji2.version
├── androidx.emoji2_emoji2-views-helper.version
├── androidx.fragment_fragment.version
├── androidx.interpolator_interpolator.version
├── androidx.legacy_legacy-support-core-utils.version
├── androidx.lifecycle_lifecycle-livedata-core.version
├── androidx.lifecycle_lifecycle-livedata.version
├── androidx.lifecycle_lifecycle-process.version
├── androidx.lifecycle_lifecycle-runtime.version
├── androidx.lifecycle_lifecycle-viewmodel-savedstate.version
├── androidx.lifecycle_lifecycle-viewmodel.version
├── androidx.loader_loader.version
├── androidx.localbroadcastmanager_localbroadcastmanager.version
├── androidx.print_print.version
├── androidx.profileinstaller_profileinstaller.version
├── androidx.recyclerview_recyclerview.version
├── androidx.savedstate_savedstate.version
├── androidx.startup_startup-runtime.version
├── androidx.tracing_tracing.version
├── androidx.transition_transition.version
├── androidx.vectordrawable_vectordrawable-animated.version
├── androidx.vectordrawable_vectordrawable.version
├── androidx.versionedparcelable_versionedparcelable.version
├── androidx.viewpager2_viewpager2.version
├── androidx.viewpager_viewpager.version
├── com
│   └── android
│       └── build
│           └── gradle
│               └── app-metadata.properties
├── com.google.android.material_material.version
├── kotlinx_coroutines_android.version
├── kotlinx_coroutines_core.version
├── services
│   ├── kotlinx.coroutines.CoroutineExceptionHandler
│   └── kotlinx.coroutines.internal.MainDispatcherFactory
└── version-control-info.textproto

6 directories, 46 files

奇怪的是,其中并未包含过往资料中提到的MANIFEST.MF、CERT.RSA或CERT.SF文件。以下是对应问题的解答:

当前META-INF文件夹的作用

  • 版本信息文件(*.version):逐一记录项目依赖的AndroidX、Material、Kotlin协程等库的版本号,用于运行时校验依赖版本的一致性,避免因版本冲突引发运行异常。
  • com/android/build/gradle/app-metadata.properties:存储APK构建的元数据,包含构建工具版本、模块标识等信息,辅助构建系统和运行环境识别APK的构建背景。
  • services目录:存放Java Service Loader的配置文件,比如Kotlin协程的异常处理器、主线程调度工厂配置,用于动态加载对应的服务实现,是组件化库的服务发现机制。
  • version-control-info.textproto:记录版本控制工具(如Git)的提交信息,方便开发者溯源APK对应的代码版本,辅助调试和问题定位。

MANIFEST.MF及签名文件的去向

从Android Studio Iguana对应的AGP(Android Gradle Plugin)8.0版本开始,签名相关文件(MANIFEST.MF、CERT.SF、CERT.RSA)不再存放在META-INF根目录,而是转移到了**APK的签名块(Signature Block)**中:

  • 签名块是APK文件结构中的独立区域,专门存储签名元数据和证书,相比传统存储方式,能提升系统的签名验证效率,同时减少解压后文件的杂乱程度。
  • 若需查看MANIFEST.MF内容,可通过apksigner工具提取:执行命令 apksigner verify --print-certs --verbose your-app.apk;也可以直接用unzip -p your-app.apk META-INF/MANIFEST.MF命令导出内容(虽然解压后看不到,但这些文件在APK内部仍以META-INF路径存在,只是解压工具默认不展示签名块中的内容)。

内容的提问来源于stack exchange,提问作者Bill Elim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:37:03