android怎么在代码里获得系统文件的读写权限

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android怎么在代码里获得系统文件的读写权限相关的知识,希望对你有一定的参考价值。

参考技术A

android怎么在代码里获得系统文件的读写权限

1、必须是Android系统开发人员,否则你无法修改init.rc等文件。
2、你的应用程序必须要获得system权限。
在应用层 你要想用代码获得系统文件权限,除非你手机root了
要么你自己做rom。 自己修改 init,rc

 本来以为就没有办法在应用程序这一层改系统时间了,后来在网上搜了好久,知道这个目的还是可以达到的。
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1. 在应用程序的AndroidManifest.xml中的manifest节点中加入
android:sharedUserId="android.uid.system"这个属性。
2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行
3. 使用mm命令来编译,生成的apk就有修改系统时间的权限了。
第二个办法麻烦点,不过不用开虚拟机跑到源码环境下用make来编译:
1. 同上,加入android:sharedUserId="android.uid.system"这个属性。
2. 使用eclipse编译出apk文件,但是这个apk文件是不能用的。
3. 用压缩软件打开apk文件,删掉META-INF目录下的CERT.SF和CERT.RSA两个文件。
4. 使用目标系统的platform密钥来重新给apk文件签名。这步比较麻烦,
首先找到密钥文件,在我的Android源码目录中的位置
是"build argetproductsecurity",下面的platform.pk8和platform.x509.pem
两个文件。
然后用Android提供的Signapk工具来签名,signapk的源代码是
在"build oolssignapk"下,
用法为"signapk platform.x509.pem platform.pk8 input.apk output.apk",
文件名最好使用绝对路径防止找不到,也可以修改源代码直接使用。
这样最后得到的apk和第一个方法是一样的。
最后解释一下原理,首先加入android:sharedUserId="android.uid.system"这个属性。通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。那么把程序的UID配成android.uid.system,也就是要让程序运行在系统进程中,这样就有权限来修改系统时间了。
只是加入UID还不够,如果这时候安装APK的话发现无法安装,提示签名不符,原因是程序想要运行在系统进程中还要有目标系统的platform
key,就是上面第二个方法提到的platform.pk8和platform.x509.pem两个文件。用这两个key签名后apk才真正可以放入系统进程中。第一个方法中加入LOCAL_CERTIFICATE := platform其实就是用这两个key来签名。这也有一个问题,就是这样生成的程序只有在原始的Android系统或者是自己编译的系统中才可以用,因为这样的系统才可以拿到 platform.pk8和platform.x509.pem两个文件。要是别家公司做的Android上连安装都安装不了。试试原始的Android 中的key来签名,程序在模拟器上运行OK,不过放到G3上安装直接提示"Package ... has no signatures that match those in shared user android.uid.system",这样也是保护了系统的安全。

Java代码
1、必须是Android系统开发人员,否则你无法修改init.rc等文件。 2、你的应用程序必须要获得system权限。

在应用层 你要想用代码获得系统文件权限,除非你手机root了

要么你自己坐rom。。。。 自己修改 init,rc

1、必须是Android系统开发人员,否则你无法修改init.rc等文件。 2、你的应用程序必须要获得system权限。 在应用层 你要想用代码获得系统文件权限,除非你手机root了 要么你自己坐rom。。。。 自己修改 init,rc

EasyClick 修改system目录文件

EasyClick 修改system目录文件

Android system目录介绍

  • /system目录,也就是系统目录,在没有获得root权限的情况下用户没有读写权限,并且,用户在获得root权限后也不一定得到系统目录的读写权限,在某些rom中会将系统目录上锁,这时用户必须获得root权限将系统目录解锁才能得到系统目录的读写权限。
  • /system/app 目录,这个目录存放的是系统app的apk文件,比如:蓝牙,计算器,日历等.
  • /system/priv-app 目录,这个目录存放的是大多是手机厂商定制的系统级别的应用的apk文件,比如:设置,系统界面,图库等.
  • /system/bin 目录, 这个目录的文件文件都是系统的本地程序,里面主要是Linux系统自带的组件(命令)
  • /system/xbin 目录,这个目录是 busybox 的Linux命令和工具的默认安装路径.
  • /system/usr 目录,这个目录存放着一些用户文件夹,比如:键盘布局(keylayout),时区信息(share)等.
  • /system/etc 目录,这个目录存放着与WiFi,GPS,蓝牙,APN相关的配置文件.
  • /system/media 目录,这个目录存放一些音效文件,铃声,开关机动画等.

EasyClick 修改system目录

前提 获取ROOT权限!
示例代码(不同机型可能结果不同自行测试!)


// 例子
reviseSystemFile("/system/hosts","/sdcard/hosts")
/**
 * @作者 Mr_老鬼 QQ:1156346325
 * @函数用途   修改系统文件
 * @创建时间 2:35 2022/7/8
 * @param sysFilPath 系统文件路径 /system/xxx
 * @param sdFilePath sdcard目录下的文件路径 (准备好的)
 **/
function reviseSystemFile(sysFilPath,sdFilePath) 
    shell.su();
    // 读取原内容
    let hostStr = shell.sudo("cat "+sysFilPath);
    logd(hostStr);
    // 以读写方式挂载
    shell.sudo("mount -o rw,remount /system");
    // 修改可读写
    shell.sudo("chmod 666 "+sysFilPath);
    // 查看文件状态
    let result = shell.sudo("ls -al "+sysFilPath);
    logd(result);
    shell.sudo("cp -rf "+ sdFilePath+" "+sysFilPath);
    logd(shell.sudo("cat  "+sysFilPath));
    // 恢复初始状态
    shell.sudo("chmod 644 "+sysFilPath);
    // 查看文件状态
    result = shell.sudo("ls -al "+sysFilPath);
    logd(result);


我是Mr-老鬼、QQ1156346325 。交流QQ群:620028786,647082990,772810035
————————————————版权声明——————————————————
本文版权所有~Mr-老鬼 ~转载请注明原文地址
免责声明:本文所有的教程仅限交流学习使用不得用于违法用途,造成的法律后果本人不承担责任。

以上是关于android怎么在代码里获得系统文件的读写权限的主要内容,如果未能解决你的问题,请参考以下文章

sd卡怎么获得读写权限?

Android开发,怎么在代码里获得当前连接wifi的端口号?

android 读写联系人需要啥权限

安卓手机要怎么解除权限ROOM

win7系统,在组策略中禁止了优盘的读写权利,怎么还是可以打开优盘里文件?

javaspringboot怎么获得根目录sudo读写权限