Android 11 访问 Android/data/或者getExternalCacheDir() root方式

前言

需求要求安装三方应用ExternalCacheDir()下载下来的apk文件。

getExternalCacheDir() : /storage/emulated/0/Android/data/com../cache/

获取访问权限

如果手机安卓版本为Android10的时候,可以在AndroidManifest.xml中添加下列代码

复制代码
   android:requestLegacyExternalStorage="true"

以此禁用分区存储,但这在Android11及以上版本不起作用。

root方式非root方式点这里

  • 第一种:通过adb命令修改

    复制代码
      adb shell
      su
      chmod -R 775 /storage/emulated/0/Android/data/packageName/
  • 第二种:系统服务代码

    复制代码
      frameworks/base/services/core/java/com/android/service/***/***.java
    
      //系统服务合适的地方添加安装卸载应用监听
      private void registerForBroadcasts() {
          IntentFilter intentFilter = new IntentFilter();
          intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
          intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
          intentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED);
          intentFilter.addDataScheme("package");
    
          mContext.registerReceiver(
              new BroadcastReceiver() {
                  @Override
                  public void onReceive(Context context, Intent intent) {
                      String action = intent.getAction();
                      if (Intent.ACTION_PACKAGE_ADDED.equals(action)
                          ||Intent.ACTION_PACKAGE_REPLACED.equals(action) ) {
                          Uri data = intent.getData();
                          String pkgName = data.getEncodedSchemeSpecificPart();
                          //添加安装替换应用监听
                          if("com.***.***".equals(pkgName)){
                              //更新系统属性
                              SystemProperties.set("persist.sys.***", "true");
                          }
                      } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) {
                          if (!intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) {
                              Uri data = intent.getData();
                              String ssp;
                              if (data != null && (ssp = data.getSchemeSpecificPart()) != null) {
                                  String unPkgName = data.getEncodedSchemeSpecificPart();
                                  //添加移除卸载应用监听
                                  if("com.***.***".equals(unPkgName)){
                                      //更新系统属性
                                      SystemProperties.set("persist.sys.***", "false");
                                  }
                              }
                          }
                      }
                  }
              }, intentFilter);
      }
    
    	system/core/rootdir/init.rc
    
      #init.rc添加属性监听chmod改变权限
      on property:persist.sys.*** = true
          chmod 0775 /storage/emulated/0/Android/data/packageName/
          chmod 0775 /storage/emulated/0/Android/data/packageName/cache
          chmod 0775 /storage/emulated/0/Android/data/packageName/cache/*.apk
  • 第三种:系统服务代码

    复制代码
          //在系统安装应用接口中添加
          if(!TextUtils.isEmpty(filePath)){
              if(filePath.startsWith("/storage/emulated/0/Android/data/com.***.***/")){
                  try {
                          String command = "chmod -R 775 /storage/emulated/0/Android/data/com..***.***/";
                          Process process = Runtime.getRuntime().exec(command);
                          process.waitFor();
                      } catch (Exception e) {
                          e.printStackTrace();
                      }
              }
          }
相关推荐
游戏开发爱好者813 分钟前
在 iOS 开发、测试与上架过程中 如何做证书管理
android·ios·小程序·https·uni-app·iphone·webview
山峰哥17 分钟前
数据库工程实战:一招实现 SQL 查询速度 10 倍提升
android·数据库·sql·编辑器·深度优先
TheNextByte129 分钟前
如何将vivo应用程序移至SD卡?综合指南
android
月月玩代码33 分钟前
OkHttp,Square出品的Java/Android HTTP客户端!
android·java·okhttp
ii_best39 分钟前
按键精灵安卓/IOS手机助手 × 手机按键 App:1 分钟搞定设备连接(超详细教程)
android·ios·智能手机·自动化·编辑器
似霰40 分钟前
AIDL Hal 开发笔记4----驱动开发
android·驱动开发·framework·hal
yi诺千金43 分钟前
Android U 自由窗口(浮窗)——操作栏相关
android·java·ui
Huanzhi_Lin1 小时前
安卓包体压缩
android·apk压缩
符哥20081 小时前
android compose 常用组件
android·composer
_李小白1 小时前
【Android 美颜相机】第九天:GPUImageRenderer解析
android·数码相机