AndroidManifest.xml配置文件的介绍三:权限篇

本文详细介绍了AndroidManifest.xml中关于权限的配置,包括使用系统权限的示例,如访问网络、存储、位置等,并列举了多个关键权限的详细解释,如ACCESS_FINE_LOCATION、SEND_SMS等。此外,还提及了自定义权限的重要性。

     清单配置文件说明:

权限篇

1 使用系统权限

<uses-permission>申请权限

声明了哪些是由你定义的权限,而这些权限是应用程序正常执行所必须的。在安装程序的时候,你设定的所有权限,将会告诉给用户,由他们来决定同意与否,对很多本地Android服务来说,权限都是必须的。特别是哪些需要付费或者有安全问题的服务(eg:使用基于位置的服务)

权限的添加除了在清单配置文件中添加外,还可以在Permissions


中添加,下面为相关界面:




下面列举出部分权限相关说明:

 添加WiFi以及访问网络的权限:
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" ></uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" ></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" ></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" ></uses-permission>
    <uses-permission android:name="android.permission.INTERNET" ></uses-permission>
    <uses-permission android:name="android.permission.WAKE_LOCK" ></uses-permission>


操作外部存储设备文件:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


录音时需要的权限:
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>


录制视频时需要的权限:
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>


发送短信:
<uses-permission android:name="android.permission.SEND_SMS" ></uses-permission>


收短信:
<uses-permission android:name="android.permission.RECEIVE_SMS" />


收彩信:
<uses-permission android:name="android.permission.READ_SMS" />


GPS:
<!-- 权限 : 上网连线   -->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<!-- 权限 : GPS定位      -->
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

具体权限:
1. android.permission.ACCESS_CHECKIN_PROPERTIES
    允许读写访问”properties”表在 checkin数据库中,可以修改值上传

2. android.permission.ACCESS_COARSE_LOCATION
    允许一个程序访问CellID或WiFi热点来获取粗略的位置

3. android.permission.ACCESS_FINE_LOCATION
    允许一个程序访问精良位置(如GPS)

4. android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
    允许应用程序访问额外的位置提供命令

5. android.permission.ACCESS_MOCK_LOCATION
    允许程序创建模拟位置提供用于测试

6. android.permission.ACCESS_NETWORK_STATE
    允许程序访问有关GSM网络信息

7. android.permission.ACCESS_SURFACE_FLINGER
    允许程序使用SurfaceFlinger底层特性

8. android.permission.ACCESS_WIFI_STATE
    允许程序访问Wi-Fi网络状态信息

9. android.permission.ADD_SYSTEM_SERVICE
    允许程序发布系统级服务

10. android.permission.BATTERY_STATS
    允许程序更新手机电池统计信息

11. android.permission.BLUETOOTH
    允许程序连接到已配对的蓝牙设备

12. android.permission.BLUETOOTH_ADMIN
    允许程序发现和配对蓝牙设备

13. android.permission.BRICK
    请求能够禁用设备

14. android.permission.BROADCAST_PACKAGE_REMOVED
    允许程序广播一个提示消息在一个应用程序包已经移除后

15. android.permission.BROADCAST_STICKY
    允许一个程序广播常用intents

16. android.permission.CALL_PHONE
    允许一个程序初始化一个电话拨号不需通过拨号用户界面需 要用户确认

17. android.permission.CALL_PRIVILEGED
    允许一个程序拨打任何号码,包含紧急号码无需通过拨号用户界面需要用户确认

18. android.permission.CAMERA
    请求访问使用照相设备

19. android.permission.CHANGE_COMPONENT_ENABLED_STATE
    允许一个程序是否改变一个组件或其他的启用或禁用

20. android.permission.CHANGE_CONFIGURATION
    允许一个程序修改当前设置,如本地化

21. android.permission.CHANGE_NETWORK_STATE
    允许程序改变网络连接状态

22. android.permission.CHANGE_WIFI_STATE
    允许程序改变Wi-Fi连接状态

23. android.permission.CLEAR_APP_CACHE
    允许一个程序清楚缓存从所有安装的程序在设备中

24. android.permission.CLEAR_APP_USER_DATA
    允许一个程序清除用户设置

25. android.permission.CONTROL_LOCATION_UPDATES
    允许启用禁止位置更新提示从无线模块

