当前位置: 首页 > news >正文

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 shellsuchmod -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() {@Overridepublic 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.*** = truechmod 0775 /storage/emulated/0/Android/data/packageName/chmod 0775 /storage/emulated/0/Android/data/packageName/cachechmod 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();}}}
http://www.lryc.cn/news/296936.html

相关文章:

  • Linux探秘之旅:透彻理解路径、命令与系统概念
  • 哈希算法 c语言
  • 新版MQL语言程序设计:组合模式的原理、应用及代码实现
  • 代码随想录算法训练营第25天 | 216.组合总和III ,17.电话号码的字母组合
  • Rust 第一个rust程序Hello Rust️
  • 高斯消去法 | LU分解 | PA=LU分解(MatLab)
  • Linux笔记之expect和bash脚本监听输出并在匹配到指定字符串时发送中断信号
  • 项目02《游戏-12-开发》Unity3D
  • 记一次面试题
  • Rust入门2——随机数
  • c#: 表达式树的简化
  • 13. UE5 RPG限制Attribute的值的范围以及生成结构体
  • UE4运用C++和框架开发坦克大战教程笔记(十九)(第58~60集)完结
  • ModuleNotFoundError: No module named ‘_ctypes‘报错解决方案
  • 【服务器数据恢复】服务器RAID模块硬件损坏的数据恢复案例
  • spring boot3x登录开发-上(整合jwt)
  • git 克隆拉取代码出现私钥权限问题。
  • 【5G NR】【一文读懂系列】移动通讯中使用的信道编解码技术-卷积码原理
  • 揭开Markdown的秘籍:标题|文字样式|列表
  • 移动最小二乘法
  • 【LeetCode】37. 解数独(困难)——代码随想录算法训练营Day30
  • VUE学习——属性绑定
  • vue3 之 通用组件统一注册全局
  • [Java][算法 双指针]Day 02---LeetCode 热题 100---04~07
  • 【问题解决】如何将一个服务器的docker迁移到另一个服务器
  • C++单例模式详解
  • LLM应用开发与落地:流式响应
  • 神经网络 | 基于 CNN 模型实现土壤湿度预测
  • 江科大STM32 终
  • 《MySQL 简易速速上手小册》第10章:未来趋势和进阶资源(2024 最新版)