导读:本期聚焦于小伙伴创作的《Android中的AndroidManifest.xml文件有什么用 核心组件与权限声明解析》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Android中的AndroidManifest.xml文件有什么用 核心组件与权限声明解析》有用,将其分享出去将是对创作者最好的鼓励。

AndroidManifest.xml是Android应用项目的核心配置文件,位于项目的主模块目录下,整个应用的运行逻辑、组件信息、权限需求等内容都需要在这个文件中进行声明,系统会在应用安装和运行时读取该文件的内容来完成对应的校验和调度工作。

Android中的AndroidManifest.xml文件有什么用 核心组件与权限声明解析

AndroidManifest.xml的核心作用

该文件是Android系统和应用之间的桥梁,主要承担以下几个核心作用:

  • 声明应用的基本属性,包括应用包名、应用图标、应用名称、支持的最低Android版本、目标Android版本等基础信息。
  • 注册应用使用的所有核心组件,包括Activity、Service、BroadcastReceiver、ContentProvider,没有在该文件中注册的组件无法被系统识别和调用。
  • 申请应用运行所需的权限,比如访问网络、读取存储、获取定位等权限都需要在这里声明,否则应用运行时会直接崩溃。
  • 配置应用的运行特性,比如是否支持横竖屏切换、是否允许备份数据、是否支持分屏模式等。

核心组件声明规则

Android的四大核心组件都必须在AndroidManifest.xml中通过对应的标签进行注册,否则组件无法正常工作。

Activity组件注册

Activity是用户交互的界面组件,注册时需要放在<application>标签内部,使用<activity>标签,同时需要指定android:name属性对应Activity的完整类名,还可以配置来声明该Activity的启动入口。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.MyApp">
        <!-- 声明启动Activity -->
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- 声明普通Activity -->
        <activity
            android:name=".SecondActivity"
            android:exported="false" />
    </application>

</manifest>

其他核心组件注册

Service、BroadcastReceiver、ContentProvider的注册方式和Activity类似,分别对应<service><receiver><provider>标签,同样需要指定android:name属性,部分组件还需要配置来声明接收的广播类型或者数据访问规则。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name">
        <!-- 注册Service -->
        <service
            android:name=".MyService"
            android:exported="false" />

        <!-- 注册BroadcastReceiver -->
        <receiver
            android:name=".MyReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <!-- 注册ContentProvider -->
        <provider
            android:name=".MyContentProvider"
            android:authorities="com.example.myapp.provider"
            android:exported="false" />
    </application>

</manifest>

权限声明规则

Android系统将权限分为普通权限和危险权限两类,普通权限只需要在AndroidManifest.xml中声明即可自动获取,危险权限除了在文件中声明,还需要在运行时向用户申请动态权限。

普通权限声明

普通权限一般是不会涉及用户隐私的权限,比如访问网络、设置时区等,声明方式是在<manifest>标签下使用<uses-permission>标签,指定对应的权限名称。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <!-- 声明访问网络权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 声明设置时区权限 -->
    <uses-permission android:name="android.permission.SET_TIME_ZONE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

危险权限声明

危险权限涉及用户隐私,比如读取联系人、获取定位、读取存储等,除了在文件中声明,还需要在代码中动态申请。首先要在AndroidManifest.xml中声明对应权限:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <!-- 声明读取存储权限 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <!-- 声明获取定位权限 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

然后在Activity中动态申请权限:

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private static final int PERMISSION_REQUEST_CODE = 100;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 检查并申请危险权限
        checkAndRequestPermissions();
    }

    private void checkAndRequestPermissions() {
        List<String> permissionList = new ArrayList<>();
        // 检查读取存储权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            permissionList.add(Manifest.permission.READ_EXTERNAL_STORAGE);
        }
        // 检查定位权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
        }
        // 如果有未授权的权限,发起申请
        if (!permissionList.isEmpty()) {
            ActivityCompat.requestPermissions(this, permissionList.toArray(new String[0]), PERMISSION_REQUEST_CODE);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == PERMISSION_REQUEST_CODE) {
            for (int i = 0; i < grantResults.length; i++) {
                if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
                    // 权限被拒绝的处理逻辑
                }
            }
        }
    }
}

常见配置注意事项

在配置AndroidManifest.xml时,有几个常见的注意点需要开发者关注:

  • android:exported属性需要正确配置,设置为true表示该组件可以被其他应用调用,设置为false则只能被应用自身调用,从Android 12开始,部分组件必须显式声明该属性。
  • 包名必须和应用的真实包名一致,否则会导致组件注册失败、资源引用错误等问题。
  • 危险权限如果没有在文件中声明,即使动态申请也会直接失败,所以在开发时需要先确认权限是否已经在配置文件中声明。
  • 如果应用需要访问特定硬件,比如摄像头、蓝牙,还需要使用<uses-feature>标签声明对应的硬件特性,避免在不支持对应硬件的设备上安装应用。

AndroidManifest.xmlAndroid核心组件权限声明Android应用配置修改时间:2026-07-07 04:36:35

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。