大家好,我看了这篇 http://blog.csdn.net/zmyde2010/article/details/6925498 博文之后,想要在android4.0.3系统也实现用android源码截屏。我下载android源码,编译,并单独编译jni模块。编译成功了,但是运行时出错,Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)。通过无穷无尽的查资料,发现此问题有可能是想库文件的函数中传递空指针造成的。顺着这个思路研究,看log发现是在cpp文件中调用完composer->captureScreen函数后发现其返回值为NO_ERROR,但是heap却是null,w和h都是0,所以到后面调用heap->getBase()时出错,想请教下是什么原因导致调用有问题?我该如何解决。谢谢!!~~~~~~
解决方案 »
- 关于android的Renderer的问题
- 求助.!!!!bitmap上面写字...
- LinearLayout使用addView方法时如何保持已有动态控件位置不初始化
- Android与Java语法的差异?
- gps 用一个漂亮图标显示位置
- tabhost 中的Activity防止重新启动问题
- android调用系统录音机或取声音文件后如何使用??
- 求破
- 多分辨率,多尺寸的android设备,res资源适配问题,求大神指导
- EditText高度动态变化
- 设置suid及文件所有者root,apk通过exec执行此程序时为何euid不是0还是apk的uid呀?急急急~
- Android WiFi porting
const char *file_path = env->GetStringUTFChars(file, NULL); const String16 name("SurfaceFlinger");
sp<ISurfaceComposer> composer;
getService(name, &composer); sp<IMemoryHeap> heap;
uint32_t w, h;
PixelFormat f;
status_t err = composer->captureScreen(0, &heap, &w, &h, &f, 0, 0,0,INT_MAX);
if (err != NO_ERROR) {
LOGE("screen capture failed: %s\n", strerror(-err));
exit(0);
} LOGD("screen capture success: w=%u, h=%u, pixels=%p\n",
w, h, heap->getBase()); LOGD("saving file as PNG in %s ...\n", file_path); SkBitmap b;
b.setConfig(SkBitmap::kARGB_8888_Config, w, h);
b.setPixels(heap->getBase());
SkImageEncoder::EncodeFile(file_path, b,
SkImageEncoder::kPNG_Type, SkImageEncoder::kDefaultQuality);
但是我把截屏函数中的代码换成别的就能正常加载.SO并正确执行。不知道楼主碰没碰到过此问题?
楼主你好,经过一通弄后,我跟你碰到一模一样的问题,“并无提示权限不足,但是执行函数时返回null”。这个你是怎么解决的啊,请问
获取输出流 执行程序文件,看看能否成功运行captureScreen()函数 。
目前,通过lib方式调用captureScreen函数 都是 用平台签名来解决的 使apk有了读取framebuffer权限,但是这方法没有可移植性,只能在自己的手机上用。
具体方法我也正在研究中,可以慢慢交流