解决方案 »

  1.   

    你的 log 信息是不足以查找问题原因的。相当于只知道有这个问题,至于为什么,没人能想得出,只能通过更多的调试信息推测
      

  2.   

    谢谢!今天发现那个权限问题还依然存在,其实我之前已经使用了root账户执行了,代码如下:
    public static boolean upgradeRootPermission(String pkgCodePath) {
    Process process = null;
        DataOutputStream os = null;
        try {
            String cmd="chmod 777 " + pkgCodePath;
            process = Runtime.getRuntime().exec("su"); //切换到root帐号
            os = new DataOutputStream(process.getOutputStream());
            os.writeBytes(cmd + "\n");
            os.writeBytes("exit\n");
            os.flush();
            process.waitFor();
        } catch (Exception e) {
            return false;
        } finally {
            try {
                if (os != null) {
                    os.close();
                }
                process.destroy();
            } catch (Exception e) {
            }
        }
        return true;
    }
    但在LOGE还是出现了SurfaceFlinger    Permission Denial: can't read framebuffer pid=14444, uid=1010这个问题,紧接着就出现了Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 14444 (droid.ScreenCap)这个问题,不知道是什么原因?希望能够解答,谢谢!
      

  3.   

    你还是没有理解 root 执行的意思,你只是在 root 里面修改了权限,其实执行你的截屏代码还是在普通权限。你要把调用 native 的代码放在 root 用户的进程空间,就是 try {} 代码块里面,只有这部分才是 root 进程。其他的都在 apk 的普通权限空间
      

  4.   

    把调用jni的代码放到了try{}代码块中这个问题还是存在,现在这个问题已经纠结了很久了,你如果有时间可以看看我的源代码http://download.csdn.net/detail/tian779278804/8389967,谢谢了!(我测试的机子是华为安卓4.1.2,源码里面编译so文件的是4.01)
      

  5.   

    截屏的代码在4.1和4.4上实现是不一样的,建议你编译一个可执行文件,拷贝到手机或模拟器的/system/bin目录,执行看看能不能截屏
      

  6.   

    谢谢,这个是可以截屏的。但是这样在源码中编译成apk的话,那么应用就具备了和系统一样的签名,这样的话可移植性会很差,在实际应用中这种方法是不可行的,只能通过获取root权限来截屏。