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了。