最近在清理手机APK,发现手机里保存了一个“百度网盘联运版”,是百度网盘无广告小米定制,因为我已经安装百度网盘官方版,直接安装会提示不允许安装,利用MT管理器安装,则会提示 java.lang.Exception: INSTALL_FAILED_DUPLICATE_PERMISSION

VER: 2.15.0(24030663)
PERMISSION: ROOT
ABI: arm64-v8a
MODEL: Mi9 Pro 5G
SDK: 30
RELEASE: 11
TARGET_SDK: 30
---StackTrace---
java.lang.Exception: INSTALL_FAILED_DUPLICATE_PERMISSION: Package com.baidu.netdisk attempting to redeclare permission com.baidu.netdisk.permission.BROADCAST already owned by com.baidu.netdisk.xiaomi.appunion
	at l.ۥۨ۬.ۨ(KAQI:1161)
	at l.ۧۨ۬.۠(6AQ0:970)
	at l.ۘ۟ۘۨ.ۨ(D4W8:115)
	at l.ۖ۟ۖ.run(7ATF:18)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
	at java.lang.Thread.run(Thread.java:923)

自行百度查了一下这个报错:
Android 5.0上新增加的 permission 的判断,INSTALL_FAILED_DUPLICATE_PERMISSION ,这个简单讲就是如果两个apk声明了相同的permission,但是如果这两个apk的签名不一样的话,后安装的apk会fail。

找到了解决办:

您可以使用${applicationId}代替AndroidManifest.xml文件中的packageName。

替换

<permission
android:name="com.example.testapp.permission.C2D_MESSAGE"
android:protectionLevel="signature"/>

<uses-permission android:name="com.example.testapp.permission.C2D_MESSAGE"/>

<permission
    android:name="${applicationId}.permission.C2D_MESSAGE"
    android:protectionLevel="signature"/>
 
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/>

在接收者的intent-filter中:

替换

<category android:name="com.example.testapp"/>

<category android:name="${applicationId}"/>

至此DUPLICATE_PERMISSION问题将会得到解决。

参考1:https://blog.csdn.net/u014727709/article/details/103601964
参考2:https://cloud.tencent.com/developer/ask/sof/106420458

评论已关闭