bill 发表于 2016-6-2 14:37:18

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();
    }
}

蓝天-彭 发表于 2016-6-2 16:04:19




再也不用担心apk没有root权限了:handshake
页: [1]
查看完整版本: Android APK权限问题