不編譯源碼的情況下
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 了,或者同時有另一個程序在運行