我正试图从Android Studio首次在我的新款三星Galaxy S8上安装我的应用程序.当我这样做时,我收到以下错误消息:
安装失败,显示消息无法完成会话:INSTALL_FAILED_DUPLICATE_PERMISSION:包bbct.android尝试重新声明com.samsung.android.bixby.agent已拥有的bbct.android.lite.permission.READ权限.
为什么Bixby拥有我的许可?更重要的是我该如何解决这个问题?
由于这种恼人的Android限制,我需要用户重新安装我的应用程序,以便其他应用程序检测到清单权限.
这对用户来说已经是令人沮丧的了,但另外,我看不到从/ data/app中存储的apk重新安装我的应用程序的方法,因此我必须将相同的版本下载到存储卡才能解雇通常的安装意图.
我急切地等着有人告诉我,我错过了一些明显的东西!我画了一个空白......
提前致谢.
如果您希望解决问题,请为问题加注星标!干杯.
编辑:考虑到@hackbod的注释,您可以使用以下代码启动安装对话框.
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(this.getApplicationInfo().sourceDir)),
"application/vnd.android.package-archive");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
在我的Jelly Bean设备上,它提供了两个选项:包安装程序和验证并安装.我不知道后者是否会处理以下问题:
我的申请是免费的,所以我无法测试以下的付费问题:
虽然hackbod完成了"其他人可读",这表明如果您通过自己的代码执行此操作,对于您自己的应用程序,它是可读的吗?如果你可以测试一下,请纠正我,我错了.
App A定义了以下的自定义权限:
com.package.permission.READ_APP_DATA
Run Code Online (Sandbox Code Playgroud)
当安装应用程序B声明自定义权限时,它将被授予.
但是,如果在应用B之后安装了应用A,则该权限不会授予应用B.
虽然这可能不常见,但由于应用程序B经常是应用程序A的插件,它当然可以发生并且适用于我的应用程序.
android.permission.ACCESS_SUPERUSER如果用户决定切换SuperUser应用程序,SuperUser应用程序同意引入全局自定义权限可能是一个大问题.
为了处理这个问题,我打算在我的应用程序中使用以下代码来获取我即将开始声明的自定义权限:
checkPermissions(this, getCallingActivity().getPackageName()); // get the package name from the sender first
private boolean checkPermissions(Context context, String callingPackage) {
final List<PackageInfo> apps = context.getPackageManager().getInstalledPackages(PackageManager.GET_PERMISSIONS);
for (PackageInfo pi : apps) {
if (pi.packageName.equals(callingPackage)) {
String[] permissions = pi.requestedPermissions;
if (permissions != null) {
for (String permission : permissions) {
if (permission.equals("com.package.permission.READ_APP_DATA")) {
return true;
}
}
}
}
}
return false;
Run Code Online (Sandbox Code Playgroud)
根据这个问题的标题:这种方法"安全"吗?或者是否有一种方法/ root-hack,应用程序的清单在安装后可以更改,并且以编程方式"添加"到应用程序B的权限?