ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

AndroidManifest.xml 详细解读

AndroidManifest.xml 详细解读 一、文件概述AndroidManifest.xml是每个 Android 应用的核心配置文件位于项目根目录。它向 Android 系统描述了应用的基本信息、组件、权限、硬件需求等关键内容。系统在安装和运行应用前必须先读取此文件。二、整体结构框架?xml version1.0 encodingutf-8?manifestxmlns:androidhttp://schemas.android.com/apk/res/androidpackagecom.example.myapp!-- 权限声明 --uses-permission/!-- SDK 版本要求 --uses-sdk/!-- 硬件/软件特性需求 --uses-feature/!-- 应用主体 --applicationactivity/service/receiver/provider//application/manifest三、核心元素详解1.manifest根元素manifestxmlns:androidhttp://schemas.android.com/apk/res/androidpackagecom.example.myappandroid:versionCode1android:versionName1.0android:installLocationauto属性说明xmlns:android定义 android 命名空间必须package应用唯一包名作为应用 IDandroid:versionCode内部版本号整数用于升级判断android:versionName显示给用户的版本名字符串android:installLocation安装位置auto/internalOnly/preferExternal注意新版 Gradle 项目中versionCode、versionName、package通常在build.gradle中配置。2.uses-permission权限声明uses-permissionandroid:nameandroid.permission.INTERNET/uses-permissionandroid:nameandroid.permission.CAMERA/uses-permissionandroid:nameandroid.permission.ACCESS_FINE_LOCATION/!-- 可指定最大适用SDK --uses-permissionandroid:nameandroid.permission.WRITE_EXTERNAL_STORAGEandroid:maxSdkVersion28/常见权限权限用途INTERNET网络访问ACCESS_NETWORK_STATE查看网络状态CAMERA使用相机READ/WRITE_EXTERNAL_STORAGE读写外部存储ACCESS_FINE_LOCATION精确定位RECORD_AUDIO录音Android 6.0 的危险权限需在运行时动态申请。3.uses-sdkSDK 版本uses-sdkandroid:minSdkVersion21android:targetSdkVersion33android:maxSdkVersion34/属性说明minSdkVersion最低支持的 API 级别targetSdkVersion目标 API 级别测试适配版本maxSdkVersion最高支持级别很少使用现代项目中一般在build.gradle配置这些值。4.uses-feature特性需求!-- 声明需要相机功能 --uses-featureandroid:nameandroid.hardware.cameraandroid:requiredtrue/!-- 非必需仅优先使用 --uses-featureandroid:nameandroid.hardware.bluetoothandroid:requiredfalse/requiredtrue时不支持该特性的设备无法在应用商店安装此应用。5.application应用元素applicationandroid:name.MyApplicationandroid:allowBackuptrueandroid:iconmipmap/ic_launcherandroid:labelstring/app_nameandroid:roundIconmipmap/ic_launcher_roundandroid:themestyle/AppThemeandroid:supportsRtltrueandroid:networkSecurityConfigxml/network_security_configandroid:usesCleartextTrafficfalse!-- 四大组件在此声明 --/application常用属性属性说明android:name自定义 Application 类android:icon应用图标android:label应用名称android:theme应用默认主题android:allowBackup是否允许数据备份android:supportsRtl是否支持从右到左布局android:usesCleartextTraffic是否允许明文 HTTP 流量四、四大组件的声明1.activity活动activityandroid:name.MainActivityandroid:exportedtrueandroid:launchModesingleTopandroid:screenOrientationportrait!-- Intent过滤器定义为启动入口 --intent-filteractionandroid:nameandroid.intent.action.MAIN/categoryandroid:nameandroid.intent.category.LAUNCHER//intent-filter/activity关键属性属性说明android:nameActivity 类名android:exported是否可被外部组件调用Android 12 必须显式声明android:launchMode启动模式standard/singleTop/singleTask/singleInstanceandroid:screenOrientation屏幕方向android:configChanges配置变化时不重建 Activity2.service服务serviceandroid:name.MyServiceandroid:enabledtrueandroid:exportedfalseandroid:foregroundServiceTypelocation/后台运行的组件无用户界面。3.receiver广播接收器receiverandroid:name.BootReceiverandroid:exportedtrueintent-filteractionandroid:nameandroid.intent.action.BOOT_COMPLETED//intent-filter/receiver用于接收系统或应用广播事件。4.provider内容提供者providerandroid:nameandroidx.core.content.FileProviderandroid:authorities${applicationId}.fileproviderandroid:exportedfalseandroid:grantUriPermissionstruemeta-dataandroid:nameandroid.support.FILE_PROVIDER_PATHSandroid:resourcexml/file_paths//provider用于跨应用共享数据。五、intent-filter意图过滤器用于声明组件能响应的 Intent 类型intent-filter!-- 动作 --actionandroid:nameandroid.intent.action.VIEW/!-- 类别 --categoryandroid:nameandroid.intent.category.DEFAULT/categoryandroid:nameandroid.intent.category.BROWSABLE/!-- 数据如处理http链接 --dataandroid:schemehttpsandroid:hostwww.example.com//intent-filter子元素作用action要执行的动作category附加类别信息data数据类型/URI 匹配六、meta-data元数据用于附加键值对配置常被第三方 SDK 使用meta-dataandroid:namecom.google.android.geo.API_KEYandroid:valueYOUR_API_KEY/七、完整示例?xml version1.0 encodingutf-8?manifestxmlns:androidhttp://schemas.android.com/apk/res/androidpackagecom.example.myappuses-permissionandroid:nameandroid.permission.INTERNET/uses-permissionandroid:nameandroid.permission.CAMERA/uses-featureandroid:nameandroid.hardware.cameraandroid:requiredfalse/applicationandroid:name.MyApplicationandroid:allowBackuptrueandroid:iconmipmap/ic_launcherandroid:labelstring/app_nameandroid:themestyle/AppTheme!-- 主Activity --activityandroid:name.MainActivityandroid:exportedtrueintent-filteractionandroid:nameandroid.intent.action.MAIN/categoryandroid:nameandroid.intent.category.LAUNCHER//intent-filter/activity!-- 服务 --serviceandroid:name.MyServiceandroid:exportedfalse/!-- 广播接收器 --receiverandroid:name.MyReceiverandroid:exportedtrueintent-filteractionandroid:nameandroid.intent.action.BOOT_COMPLETED//intent-filter/receiver!-- 内容提供者 --providerandroid:name.MyProviderandroid:authoritiescom.example.myapp.providerandroid:exportedfalse//application/manifest八、重要注意事项android:exportedAndroid 12API 31起含intent-filter的组件必须显式声明此属性否则无法安装。组件必须注册Activity、Service 等必须在 Manifest 中声明才能使用动态注册的 BroadcastReceiver 除外。合并机制使用库时多个模块的 Manifest 会通过Manifest Merger合并成最终文件。权限最小化只申请必要权限提升用户信任度与合规性。
返回列表