andriod 源码编译时,如何添加一个可执行文件到文件系统中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了andriod 源码编译时,如何添加一个可执行文件到文件系统中相关的知识,希望对你有一定的参考价值。

我现在有一个可执行文件,临时定义为abc,我用adb push到andriod的上可以使用,但是我想把这个文件直接在编译文件系统的时候直接弄到系统目录下(我的思路是这样的,以前在linux也实验成功了,就是在内核目录下的某个makefile文件中添加上一个cp命令(cp abc ***),也就是把这个文件直接拷贝到文件系统的目录下,最后制作镜像的时候把这个文件给弄上,我现在就是不知道在那个文件中添加,也不知道应该拷贝到哪个地方),这样我就不用adb了,希望懂的告诉我,如果正确,我会再添加分的,谢谢,

是这样的
1.进入你的android系统源码的build/target/board/generic目录下
2.把你的abc拷贝到 这个目录下
3.编辑这个目录下的vi AndroidBoard.mk这个文件
4.添加 PRODUCT_COPY_FILES += $(LOCAL_PATH)/abc:system/bin/abc

这样在make源码的时候,就可以自动进行这次拷贝了追问

我现在的目的是想把以前的toolbox中的一个命令如ifconfig去掉,然后添加上我的busybox(这个事制作好的,和ifconfig,我把这2个文件拷贝android_froyo_smdkc110/out/target/product/smdkc110/system/bin目录下,这个busybox和ifconfig都编译到了system中了,并且可用。但是有好几次,这2个文件没有编译进去。我想知道问题在哪,如果你能给解决的话,我在添加分数,谢谢了

追答

这个目录只是你编译后生成的临时目录啊?重新编译或者make clean这个目录就没了,自然你的东西也就没了,如果需要往编译出的文件系统中添加自己编译的一些文件,最好的方法就是我说的那样,不然这些文件很容易丢失或者被覆盖

参考技术A 用adb push将二进制文件拷贝到系统的某个目录,然后运行。
./adb push list_prop /data/list_prop
# chmod 777 list_prop
# ./list_prop
#include <cutils/properties.h>
#include <stdio.h>
#include <cstring>
void print_prop( const char * key, const char * value, void * cookie)

if(!strcmp(key, "ro.build.version.sdk"))
printf("--key=%s,value=%s/n" ,key,value);


int main()

property_list(print_prop,NULL);

如何向 mingw-gcc 编译的可执行文件添加图标?

【中文标题】如何向 mingw-gcc 编译的可执行文件添加图标?【英文标题】:How do I add an icon to a mingw-gcc compiled executable? 【发布时间】:2010-10-17 00:47:02 【问题描述】:

在windows中,使用mingw的gcc,是否有指定输出exe文件取一个图标文件,以便exe文件在资源管理器中显示该图标?

【问题讨论】:

【参考方案1】:

您需要先创建图标。然后您需要创建一个包含以下内容的 RC 文件。这里我们将其命名为my.rc

id ICON "path/to/my.ico"

上述命令中提到的id 几乎可以是任何东西。除非您想在代码中引用它,否则这无关紧要。然后运行windres如下:

windres my.rc -O coff -o my.res

然后在构建可执行文件以及其他目标文件和资源文件时,包括我们从上述步骤中获得的my.res。例如:

g++ -o my_app obj1.o obj2.o res1.res my.res

这应该就是它的全部了。


而且,如果您想在您的 应用程序,将以下样板添加到新的 .rc 文件并按照上述步骤操作。

1 VERSIONINFO
FILEVERSION     1,0,0,0
PRODUCTVERSION  1,0,0,0
BEGIN
  BLOCK "StringFileInfo"
  BEGIN
    BLOCK "080904E4"
    BEGIN
      VALUE "CompanyName", "My Company Name"
      VALUE "FileDescription", "My excellent application"
      VALUE "FileVersion", "1.0"
      VALUE "InternalName", "my_app"
      VALUE "LegalCopyright", "My Name"
      VALUE "OriginalFilename", "my_app.exe"
      VALUE "ProductName", "My App"
      VALUE "ProductVersion", "1.0"
    END
  END
  BLOCK "VarFileInfo"
  BEGIN
    VALUE "Translation", 0x809, 1252
  END
END

注意,langID 用于英国英语(这是最接近 澳大利亚我可以识别。)如果你想要美国的“英语”然后改变BLOCK 行至:

BLOCK "040904E4"

和翻译行:

VALUE "Translation", 0x409, 1252

有关信息,请参阅VERSIONINFO resource。

【讨论】:

如果示例显示了在哪里插入 ICON 行,那就太好了。 然后...其次..***.com/questions/1411040/… 您还可以通过仅附加 WORD、WORD 对来包含多个“翻译”(它只是告诉 Windows 该程序已翻译),例如:VALUE "Translation", 0x409, 1252, 0x809, 1252 将启用美国和英国英语到msdn.microsoft.com/en-us/library/aa381058.aspx。这也告诉你可以包含多个 'BLOCK "lang04E4"' 我使用 Nirsoft 的免费实用程序 IconsExtract 获得了一个嵌入到我需要的 exe 中的图标。【参考方案2】:

在 RC 文件中,nameID 甚至不必是名字,它可以是 一个整数。 文件名 只有在它包含空格时才必须被引用。反而 的:

windres my.rc -O coff -o my.res

你可以使用:

windres my.rc my.o

ICON resource

windres man page

Example

【讨论】:

我无法在 windres my.rc my.o 之后将 my.o 与 MinGW 的 g++ 链接(一些与 WinMain 相关的错误消息),但 windres my.rc -O coff -o my.res 路径工作正常。 .o(= COFF 自动;为了清楚起见,我将其命名为 my.res.o)对我有用。实际上,MSVC 生成的 .res 文件具有不同的格式,因此在 .res 中使用 COFF 似乎很奇怪/不兼容【参考方案3】:

试试资源黑客。我能够在 Linux (WSL) 中交叉编译我的项目并从主页上的徽标生成一个图标。只需要一种简单的方法将其嵌入到 exe 中,并且该程序运行良好。 Resource Hacker by Angus Johnson

【讨论】:

这更容易。刚刚打开.exe,点击“添加二进制或图像资源”,打开.ico文件,保存。

以上是关于andriod 源码编译时,如何添加一个可执行文件到文件系统中的主要内容,如果未能解决你的问题,请参考以下文章

如何向 mingw-gcc 编译的可执行文件添加图标?

go build命令参数详解

ubuntu1204搭建Andriod4.0环境时了解的相关扩展信息

CMake 添加和删除宏定义以编译共享库/可执行文件

Andriod——区别DVM与JVM

Andriod——区别DVM与JVM