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

AndroidManifest.xml的核心作用
该文件是Android系统和应用之间的桥梁,主要承担以下几个核心作用:
- 声明应用的基本属性,包括应用包名、应用图标、应用名称、支持的最低Android版本、目标Android版本等基础信息。
- 注册应用使用的所有核心组件,包括Activity、Service、BroadcastReceiver、ContentProvider,没有在该文件中注册的组件无法被系统识别和调用。
- 申请应用运行所需的权限,比如访问网络、读取存储、获取定位等权限都需要在这里声明,否则应用运行时会直接崩溃。
- 配置应用的运行特性,比如是否支持横竖屏切换、是否允许备份数据、是否支持分屏模式等。
核心组件声明规则
Android的四大核心组件都必须在AndroidManifest.xml中通过对应的标签进行注册,否则组件无法正常工作。
Activity组件注册
Activity是用户交互的界面组件,注册时需要放在<application>标签内部,使用<activity>标签,同时需要指定android:name属性对应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