不编译源码的情况下
1. 有没有已经编译好的android系统源码就是直接可以看的,在linux下下载了还要编译一下才可以看吗
源码不需要编译就可以看的,只是如果不在已编译的源码环境下编译自己的工程,就不能成功。意思是说,如果你要在源码环境下开发自己的功能,也就是要对源码进行修改或添加自己个性化的东西,就需要先编译源码。如果单纯只是想看源码,不编译也是可以的。
2. 源代码未编译什么情况
摘要 因为我们现在写的代码都是机器不能识别的语言,所以需要编译器编译后变成机器可以识别的语言才能运行。
3. 你好,软件的源代码可以看到吗比如说gcc编译器,我想改进它必须要知道她的源代码吗,然后修改是吗
编译之后的软件,是不能看到源码的。
有反编译类的软件,但效果很一般,达不到反编译源码再修改后编译的程度。
修改gcc编译器之类的软件,是个很复杂的工作,在没有源码的情况下修改,几乎不可完成。
另外有些软件,支持二次开发接口的,可以做允许范围之内的调整,但核心部分没有哪个软件可以。
4. 怎样在不改动源代码的情况下在makefile中将头文件include进去
不难
首先你在makefile里面找到你编译这个m.c
的编译命令,
假如是
gcc
m.c
-o
m,
你只需要在gcc命令后面加上要引入的
头文件
,如下:
gcc
m.c
-o
m
-include
c.h
c.h和m.c在同一目录下。
明白了没,gcc
的include这个选项是在编译时手动引入头文件。
5. 源代码未编译什么情况
这些语言在写完后缀名是.c,这个时候要先编译成.h,才能运行。
所以你保存后要先点编译,然后才能点运行。
编译键一般在运行键旁边啦,你点击了再看行不行,有时如果你的文件有错误,编译的时候会报错出现error和警告,只有程序是正确的,你才能编译通过,再运行
七爪
6. 怎么在没有源代码的情况下修改一个软件用的MFC。反编译还是有别的办法
不用反编译,用钩子函数就可以。windows系统打补丁就是用这种技术。大概是设计一个新的dll库文件挂在原来的程序上,实现一些功能的替换
7. 如何编译别人的易语言程序。在没有源码的情况下
你所要做的应该叫反编译!程序换个名字之类的不用反编译的,用eXeScope、ResHacker等软件就能做到。但如果加壳了就不太容易了。
8. 如何在不影响原有aapt源码的情况下编译定制版aapt
正常情况下,编译aapt时我们使用的命令是
make aapt11
改造后,我们希望该命令可以编译出官方的aapt,然后通过另一个命令编译出定制版的aapt,这里让其命名为vaapt,当然这个前缀随意,你喜欢就好。最终编译的命令就是
make vaapt11
命令有了,模块在哪里呢?很简单,直接在aapt同级目录下拷贝一个aapt,重名名为vaapt。最终目录结构如图所示
我们还需要修改makefile文件,让其编译出vaapt,依赖的内容也是vaapt,makefile原内容为:
# ==========================================================
# Build the host static library: libaapt
# ==========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libaapt
LOCAL_MODULE_HOST_OS := darwin linux windows
LOCAL_CFLAGS := -Wno-format-y2k -DSTATIC_ANDROIDFW_FOR_TOOLS $(aaptCFlags)
LOCAL_CPPFLAGS := $(aaptCppFlags)
LOCAL_CFLAGS_darwin := -D_DARWIN_UNLIMITED_STREAMS
LOCAL_SRC_FILES := $(aaptSources)
LOCAL_STATIC_LIBRARIES := $(aaptHostStaticLibs)
LOCAL_STATIC_LIBRARIES_windows := $(aaptHostStaticLibs_windows)
include $(BUILD_HOST_STATIC_LIBRARY)
# ==========================================================
# Build the host executable: aapt
# ==========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := aapt
LOCAL_MODULE_HOST_OS := darwin linux windows
LOCAL_CFLAGS := $(aaptCFlags)
LOCAL_CPPFLAGS := $(aaptCppFlags)
LOCAL_LDLIBS_darwin := $(aaptHostLdLibs_darwin)
LOCAL_LDLIBS_linux := $(aaptHostLdLibs_linux)
LOCAL_SRC_FILES := $(aaptMain)
LOCAL_STATIC_LIBRARIES := libaapt $(aaptHostStaticLibs)
LOCAL_STATIC_LIBRARIES_windows := $(aaptHostStaticLibs_windows)
include $(BUILD_HOST_EXECUTABLE)
# ==========================================================
# Build the host tests: libaapt_tests
# ==========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libaapt_tests
LOCAL_CFLAGS := $(aaptCFlags)
LOCAL_CPPFLAGS := $(aaptCppFlags)
LOCAL_LDLIBS_darwin := $(aaptHostLdLibs_darwin)
LOCAL_LDLIBS_linux := $(aaptHostLdLibs_linux)
LOCAL_SRC_FILES := $(aaptTests)
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_STATIC_LIBRARIES := libaapt $(aaptHostStaticLibs)
LOCAL_STATIC_LIBRARIES_windows := $(aaptHostStaticLibs_windows)
include $(BUILD_HOST_NATIVE_TEST)
可以看到LOCAL_MODULE的值都是aapt相关的,比如static library对应的值是libaapt,host
executable对应的值是aapt,host
tests对应的值是libaapt_tests,还有LOCAL_STATIC_LIBRARIES的值也是依赖static
library,其值为libaapt,我们需要将这几个值修改为vaapt相关的,即在原来的值aapt前面加个v,对应修改为libvaapt、vaapt、libvaapt_tests、libvaapt。修改后的内容如下:
# ==========================================================
# Build the host static library: libaapt
# ==========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libvaapt
LOCAL_MODULE_HOST_OS := darwin linux windows
LOCAL_CFLAGS := -Wno-format-y2k -DSTATIC_ANDROIDFW_FOR_TOOLS $(aaptCFlags)
LOCAL_CPPFLAGS := $(aaptCppFlags)
LOCAL_CFLAGS_darwin := -D_DARWIN_UNLIMITED_STREAMS
LOCAL_SRC_FILES := $(aaptSources)
LOCAL_STATIC_LIBRARIES := $(aaptHostStaticLibs)
LOCAL_STATIC_LIBRARIES_windows := $(aaptHostStaticLibs_windows)
include $(BUILD_HOST_STATIC_LIBRARY)
# ==========================================================
# Build the host executable: aapt
# ==========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := vaapt
LOCAL_MODULE_HOST_OS := darwin linux windows
LOCAL_CFLAGS := $(aaptCFlags)
LOCAL_CPPFLAGS := $(aaptCppFlags)
LOCAL_LDLIBS_darwin := $(aaptHostLdLibs_darwin)
LOCAL_LDLIBS_linux := $(aaptHostLdLibs_linux)
LOCAL_SRC_FILES := $(aaptMain)
LOCAL_STATIC_LIBRARIES := libvaapt $(aaptHostStaticLibs)
LOCAL_STATIC_LIBRARIES_windows := $(aaptHostStaticLibs_windows)
include $(BUILD_HOST_EXECUTABLE)
# ==========================================================
# Build the host tests: libaapt_tests
# ==========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libvaapt_tests
LOCAL_CFLAGS := $(aaptCFlags)
LOCAL_CPPFLAGS := $(aaptCppFlags)
LOCAL_LDLIBS_darwin := $(aaptHostLdLibs_darwin)
LOCAL_LDLIBS_linux := $(aaptHostLdLibs_linux)
LOCAL_SRC_FILES := $(aaptTests)
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_STATIC_LIBRARIES := libvaapt $(aaptHostStaticLibs)
LOCAL_STATIC_LIBRARIES_windows := $(aaptHostStaticLibs_windows)
include $(BUILD_HOST_NATIVE_TEST)
这时候执行编译命令make
vaapt,完全可以编译出一个vaapt命名的可执行文件。但是事情还没有完,aapt的源码依赖了androidfw下的部分源码,而恰恰这部分源码也可能需要修改,因此我们也需要做同样的事,在同目录下复制一份androidfw为vandroidfw。这个文件夹有两份,一份是头文件,一份是cpp文件,对应在不同的目录。首先来看头文件的目录,在include下
然后是实现的cpp的目录,在libs下
同样的需要修改makefile文件,原文件内容是
# For the host
# =====================================================
include $(CLEAR_VARS)
LOCAL_MODULE:= libandroidfw
LOCAL_MODULE_HOST_OS := darwin linux windows
LOCAL_CFLAGS += -DSTATIC_ANDROIDFW_FOR_TOOLS
LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code
LOCAL_SRC_FILES:= $(hostSources)
LOCAL_C_INCLUDES := external/zlib
include $(BUILD_HOST_STATIC_LIBRARY)
# For the device
# =====================================================
include $(CLEAR_VARS)
LOCAL_MODULE:= libandroidfw
LOCAL_SRC_FILES:= $(deviceSources)
LOCAL_C_INCLUDES := \
system/core/include
LOCAL_STATIC_LIBRARIES := libziparchive libbase
LOCAL_SHARED_LIBRARIES := \
libbinder \
liblog \
libcutils \
libgui \
libutils \
libz
需要将LOCAL_MODULE的值从libandroidfw修改为libvandroidfw。
这时候其实还是有问题的,因为文件里的头文件的引用还是androidfw的,会报找不到的错误,因此需要将include/vandroidfw和libs/vandroidfw下的文件内容中头文件的include部分的代码和androidfw相关的都改成vandroidfw。就像这样
这是一个相对痛苦且繁琐的步骤,只要耐住性子改了就可以了,不要遗漏即可。
然后回到vaapt的makefile文件。将对androidfw的引用改成vandroidfw,原内容为
aaptHostStaticLibs := \
libandroidfw \
libpng \
liblog \
libutils \
libcutils \
libexpat \
libziparchive-host \
libbase
修改后的内容为
aaptHostStaticLibs := \
libvandroidfw \
libpng \
liblog \
libutils \
libcutils \
libexpat \
libziparchive-host \
libbase
至此,就完成了一个自定义的aapt的模块的新建和修改,之后只需要修改vaapt下的源码以及vandroidfw下的源码,即可得到自定义的aapt,而不改变原有aapt的源码内容。如果需要编译官方的aapt,只需要用make aapt编译,编译我们自定义的aapt,则使用make vaapt编译,做到了一定的隔离,互不影响。当然如果你乐意,完全可以对vaapt和vandroidfw目录使用git进行版本控制,这样也就能看到我们历史修改了什么内容。
最后推荐一个可以用于差异比较的软件Beyond Compare,跨平台的,windows,mac,linux都有,当然这是一个收费软件。。。所以你懂的。可以用它比较两个目录的aapt之间的差异,效果如下。
9. 源代码未编译,是否立刻编译这个是出了什么问题
试一下在int main()的括号里添个 void 了,或者同时有另一个程序在运行