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

 我来答
厦门侯
高粉答主

2016-01-30 · 信息管理员
厦门侯
采纳数:30618 获赞数:90296

向TA提问 私信TA
展开全部
  本来以为就没有办法在应用程序这一层改系统时间了,后来在网上搜了好久,知道这个目的还是可以达到的。
  第一个方法简单点,不过需要在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",这样也是保护了系统的安全。
乐跑小子
2016-01-14 · TA获得超过1.5万个赞
知道大有可为答主
回答量:1.1万
采纳率:7%
帮助的人:4756万
展开全部
Android应用程序只在有限的范围内有读取权限,如/data/data/*.*.*/,而如果想让app访问其它地方的资源时,就必须要获取更高的权限,像system或者root,root的获取方法也是基于system的,因此本文先完成system权限的获取,实际上一般的应用有system的权限基本上也够了。
1、修改apk内的AndroidManifest.xml
在manifest节点中加入android:sharedUserId="android.uid.system"

2、编译工程产生apk文件
eclipse自动就帮你产生

3、解压缩工具打开*.apk
删除META-INF文件夹中的CERT.RSA和CERT.SF两个文件

4、给*.apk文件签名
这步需要在android源码中进行
1)cd build/tools/signapk
2)javac signapk.java(这里产生*.class)
3)mkdir test/com/android/signapk
4)cp *.class test/com/android/signapk
5)jar cvfm signapk.jar SignApk.mf -C test/ .(这里产生signapk.jar)

5、制作签名后的apk文件
1)mkdir SignApk
2)步骤4中产生的signapk.jar拷贝到SignApk文件夹中
3)cp build/target/product/security/{platform.x509.pem,platform.pk8} SignApk
4)将apk也拷贝到SignApk中
5)java -jar signapk.jar platform.x509.pem platform.pk8 *.apk new.apk

6、制作新的image文件
将new.apk导入到android源码目录中(一般是out/target/product/平台/system/app/下),编译生成新的system.img,再download到开发板

7、测试
如果app涉及到文件读写,可以待系统启动后adb shell到板子上,ls -l查看app安装目录(/data/data/*/*/*/)的权限,看看是不是变成system:system了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-03-21
展开全部
  1、必须是Android系统开发人员,否则你无法修改init.rc等文件。
  2、你的应用程序必须要获得system权限。
  
  在应用层 你要想用代码获得系统文件权限,除非你手机root了
  
  要么你自己坐rom。。。。 自己修改 init,rc
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
北斗星444
2015-12-28 · TA获得超过118个赞
知道小有建树答主
回答量:151
采纳率:0%
帮助的人:81.3万
展开全部
一般可以使用root账户,通过提交shell命令获取系统文件读写。Runtime.getRuntime().exec("do something…");
需要授予root权限。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chengrongbo520
2015-12-09 · 超过26用户采纳过TA的回答
知道答主
回答量:97
采纳率:0%
帮助的人:27.6万
展开全部
破解权限,也就是ROOT,让后下载一个RE文件管理器
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式