大家好,我看了这篇 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的学习
- ListView,ImageButton,无法单击,焦点
- 有人做过android下的库吗?
- 在android里面如何设置图片为桌面壁纸图片
- eclipse+maven+android整合问题
- 短信列表如何让同一个号码的短信只显示一条,刚刚加载短信列表会加载所有的数据列。求指教
- android 如何实现图片旋转指定度数(0-360)
- spinner 下拉框位置出错
- 设置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权限,但是这方法没有可移植性,只能在自己的手机上用。
具体方法我也正在研究中,可以慢慢交流