Android OS框架-将单个可执行文件构建为共享对象



我只是一个初学者,所以请原谅我-

我试图修改框架中的一些现有的可执行文件,以便将它们作为应用程序内部的SO(修改允许我从方法调用中获得返回结果,而不是在命令行调用可执行文件),

不幸的是,我发现很难隔离和构建它们。

例如,屏幕截图可执行文件:

http://androidxref.com/4.1.1/xref/frameworks/base/cmds/screencap/

你可以从screencap.cpp文件中看到,它只使用(android)系统头文件:

#include <errno.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <binder/IMemory.h>
#include <gui/SurfaceComposerClient.h>
#include <SkImageEncoder.h>
#include <SkBitmap.h>
#include <SkData.h>
#include <SkStream.h>

虽然我可以在Android源代码树中找到这些头文件,但为了自定义构建而单独链接它们将非常耗时-

我的问题是,我如何使用android源代码框架来构建只是单个可执行文件,而不必弄清楚依赖关系和链接?

可以看到这里有一个Android。Mk在那个目录下。

所以如果你想构建特定的模块:screencap.

简单设置Android构建环境:

export SHOW_COMMANDS=1
. build/envsetup.sh
lunch 1
mmm screencap

然后你将得到你的可执行文件。在构建过程中,您可以看到Android如何构建可执行文件,包括那些g++命令。

:

我想使用一个文件中包含的代码,如screencap.cpp作为一个更大的ndk-build项目的一部分在Android应用程序

更改Android。Mk文件,也可以复制到其他地方。

在其中添加几个语句来构建一个静态库。

include $(BUILD_SHARED_LIBRARY)

然后将静态库添加到应用程序中。这应该行得通。

(@Jermain Xu回答的精简版)

你可以在android源代码树中修改模块的Android.mk并更改

include $(BUILD_EXECUTABLE)

include $(BUILD_SHARED_LIBRARY)

,以便将该模块构建为共享库,允许对其进行链接。它需要一个完整的构建来链接,但是您可以使用mmm命令指向模块(本例中的模块是包含Android.mk文件的目录)。

例如,从android源目录中,

mmm framework/base/cmds/screencap

这将响应构建的.so文件的位置,该文件应该在您自己的应用程序中可链接。

最新更新