对于学校项目的概念验证,我需要从Android ndk中的本机代码访问系统库。我已成功链接到libgui.so,libui.so ...等等。
但是,某些功能无法访问。具体来说,我使用ISurfaceComposer将屏幕捕获到BufferQueue上。我尝试使用BufferQueue-> acquireBuffer来读取帧,但adb给我一个错误“disconnected:unknown API”。
我已经尝试将应用及其库移动到系统文件夹中,但结果仍然相同。有没有办法在不构建整个Android系统的情况下访问这些系统库?
编辑:原生代码
const String16 name("SurfaceFlinger");
sp<ISurfaceComposer> composer;
getService(name, &composer);
sp <BufferQueue> bufferQueue = new BufferQueue();
wp <BufferQueue::ConsumerListener> listener =
static_cast<BufferQueue::ConsumerListener*>(this);
sp <BufferQueue::ProxyConsumerListener> proxy =
new BufferQueue::ProxyConsumerListener(listener);
status_t err = bufferQueue->consumerConnect(proxy, false);
if (err == NO_INIT)
return "NO INIT";
else if (err == BAD_VALUE)
return "BAD_VALUE";
else if (err != NO_ERROR)
return "CONNECTION FAILED";
uint32_t w = 0;
uint32_t h = 0;
status_t err = composer->captureScreen(0, bufferQueue, w, h, 0, 0);
if (err != NO_ERROR)
return "NOPE";
BufferQueue::BufferItem item;
err = bufferQueue->acquireBuffer(&item, 0);
if (err == BufferQueue::NO_BUFFER_AVAILABLE)
return "NAH";
else if (err == NO_ERROR)
return "NAH2";
else if (err == INVALID_OPERATION)
return "NAH3";
else if (err == BufferQueue::PRESENT_LATER)
return "NAH4";
return "HOPE";
编辑2:日志文件错误
02-08 09:56:18.318 5612-5612/com.mikaaudio.server E/BufferQueue: [unnamed-5612-0] disconnect: unknown API 0