26. android.permission.DELETE_CACHE_FILES
    允许程序删除缓存文件

27. android.permission.DELETE_PACKAGES
    允许一个程序删除包

28. android.permission.DEVICE_POWER
    允许访问底层电源管理

29. android.permission.DIAGNOSTIC
    允许程序RW诊断资源

30. android.permission.DISABLE_KEYGUARD
    允许程序禁用键盘锁

31. android.permission.DUMP
    允许程序返回状态抓取信息从系统服务

32. android.permission.EXPAND_STATUS_BAR
    允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序

33. android.permission.FACTORY_TEST
    作为一个工厂测试程序,运行在root用户

34. android.permission.FLASHLIGHT
    访问闪光灯,android开发网提示HTC Dream不包含闪光灯
35. android.permission.FORCE_BACK
    允许程序强行一个后退操作是否在顶层activities

36. android.permission.FOTA_UPDATE
    暂时不了解这是做什么使用的,android开发网分析可能是一个预留权限.

37. android.permission.GET_ACCOUNTS
    访问一个帐户列表在Accounts Service中

38. android.permission.GET_PACKAGE_SIZE
    允许一个程序获取任何package占用空间容量
39. android.permission.GET_TASKS
    允许一个程序获取信息有关当前或最近运行的任务, 一个缩略的任务状态,是否活动等等

40. android.permission.HARDWARE_TEST
    允许访问硬件

41. android.permission.INJECT_EVENTS
    允许一个程序截获用户事件如按键、触摸、轨迹球等等到一个时间流,android 开发网提醒算是hook技术吧

42. android.permission.INSTALL_PACKAGES
    允许一个程序安装packages

43. android.permission.INTERNAL_SYSTEM_WINDOW
    允许打开窗口使用系统用户界面

44. android.permission.INTERNET
    允许程序打开网络套接字

45. android.permission.MANAGE_APP_TOKENS
    允许程序管理(创建、催后、 z- order默认向z轴推移)程序引用在窗口管理器中

46. android.permission.MASTER_CLEAR目前还没有明确的解释,android开发网分析可能是清除一切数据,类似硬格机

47. android.permission.MODIFY_AUDIO_SETTINGS
    允许程序修改全局音频设置

48. android.permission.MODIFY_PHONE_STATE
    允许修改话机状态,如电源,人机接口等

49. android.permission.MOUNT_UNMOUNT_FILESYSTEMS
    允许挂载和反挂载文件系统可移动存储

50. android.permission.PERSISTENT_ACTIVITY
    允许一个程序设置他的activities显示

51. android.permission.PROCESS_OUTGOING_CALLS
    允许程序监视、修改有关播出电话

52. android.permission.READ_CALENDAR
    允许程序读取用户日历数据

53. android.permission.READ_CONTACTS
    允许程序读取用户联系人数据
54. android.permission.READ_FRAME_BUFFER
    允许程序屏幕波或和更多常规的访问帧缓冲数据

55. android.permission.READ_INPUT_STATE
    允许程序返回当前按键状态

56. android.permission.READ_LOGS
    允许程序读取底层系统日志文件

57. android.permission.READ_OWNER_DATA
    允许程序读取所有者数据

58. android.permission.READ_SMS
    允许程序读取短信息

59. android.permission.READ_SYNC_SETTINGS
    允许程序读取同步设置

60. android.permission.READ_SYNC_STATS
    允许程序读取同步状态

61. android.permission.REBOOT
    请求能够重新启动设备

62. android.permission.RECEIVE_BOOT_COMPLETED
    允许一个程序接收到 ACTION_BOOT_COMPLETED广播在系统完成启动

63. android.permission.RECEIVE_MMS
    允许一个程序监控将收到MMS彩信,记录或处理

64. android.permission.RECEIVE_SMS
    允许程序监控一个将收到短信息,记录或处理

65. android.permission.RECEIVE_WAP_PUSH
    允许程序监控将收到WAP PUSH信息

66. android.permission.RECORD_AUDIO
    允许程序录制音频

67. android.permission.REORDER_TASKS
    允许程序改变Z轴排列任务

68. android.permission.RESTART_PACKAGES
    允许程序重新启动其他程序

69. android.permission.SEND_SMS
    允许程序发送SMS短信

