Majialiang131 2024-08-20 16:21 采纳率: 0%
浏览 8
已结题

Android11上安装无法自动安装APK

1、在AndroidManifest.xml中添加了android:sharedUserId="android.uid.system";
2、应用权限有READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE、MANAGE_EXTERNAL_STORAGE、REQUEST_INSTALL_PACKAGES;
3、使用系统签名;
4、在Android11设备上运行;

运行代码:

public static void install2(Context context, String apkFilePath) {
        Intent installIntent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
        Uri contentUri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".fileProvider", new File(apkFilePath));
        installIntent.setDataAndType(contentUri, "application/vnd.android.package-archive");
        installIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        context.startActivity(installIntent);
}

报错:
Process: com.android.packageinstaller, PID: 6949
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.packageinstaller/com.android.packageinstaller.InstallStart}: java.lang.SecurityException: UID 10070 does not have permission to content://com.example.a11install.fileProvider/root_path/data/user/0/com.example.a11install/files/TestApk.apk [user 0]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3431)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7664)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.SecurityException: UID 10070 does not have permission to content://com.example.a11install.fileProvider/root_path/data/user/0/com.example.a11install/files/TestApk.apk [user 0]
at android.os.Parcel.createExceptionOrNull(Parcel.java:2373)
at android.os.Parcel.createException(Parcel.java:2357)
at android.os.Parcel.readException(Parcel.java:2340)
at android.os.Parcel.readException(Parcel.java:2282)
at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3696)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1723)
at android.app.Activity.startActivityForResult(Activity.java:5342)
at android.app.Activity.startActivityForResult(Activity.java:5300)
at android.app.Activity.startActivity(Activity.java:5686)
at android.app.Activity.startActivity(Activity.java:5639)
at com.android.packageinstaller.InstallStart.onCreate(InstallStart.java:153)
at android.app.Activity.performCreate(Activity.java:8022)
at android.app.Activity.performCreate(Activity.java:8006)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3404)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loop(Looper.java:223) 
at android.app.ActivityThread.main(ActivityThread.java:7664) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.uri.UriGrantsManagerService.checkGrantUriPermissionUnlocked(UriGrantsManagerService.java:1285)
at com.android.server.uri.UriGrantsManagerService.checkGrantUriPermissionFromIntentUnlocked(UriGrantsManagerService.java:624)
at com.android.server.uri.UriGrantsManagerService.access$1000(UriGrantsManagerService.java:117)
at com.android.server.uri.UriGrantsManagerService$LocalService.checkGrantUriPermissionFromIntent(UriGrantsManagerService.java:1442)
at com.android.server.wm.ActivityStarter$Request.resolveActivity(ActivityStarter.java:527)

  • 写回答

1条回答 默认 最新

  • 清水白石008 2024-08-20 17:52
    关注
    🕒下午好,题主!目前:🟢[在线]
    📢参考GPT-4o mini 模型、由清水白石008整理提供!
    📣今日金句:“生活就像骑自行车。要保持平衡,就得不断前进。” — 阿尔伯特·爱因斯坦
    

    在 Android 11 上安装 APK 时遇到的 SecurityException 错误,通常与权限和 URI 权限授予有关。根据您提供的信息,您已经做了一些必要的设置,但仍然遇到问题。以下是一些可能的解决方案和检查点:

    1. FileProvider 配置
      确保您的 FileProviderAndroidManifest.xml 中正确配置。示例配置如下:

      <provider
          android:name="androidx.core.content.FileProvider"
          android:authorities="${applicationId}.fileProvider"
          android:exported="false"
          android:grantUriPermissions="true">
          <meta-data
              android:name="android.support.FILE_PROVIDER_PATHS"
              android:resource="@xml/file_paths" />
      </provider>
      

      res/xml/file_paths.xml 中,确保您定义了正确的路径。例如:

      <paths>
          <files-path name="apk" path="." />
      </paths>
      
    2. 权限授予
      确保您在启动安装意图时正确授予了 URI 权限。您已经使用了 Intent.FLAG_GRANT_READ_URI_PERMISSION,但请确保在 FileProvider 的配置中也设置了 android:grantUriPermissions="true"

    3. 使用系统签名
      确保您的 APK 是使用系统签名构建的,并且在 Android 11 上运行时,您有足够的权限来安装应用。

    4. 检查 APK 路径
      确保 apkFilePath 是有效的,并且 APK 文件确实存在于该路径下。您可以在调用 FileProvider.getUriForFile 之前检查文件是否存在。

    5. **使用 Intent.ACTION_INSTALL_PACKAGE**:
      在 Android 11 中,您需要确保使用 Intent.ACTION_INSTALL_PACKAGE 来启动安装。您已经在代码中使用了这个意图,但请确保没有其他地方影响到这个意图的行为。

    6. 调试信息
      在调试时,您可以打印出 contentUri,确保它是有效的 URI,并且格式正确。

    7. 测试其他 APK
      尝试使用其他 APK 文件进行安装,以排除特定 APK 文件的问题。

    8. **使用 startActivityForResult**:
      如果您在某些情况下使用 startActivity,可以尝试使用 startActivityForResult 来启动安装意图,以便更好地处理结果。

    9. 检查设备设置
      确保设备的设置允许从未知来源安装应用。您可以在设备的设置中检查这一点。

    如果您检查了以上所有内容仍然无法解决问题,建议您提供更多的代码和配置细节,以便更深入地分析问题。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月21日
  • 创建了问题 8月20日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?