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();}}}
相关文章:
Android 11 访问 Android/data/或者getExternalCacheDir() root方式
前言: 需求要求安装三方应用ExternalCacheDir()下载下来的apk文件。 getExternalCacheDir() : /storage/emulated/0/Android/data/com../cache/ 获取访问权限 如果手机安卓版本为Android10的时候,可以在AndroidManifest.xml中添加下列代码 android:requestLegacyExt…...
Linux探秘之旅:透彻理解路径、命令与系统概念
目录 如何远程连接 远程登录简明指南 linux区别 1.严格区分大小写 2.linux的命令返回结果判断 3.如何查看网络信息 4.关于后缀名(Linux不关心文件后缀) 4.1 需要记忆的后缀 5.echo命令 6.linux一切皆文件 6.1比如磁盘的文件 6.2可执行文件 …...
哈希算法 c语言
#include <stdio.h> #include <stdlib.h> #include <string.h> // 哈希函数 unsigned int hash_function(const char *str) { unsigned int hash 0; while (*str) { hash (hash * 31 *str) % 1000; str; } return hash;…...
新版MQL语言程序设计:组合模式的原理、应用及代码实现
文章目录 一、什么组合模式二、为什么需要组合模式三、组合模式的实现原理四、组合模式的应用场景五、组合模式的代码实现 一、什么组合模式 组合模式是一种结构型设计模式,它允许将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和…...
代码随想录算法训练营第25天 | 216.组合总和III ,17.电话号码的字母组合
回溯章节理论基础: https://programmercarl.com/%E5%9B%9E%E6%BA%AF%E7%AE%97%E6%B3%95%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 216.组合总和III 题目链接:https://leetcode.cn/problems/combination-sum-iii/ 思路: 本题就是在[1,2,3,4,5,6,7,…...
Rust 第一个rust程序Hello Rust️
文章目录 前言一、vscode 安装rust相关插件二、Cargo New三、vscode调试rustLLDB 前言 Rust学习系列。今天就让我们掌握第一个rust程序。Hello Rust 🦀️。 在上一篇文章我们在macOS成功安装了rust。 一、vscode 安装rust相关插件 以下是一些常用的 Rust 开发插件…...
高斯消去法 | LU分解 | PA=LU分解(MatLab)
一、问题描述 利用高斯消去法,LU 分解及PALU 分解求解非线性方程组。 二、实验目的 掌握高斯消去法、LU 分解、PALU 分解的算法原理;编写代码实现利用高斯消去法、LU 分解、PALU 分解来求解线性方程组。 三、实验内容及要求 1. 利用顺序高斯消去法求…...
Linux笔记之expect和bash脚本监听输出并在匹配到指定字符串时发送中断信号
Linux笔记之expect和bash脚本监听输出并在匹配到指定字符串时发送中断信号 code review! 文章目录 Linux笔记之expect和bash脚本监听输出并在匹配到指定字符串时发送中断信号1.expect2.bash 1.expect 在Expect脚本中,你可以使用expect来监听程序输出,…...
项目02《游戏-12-开发》Unity3D
基于 项目02《游戏-11-开发》Unity3D , 任务:实现场景怪物自动巡航 , 首先在场景中创建小球命名为路径点WayPoint0, 取消小球的碰撞器Collider, 再复制两个改名为WayPoint1 和 WayPoint2 , 在…...
记一次面试题
1.Php 私有化包(composer)的部署 1. 创建你的PHP包 确定你的包的功能和命名空间。 创建一个新的目录并初始化一个Git仓库。 使用composer init命令创建一个composer.json文件,并定义你的包名、版本、依赖等信息。 2. 开发并测试你的包 在本地…...
Rust入门2——随机数
文章目录 一、生成随机数二、比较两个数相等 简单列出两个Rust的小例子 一、生成随机数 在Cargo.toml的dependencies中引入rand,指定rand的版本 [dependencies] rand "^0.3.14"之后在主函数中调用rand函数,生成随机数 use rand::Rng; f…...
c#: 表达式树的简化
环境: .net 6 一、问题? 有下面的表达式: var nums new List<int> { 1, 2, 3 }; Expression<Func<int, bool>> exp i > i > nums.Max();我们知道,它其实就是:exp i > i > 3; 那么…...
13. UE5 RPG限制Attribute的值的范围以及生成结构体
前面几章,我们实现了通过GameplayEffect对Attribute值的修改,比如血量和蓝量,我们都是有一个最大血量和最大蓝量去限制它的最大值,而且血量和蓝量最小值不会小于零。之前我们是没有实现相关限制的,接下来,我…...
UE4运用C++和框架开发坦克大战教程笔记(十九)(第58~60集)完结
UE4运用C和框架开发坦克大战教程笔记(十九)(第58~60集)完结 58. 弹窗显示与隐藏59. UI 面板销毁60. 框架完成与总结 58. 弹窗显示与隐藏 这节课我们先来补全 TransferMask() 里对于 Overlay 布局类型面板的遮罩转移逻辑ÿ…...
ModuleNotFoundError: No module named ‘_ctypes‘报错解决方案
1、须命令安装libbffi-devel软件包: yum install libffi-devel -y2、安装完后再重装python3,无须卸载 找到之前的python3安装包,如果安装包删除了通过 history | grep python命令找到最初安装时的包下载的命令下载,保证版本一样&…...
【服务器数据恢复】服务器RAID模块硬件损坏的数据恢复案例
服务器数据恢复环境&故障: 某品牌服务器中有一组由数块SAS硬盘组建的RAID5磁盘阵列,服务器操作系统是WINDOWS SERVER,服务器中存放企业数据,无数据库文件。 服务器出故障之前出现过几次意外断电的情况,服务器断电…...
spring boot3x登录开发-上(整合jwt)
⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途。 目录 前置条件 jwt简介 导依赖 编写jwt工具类 1.配置项直接嵌入代码,通过类名.静态方法使用 2.配置项写到…...
git 克隆拉取代码出现私钥权限问题。
问题反馈: rootdd:~/android/boost-1.74-for-android-r20b# git clone https://github.com/liulilittle/boost-1.74-for-android-r20b.git Cloning into boost-1.74-for-android-r20b... WARNING: UNPROTECTED PRIVATE KEY FILE! Permissions 0777 for /root/…...
【5G NR】【一文读懂系列】移动通讯中使用的信道编解码技术-卷积码原理
目录 一、引言 二、卷积编码的发展历史 2.1 卷积码的起源 2.2 主要发展阶段 2.3 重要里程碑 三、卷积编码的基本概念 3.1 基本定义 3.2 编码器框图 3.3 编码多项式 3.4 网格图(Trellis)描述 四、MATLAB示例 一、引言 卷积编码,作为数字通信领域中的一项…...
揭开Markdown的秘籍:标题|文字样式|列表
🌈个人主页:聆风吟 🔥系列专栏:Markdown指南、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. ⛳️Markdown 标题二. ⛳️Markdown 文字样式2.1 🔔斜体2.2 &…...
突破性AI音乐创作革新:腾讯SongGeneration开源项目全解析
突破性AI音乐创作革新:腾讯SongGeneration开源项目全解析 【免费下载链接】SongGeneration 腾讯开源SongGeneration项目,基于LeVo架构实现高品质AI歌曲生成。它采用混合音轨与双轨并行建模技术,既能融合人声与伴奏达到和谐统一,也…...
Unity JSON处理革新性方案:Newtonsoft.Json-for-Unity全解析
Unity JSON处理革新性方案:Newtonsoft.Json-for-Unity全解析 【免费下载链接】Newtonsoft.Json-for-Unity Newtonsoft.Json (Json.NET) 10.0.3, 11.0.2, 12.0.3, & 13.0.1 for Unity IL2CPP builds, available via Unity Package Manager 项目地址: https://g…...
基于STM32CubeMX的AD9850驱动开发与频率合成实战
1. 从零开始认识AD9850与STM32CubeMX 第一次接触AD9850这个芯片时,我完全被它的性能震撼到了——这个比指甲盖还小的芯片,居然能产生0.0291Hz分辨率的信号!当时我正在做一个射频测试项目,需要生成精确的正弦波信号。市面上常见的…...
低成本搭建AI知识库:Qwen3-Embedding-4B量化版仅需3GB显存教程
低成本搭建AI知识库:Qwen3-Embedding-4B量化版仅需3GB显存教程 1. 引言:为什么选择Qwen3-Embedding-4B? 在构建AI知识库时,文本向量化模型的选择至关重要。传统方案要么性能不足,要么资源消耗过大。Qwen3-Embedding-…...
Phi-4-Reasoning-Vision简单调用:Python API封装与REST接口调用示例
Phi-4-Reasoning-Vision简单调用:Python API封装与REST接口调用示例 1. 项目概述 Phi-4-Reasoning-Vision是基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具,专为双卡4090环境优化。该工具严格遵循官方SYSTEM PROMPT规范…...
避坑指南:CentOS7部署LibreNMS常见错误及解决方案
CentOS7部署LibreNMS避坑实战:从SELinux到数据库权限的深度排错指南 对于网络监控系统的部署,LibreNMS以其开源特性和强大功能成为众多技术团队的首选。但在CentOS7环境下,从系统配置到服务调优的每个环节都可能成为阻碍顺利部署的暗礁。本文…...
CF1335E2 Three Blocks Palindrome (hard version)
本题解也可通过CF1335E1 Three Blocks Palindrome (easy version)。做法:值域很小。只有200,考虑从这里入手。我们设q[i][j]表示数i第j次出现的位置,sum[i][j]表示种类i在1到j范围内出现过多少次。枚举 a,b 具体的值,枚举 x&#…...
前开发转行AI萨满:给大模型驱魔收费百万
在人工智能的狂潮中,一个看似荒诞的职业正在硅谷悄然兴起——AI萨满。他们不是巫师,而是精通软件测试的前开发者,用测试思维为大型语言模型“驱魔”,收费高达百万。本文将从软件测试的专业视角,揭秘这一转型背后的逻辑…...
从 Prompt Engineering 到 Harness Engineering:AI 系统竞争,正在从“会写提示词”转向“会搭执行框架”
从 Prompt Engineering 到 Harness Engineering:AI 系统竞争,正在从“会写提示词”转向“会搭执行框架” 摘要 过去两年,很多团队把 AI 应用效果的提升寄托在 Prompt Engineering 上:修改 system prompt、叠加 few-shot、重写指令…...
APKMirror:安卓应用安全管理的终极解决方案
APKMirror:安卓应用安全管理的终极解决方案 【免费下载链接】APKMirror 项目地址: https://gitcode.com/gh_mirrors/ap/APKMirror 您是否曾在寻找安卓应用的特定版本时感到无从下手?是否担忧从第三方渠道下载的APK文件可能存在安全隐患ÿ…...