70. android.permission.SET_ACTIVITY_WATCHER
    允许程序监控或控制activities已经启动全局系统中

71. android.permission.SET_ALWAYS_FINISH
    允许程序控制是否活动间接完成在处于后台时

72. android.permission.SET_ANIMATION_SCALE
    修改全局信息比例

73. android.permission.SET_DEBUG_APP
    配置一个程序用于调试

74. android.permission.SET_ORIENTATION
    允许底层访问设置屏幕方向和实际旋转

75. android.permission.SET_PREFERRED_APPLICATIONS
    允许一个程序修改列表参数 PackageManager.addPackageToPreferred() 和PackageManager.removePackageFromPreferred()方法

76. android.permission.SET_PROCESS_FOREGROUND
    允许程序当前运行程序强行到前台

77. android.permission.SET_PROCESS_LIMIT
    允许设置最大的运行进程数量

78. android.permission.SET_TIME_ZONE
    允许程序设置时间区域

79. android.permission.SET_WALLPAPER
    允许程序设置壁纸

80. android.permission.SET_WALLPAPER_HINTS
    允许程序设置壁纸hits

81. android.permission.SIGNAL_PERSISTENT_PROCESSES
    允许程序请求发送信号到所有显示的进程中

82. android.permission.STATUS_BAR
    允许程序打开、关闭或禁用状态栏及图标

83. android.permission.SUBSCRIBED_FEEDS_READ
    允许一个程序访问订阅RSS Feed内容提供

84. android.permission.SUBSCRIBED_FEEDS_WRITE
    系统暂时保留改设置,android开发网认为未来版本会加入该功能。

85. android.permission.SYSTEM_ALERT_WINDOW
    允许一个程序打开窗口使用 TYPE_SYSTEM_ALERT,显示在其他所有程序的顶层

86. android.permission.VIBRATE
    允许访问振动设备

87. android.permission.WAKE_LOCK
    允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失

88. android.permission.WRITE_APN_SETTINGS
    允许程序写入API设置

89. android.permission.WRITE_CALENDAR
    允许一个程序写入但不读取用户日历数据

90. android.permission.WRITE_CONTACTS
    允许程序写入但不读取用户联系人数据

91. android.permission.WRITE_GSERVICES
    允许程序修改Google服务地图

92. android.permission.WRITE_OWNER_DATA
    允许一个程序写入但不读取所有者数据

93. android.permission.WRITE_SETTINGS
    允许程序读取或写入系统设置

94. android.permission.WRITE_SMS
    允许程序写短信

95. android.permission.WRITE_SYNC_SETTINGS
      允许程序写入同步设置


2 自定义权限

保护安卓的某些重要组件。

例如:接收广播的对象就需要注册一些自定义的权限并使用。



  总结:四大组件中,除了BroadcastReceiver可以使用代码声明注册外,其他组件必须在Manifest文件中进行声明配置,否则会报错。

      权限篇介绍到此结束,清单配置文件的相关说明也就到这了。只是一些浅显的介绍,希望对伙伴们有些用。清单配置文件中还有好多需要我们学习,深入挖掘的东西。学无止境,作为IT人员来说,要不就不断学习进步,要不就淘汰转行了......



