返回

如何修复 Android 5.0 及更高版本上的 INSTALL_FAILED_DUPLICATE_PERMISSION 错误?

Android

修复 Android 5.0 及更高版本上的 INSTALL_FAILED_DUPLICATE_PERMISSION 错误

问题概述

当尝试在 Android 5.0 及更高版本上安装包含 com.myapp.permission.C2D_MESSAGE 权限的应用程序时,可能会遇到 INSTALL_FAILED_DUPLICATE_PERMISSION 错误。

原因分析

从 Android 5.0 开始,Google 更改了处理应用程序权限的方式。每个权限只能请求一次,不能重复请求。因此,清单文件中多次指定相同权限会导致此错误。

解决方案

步骤 1:更新清单文件

  • 打开清单文件(AndroidManifest.xml
  • 移除重复指定 com.myapp.permission.C2D_MESSAGE 权限的行

步骤 2:清理项目

  • 在 Eclipse 中,转到“项目”>“清理”

步骤 3:重新构建并安装

  • 重新构建应用程序并尝试再次安装

修改后的清单文件示例

<!-- GCM -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> <!-- GCM requires a Google account. -->
<uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- Keeps the processor from sleeping when a message is received. --> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <!-- This app has permission to register and receive data message. --> 

<!-- Creates a custom permission so only this app can receive its messages. NOTE: APP_PACKAGE.permission.C2D_MESSAGE -->   
<permission android:name="com.myapp.permission.C2D_MESSAGE" android:protectionLevel="signature" />

<!-- END GCM -->

其他注意事项

  • 确保应用程序针对 Android 5.0 或更高版本编译
  • 可使用 tools:node="remove" 注释掉重复权限
  • 避免在清单文件中重复指定权限

常见问题解答

  1. 我收到错误,即使我已移除重复权限。

    • 尝试清理项目并重新构建。
  2. 我看到一个不同的错误,如 INSTALL_FAILED_NO_MATCHING_ABIS。

    • 确保 APK 与目标设备的 ABI 兼容。
  3. 如何针对 Android 5.0 编译应用程序?

    • 在项目的 Gradle 文件中,将 targetSdkVersion 设置为 21 或更高版本。
  4. 为什么 Google 更改了权限处理方式?

    • 提高安全性并减少潜在错误。
  5. 我可以为我的应用程序请求多个权限吗?

    • 是的,但每个权限只能请求一次。