Android APK权限问题
虽然Android系统是基于Linux内核的,但是Android与Linux分别有自己权限机制,所以APK在文件系统上是root/root用户及用户组的,在安卓上就有root权限这种说法是错误的。apk获取system权限的方式:
1.在Android源码中编译
(1)在AndroidManifest.xml中添加android:sharedUserId="android.uid.system"
(2)在Android.mk文件里面添加LOCAL_CERTIFICATE := platform(使用系统签名)
(3)在源码下面进行mm编译(/work/A20_android/android$ mm packages/apps/包名)
这样生成的apk能够获取system权限,可以在任意system权限目录下面进行目录或者文件的创建,以及访问其他apk资源等-)
2.在Intellij Idea或eclipse编译出apk文件
(1)在apk源码中AndroidManifest.xml中添加android:sharedUserId="android.uid.system"
(2)运行生成APK文件(此时的APK文件不可安装使用,需要签名)
(3)可以使用现有的A20-SDK平台platform密钥来给apk文件签名,密钥在 Android源码目录中的位置是"build/target/product/security" ,
拷贝platform.x509.pem和platform.pk8这两个密钥,在下载SignApk.jar包,将密钥、jar包、待签名的APK放入同一文件夹,输入命令
#java -jarsignapk.jar platform.x509.pem platform.pk8 your-app.apkyour-signed-app.apk 即可生成已签名APK
apk获取Root权限的方式:
APK获得root权限首先要求的是
1、这个手机系统已经被root了
2、你的应用必须获得系统签名
3、已经root的系统,一般的程序你可以执行 “su ” 或“sh”获得root权限,在java中我们可以借助 Runtime.getRuntime().exec(Stringcommand )访问底层Linux下的程序或脚本,这样就能执行su命令,使apk具有root权限,能够访问系统中需要root权限才能执行的程序或脚本了.
例如:
private void ssss1() {
Process process = null;
DataOutputStream dos = null;
try {
process = Runtime.getRuntime().exec("/system/bin/sh");
dos = new DataOutputStream(process.getOutputStream());
dos.writeBytes("reboot");//这里可以执行具有root 权限
dos.flush();
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
再也不用担心apk没有root权限了:handshake
页:
[1]