<think> 首先,用户的问题是关于解决AndroidManifest.xml文件中出现的几个属性未找到的问题:android:compileSdkVersion、android:compileSdkVersionCodename、android:requestLegacyExternalStorage、android:preferMinimalPostProcessing。此外,还提到了"处理清单文件失败"。用户提供了多个引用,我需要参考这些引用来构建回答。 关键引用分析: - 引用[3] 提到了一个类似错误:`attribute android:requestLegacyExternalStorage not found`,建议移除`android:dataExtractionRules`属性。 - 引用[4] 显示错误为`attribute android:dataExtractionRules not found`。 - 引用[2] 讨论了AndroidManifest.xml文件的常见错误,如缺少字符、标签属性错误等,并建议修复这些问题。 - 引用[5] 讨论了自定义Application类和AndroidManifest.xml中的设置。 用户的问题集中在属性未找到错误,这通常发生在: 1. Android SDK版本不支持这些属性。 2. 编译时工具版本不一致。 3. 清单文件中语法错误导致解析失败。 具体属性: - `android:compileSdkVersion` 和 `android:compileSdkVersionCodename`:这些通常在根元素`<manifest>`中使用,用于指定编译SDK版本。但在Android构建过程中,这些信息通常由Gradle配置提供,不需要在清单文件中手动设置。用户提供的清单中有这些属性: ```xml <manifest ... android:compileSdkVersion="32" android:compileSdkVersionCodename="12" ...> ``` 这可能是错误的来源,因为Android构建系统可能不支持这些属性在清单文件中。 - `android:requestLegacyExternalStorage`:这个属性用于在Android 10及以上版本中请求旧版存储访问权限。它可能不被旧版SDK支持。 - `android:preferMinimalPostProcessing`:这是一个较新的属性,可能只在更高的API级别支持。 用户提到"处理清单文件失败",这可能是由于这些属性引起的解析错误。 从引用[3]中,有一个解决方案是移除`android:dataExtractionRules`属性来解决类似错误。类似地,解决这些问题的策略可能是: 1. 移除不必要的属性。 2. 确保Gradle配置正确。 3. 修复清单文件语法。 步骤式解决方案: 1. **检查属性支持**:确认这些属性在使用的Android SDK版本中是否支持。 - `android:compileSdkVersion` 和 `android:compileSdkVersionCodename`:这些不应该在清单中手动设置;它们由Gradle控制。 - `android:requestLegacyExternalStorage`:从API 29开始支持。 - `android:preferMinimalPostProcessing`:这是一个较新的属性,可能在API 31及以上支持。 2. **移除不必要的属性**: - 从清单中移除`android:compileSdkVersion`和`android:compileSdkVersionCodename`,因为编译SDK版本应该在build.gradle文件中设置。 - 检查`android:requestLegacyExternalStorage`和`android:preferMinimalPostProcessing`是否确实需要。 3. **更新Gradle配置**: - 在build.gradle文件中,确保compileSdkVersion设置正确。例如: ```groovy android { compileSdkVersion 32 // 其他配置 } ``` - 同步项目。 4. **修复清单文件**: - 确保清单文件语法正确,所有标签和属性关闭。 - 参考引用[2],检查常见错误如缺少引号、标签错误等。 5. **处理特定属性**: - 对于`android:requestLegacyExternalStorage`,如果目标API级别低于29,可能会出错。需要在清单中保留它,但确保它仅在使用时设置。 - 对于`android:preferMinimalPostProcessing`,如果SDK不支持,移除它。 用户提供的清单片段: ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:compileSdkVersion="32" android:compileSdkVersionCodename="12" android:installLocation="auto" package="com.GGELUA.mygame" platformBuildVersionCode="32" platformBuildVersionName="12"> ... <application ... android:requestLegacyExternalStorage="true" ...> <activity ... android:preferMinimalPostProcessing="true"> ... </activity> </application> </manifest> ``` 建议修改: - 移除`<manifest>`中的`android:compileSdkVersion`和`android:compileSdkVersionCodename`属性。 - 确保`android:requestLegacyExternalStorage`只在API 29及以上使用;如果项目目标是较低版本,可能需要条件处理或移除。 - `android:preferMinimalPostProcessing`是一个Activity属性,可能只在某些设备或版本支持。如果错误,移除它。 引用[2]提到错误可能会生成AndroidManifest.xml.fixed文件,检查那个文件看错误。 最后,回答要结构清晰: - 介绍问题原因。 - 提供步骤解决方案。 - 建议预防措施。 生成相关问题: 1. 如何正确设置Android项目的编译SDK版本? 2. 如何在AndroidManifest.xml中处理不同API级别的兼容性问题? 3. 常见的AndroidManifest.xml错误有哪些及如何修复? 4. Android 11的存储权限变化及如何适配? 5. 优化Android清单文件以提高构建效率的方法? </think> ### 解决 AndroidManifest.xml 属性未找到及清单文件处理失败问题 在 AndroidManifest.xml 文件中出现属性如 `android:compileSdkVersion`、`android:compileSdkVersionCodename`、`android:requestLegacyExternalStorage` 和 `android:preferMinimalPostProcessing` 未找到的错误,通常是由于以下原因导致: 1. **属性不支持当前 SDK 版本**:某些属性在低版本 Android SDK 中不可用。 2. **清单文件语法错误**:XML 格式错误(如标签未闭合、引号缺失)会触发 "处理清单文件失败"。 3. **Gradle 配置与清单属性冲突**:清单中手动声明的编译属性可能与 build.gradle 中的设置冲突。 以下是逐步解决方案,参考您提供的清单文件和常见错误模式[^2][^3][^4]: --- ### 步骤 1: 移除不必要的清单属性 - **问题属性**: - `android:compileSdkVersion` 和 `android:compileSdkVersionCodename` 这些属性应在 **build.gradle** 中配置,而非清单文件[^2][^4]。 - `android:preferMinimalPostProcessing` 该属性在较新 SDK(API ≥ 31)中引入,若您的 `compileSdkVersion < 31` 会导致错误。 - **解决方案**: 直接从 `<manifest>` 和 `<activity>` 标签中删除这些属性: ```xml <!-- 修改前 --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:compileSdkVersion="32" android:compileSdkVersionCodename="12" ...> <activity android:preferMinimalPostProcessing="true" ...> <!-- 修改后 --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" ...> <!-- 移除 compileSdkVersion 和 compileSdkVersionCodename --> <activity ...> <!-- 移除 preferMinimalPostProcessing --> ``` --- ### 步骤 2: 修复 `android:requestLegacyExternalStorage` 兼容性 - **问题分析**: 该属性用于 Android 10(API 29)及以上版本的存储权限兼容性。如果 `compileSdkVersion < 29`,系统无法识别它[^3][^4]。 - **解决方案**: - **选项 1**:升级 `compileSdkVersion` 至 29+(推荐) 在 **build.gradle** 中设置: ```groovy android { compileSdkVersion 32 // 或更高 } ``` - **选项 2**:降级应用移除属性 如果必须支持低版本 Android,从 `<application>` 标签中移除该属性: ```xml <!-- 修改前 --> <application android:requestLegacyExternalStorage="true" ...> <!-- 修改后 --> <application ...> <!-- 移除 requestLegacyExternalStorage --> ``` --- ### 步骤 3: 检查并修复清单文件语法错误 - **常见错误**: - 标签未闭合(如 `<activity>` 缺少 `/>` 或 `</activity>`)。 - 属性值引号缺失(如 `android:name=".GGEActivity"` 写成 `android:name=.GGEActivity`)。 - 无效嵌套(如 `<intent-filter>` 未包含在 `<activity>` 内)[^2]。 - **解决方案**: 1. 使用 Android Studio 的 **Lint 工具**(右键 Manifest 文件 → "Analyze → Inspect Code")。 2. 检查生成的 **AndroidManifest.xml.fixed** 文件(错误修复后的临时文件)[^2]。 3. 确保关键属性完整(如 `<activity>` 必须包含 `android:name` 和 `android:exported`)[^2]。 --- ### 步骤 4: 同步 Gradle 配置 1. 打开项目根目录的 **build.gradle**,确保依赖项更新: ```groovy dependencies { classpath "com.android.tools.build:gradle:7.2.0" // 使用较新版本 } ``` 2. 在模块级 **build.gradle** 中设置正确的 SDK 版本: ```groovy android { compileSdkVersion 32 defaultConfig { targetSdkVersion 32 } } ``` 3. 点击 **Sync Project with Gradle Files** 图标。 --- ### 步骤 5: 验证修复结果 1. 清理项目: **Build → Clean Project** 后重新编译 **Build → Rebuild Project**。 2. 运行时检查: 如果错误仍存在,查看 **Build Output** 日志定位具体行号。 3. 测试安装: 在模拟器或真机上运行 APK,确认无崩溃或权限问题。 --- ### 预防措施 - **避免清单冗余属性**:编译 SDK 版本、版本代号等应仅通过 Gradle 管理。 - **使用版本兼容注解**: 例如 `tools:targetApi="29"` 声明属性支持的最低 API: ```xml <manifest xmlns:tools="http://schemas.android.com/tools" ...> <application android:requestLegacyExternalStorage="true" tools:targetApi="s" /> <!-- 指定仅 API 29+ 使用 --> ``` - **定期更新 Android Studio**:确保使用最新 SDK Tools 以避免兼容性问题[^4]。 通过以上步骤,您的 AndroidManifest.xml 文件将正确编译,属性错误和清单处理失败问题将得到解决。若仍有问题,提供 **Build Output 日志** 可进一步诊断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值