導航:首頁 > 源碼編譯 > 安卓系統源碼編譯清除

安卓系統源碼編譯清除

發布時間:2023-08-29 13:31:51

❶ 如何單獨編譯android源碼中的模塊

1.make 模塊名稱
需要查看Android.mk文件的LOCAL_PACKAGE_NAME變數。
2.mmm命令
用於在源碼根目錄編譯指定模塊,參數為模塊的相對路徑。只能在第一次編譯後使用。比如要編譯Phone部分源碼,需要在終端中執行以下命令:
$mmm packages/apps/phone
3.mm命令
用於在模塊根目錄編譯這個模塊。只能在第一次編譯後使用。例如要編譯Phone部分源碼,需要在終端中執行以下命令:
$cd packages/apps/phone
$mm
註:mmm和mm命令必須在執行「.build/envsetup.sh」之後才能使用,並且只編譯發生變化的文件。如果要編譯模塊的所有文件,需要-B選項,例如mm -B。

❷ 反編譯Android APK的具體步驟是怎樣的

1、配置好java環境變數,下載:apktool 解壓的文件放在C盤根目錄的apktool文件夾里(apktool文件夾自己創立)
2打開命令提示符,(開始-運行-輸入cmd)
3輸入:cd \apktool 系統指令到了apktool文件夾(這里就是為什麼要把解壓的apktool解壓的文件放到apktool文件夾的原因,當然你也可以自命名文件夾的名稱,那麼比如arc,那麼指令就變成了:cd \arc 前提是你必須把apktool解壓的文件放到這個文件夾裡面)
4使用RE管理器把系統裡面的framework-res.apk 與 SystemUI.apk 提取出來放在apktool文件夾裡面

5 如果只是想反編譯framework-res.apk

輸入apktool if framework-res.apk(框架的建立)
6開始最重要的反編譯,輸入指令,apktool d framework-res.apk

(反編輯的APK一定要用沒換過圖片的,否則回編輯失敗)
7最後反編譯完成

修改代碼完成後,輸入代碼:apktool d framework-res 即可完成回編譯
8回編譯後的新的 apk在framework/dis 文件夾裡面
9如果反編譯的是系統文件,比如,SystemUI.apk 那麼必須進行掛載框架,反編譯時,必須敲入一下命令:(然後再重復7-9步驟)
apktool if framework-res.apk
apktool if SystemUI.apk

10對於三星手機(比如9100、9108/9100G),如果反編譯SystemUI.apk要敲入一下命令進行框架掛載apktool if framework-res.apk
apktool if twframework-res.apk
apktool if SystemUI.apk
11回編譯的命令是 apktool b XXX (沒有後面的apk後綴)反編譯的命令是 apktool d xxx (有後面的apk)

❸ 怎麼在ubuntu上編譯android源碼

步驟一:
安裝Ubuntu系統。我們既可以通過虛擬機的方式安裝Ubuntu,也可以直接在電腦上安裝,為了獲得更好的linux操作體驗,我建議直接在電腦上面安裝Ubuntu,我在自己電腦上安裝了win10和Ubunut Server14.04雙系統,使用的時候可以根據自己的需要隨時切換系統,非常方便。關於如何搭建雙系統,網上有很多教程,我就不在此敘述了,但是我想說明的一點是在安裝Ununtu的時候,分配給Ubuntu的磁碟空間一定要盡可能大一點,至少60G,我分配了105G,編譯完成之後還剩下50多G,也就是說差不多用了近50G的空間,所以安裝Ubuntu的時候一定得分配大一點的磁碟空間,不然編譯會因為空間不足而中斷。
步驟二:
搭建好Ubuntu系統之後,我們需要下載一份Android6.0的源碼,網上很多文章都介紹了如何通過repo的方式來下載源碼,但是通過這種方式下載速度可能並不是很理想,直接下載網路雲的Android6.0源碼,
因為Android6.0的源碼所佔空間非常大,所以上傳者把Android源碼分成了很多個文件,待全部下載完畢之後,我們可以通過命令把這些分開的文件合並為一個文件。
步驟三:
如果我們是在Windows上下載的源碼,那麼當我們打開Ubuntu之後,要做的第一件事請就是把Windows中的Android源碼拷貝到Ubuntu系統下面,我直接利用復制粘貼的方式將源碼拷貝到了Ubuntu的Home目錄下面,拷貝之後的目錄結構Home/android6_r1/各個分開的源碼文件。
步驟四:
合並這些被分開的源碼文件。我們按下鍵盤上的ctrl + alt + T打開控制台,通過cd命令進入到Home/android6_r1/目錄下面,然後執行命令:cat Android6_r1_* > M.tgz,不用多久,在Home/android6_r1/目錄下面就會生成一個新的文件——M.tgz,M.tgz就是合並之後的壓縮文件。
步驟五:
解壓步驟四生成的壓縮文件。同樣是在Home/android6_r1/目錄下面,我們在控制台執行命令:tar zxvf M.tgz,開始解壓。解壓的過程大概需要20分鍾左右的時間,請耐心等待。解壓好了之後,在Home/android6_r1/會生成一個mydroid的文件夾,這個文件夾就是Android源碼的根文件夾了,裡面有abi、devices、hardware、packages、sdk、art等文件夾和文件。
步驟六:
安裝編譯源碼所需要的軟體。在控制台中我們通過cd..命令退回到Unbuntu用戶的根目錄下,然後依次執行以下命令:
sudo apt-get update
sudo apt-get install openjdk-7-jdk
sudo update-alternatives --config java
sudo update-alternatives --config javac
以上命令每一條都必須分開單獨執行,目的是為了獲取1.7版本的jdk並設置環境變數。當我們安裝完Ubuntu之後可能會自帶一個jdk,但是如果用自帶的jdk編譯Android源碼很可能會提示jdk版本不符合要求的錯誤,因此我們需要重新下載1.7版本的jdk,我用openjdk-7-jdk編譯未出現任何問題。
接下來繼續執行以下命令,同樣每一行都是分開單獨執行的:
sudo apt-get install git gnupg flex bison gperf build-essential
sudo apt-get install zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386
sudo apt-get install libgl1-mesa-dev g++-multilib mingw32 tofrodos
sudo apt-get install python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
以上命令主要是安裝編譯源碼時需要用到的各種軟體,如果沒有安裝這些軟體,編譯的過程中會提示缺少必要的軟體而無法繼續編譯,因此,在正式編譯源碼之前,一定要先安裝這些軟體。
步驟七:
開始編譯。在控制台中通過cd命令進入到Home/android6_r1/mydroid/目錄下,然後執行命令:source build/envsetup.sh,導入編譯Android源碼所需的環境變數和其它參數。
步驟八:
在控制台中執行命令:lunch,運行命令之後會提示我們選擇編譯目標。這里我選擇的的默認目標,即aosp_arm_eng。
步驟九:
在控制台中執行命令:make -j8,開始編譯。注意,make -j8命令中的數字8和我們電腦的CPU核心數以及線程數有關系,一般這個數字的數值最大不能超過CPU線程數的2倍,例如我電腦的處理器是i5 6200U,為雙核四線程,因此編譯Android源碼的時候,我可以設置的最大工作線程數量為4 * 2 = 8。在執行make命令的時候我們應該根據自己的CPU參數設置合理的工作線程數值。
以上步驟執行完之後,就是一段非常漫長的等待了,我從中午十二點多開始編譯,一直到晚上九點多編譯完成,整個編譯過程耗時九個多小時,幸好我的運氣還不錯,編譯過程中沒有出現任何錯誤,只是中途意外中斷了一次,但是Android源碼是可以接著上次中斷的位置繼續編譯的,已經編譯的部分不會重復編譯,因此並未對我造成大的影響。同志們,我想說的是,編譯的過程中一定要有耐心喲!
整個源碼編譯完成之後,如果提示如下信息,那麼Congratulations, you are successful!!!

❹ 如何編譯一個精簡的Android系統

本次試驗使用的android源碼是4.2,編譯的架構是mini-mips。

一、所做的工作
1、修改build/target/proct/mini.mk,去掉一些不必要的模塊(例如Phone、DownloadManager等)
2、修改SystemServer.java,屏蔽一些service,讓系統能夠啟動起來(例如,Location Manager、Telephony Registry)
3、修改dalvik/vm/native/dalvik_system_Zygote.cpp,注釋掉因為檢查不到外部存儲而導致dalvik abort的地方 (這是googel的一個bug,在2013年1月份已解決,如果用這以後的代碼不用修改此處)
4、修改WindowManagerService.java,把發送BOOT_TIMEOUT消息的時間改為0(之前為30秒)

二、系統優化後的效果(驗證工作均在mips模擬器上進行)
1、節省運行內存,下面是全編譯與mini編譯的內存使用狀態的對比
1)full build
MemTotal: 499360 kB
MemFree: 242064 kB
2)mini build
MemTotal: 499360 kB
MemFree: 395192 kB

2、縮短開機啟動時間
在虛擬機上的啟動時間
1)full build-29秒
2)mini build-14秒

3、只啟動home程序,其餘的應用程序均被移除

三、保留android的開發環境
1、adb,ddms,apkinstall等,都能正常工作
2、在eclipse中編寫的android應用程序能夠運行在該mini-android之上

四、開機自動啟動指定應用程序
本次測試使用Gallery.apk應用程序,修改其源碼後可以實現隨系統的啟動而自動啟動的功能。

❺ android源碼怎麼編譯生成recovery.img

recovery.img生成過程
L630-L637 依賴關系
(From: build/core/Makefile)630 $(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) /631 $(INSTALLED_RAMDISK_TARGET) /632 $(INSTALLED_BOOTIMAGE_TARGET) /633 $(recovery_binary) /634 $(recovery_initrc) $(recovery_kernel) /635 $(INSTALLED_2NDBOOTLOADER_TARGET) /636 $(recovery_build_prop) $(recovery_resource_deps) /637 $(RECOVERY_INSTALL_OTA_KEYS)

INSTALLED_RECOVERYIMAGE_TARGET 為我們的編譯目標:

584 INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img

它依賴很多其它目標:
1.MKBOOTFS, MINIGZIP, MKBOOTIMG,PC端工具軟體:(From build/core/config.mk)265 MKBOOTFS := $(HOST_OUT_EXECUTABLES)/mkbootfs$(HOST_EXECUTABLE_SUFFIX)266 MINIGZIP := $(HOST_OUT_EXECUTABLES)/minigzip$(HOST_EXECUTABLE_SUFFIX)267 MKBOOTIMG := $(HOST_OUT_EXECUTABLES)/mkbootimg$(HOST_EXECUTABLE_SUFFIX)

2.INSTALLED_RAMDISK_TARGET,標准根文件系統 ramdisk.img:

326 BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img328 # We just build this directly to the install location.329 INSTALLED_RAMDISK_TARGET := $(BUILT_RAMDISK_TARGET) 3.INSTALLED_BOOTIMAGE_TARGET, 即boot.img,標准內核及標准根文件系統:362 INSTALLED_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img

4. recovery_binary, Recovery可執行程序,源碼位於:bootable/recovery

590 recovery_binary := $(call intermediates-dir-for,EXECUTABLES,recovery)/recovery

5. recovery_initrc,recovery模式的init.rc, 位於 bootable/recovery/etc/init.rc

586 recovery_initrc := $(call include-path-for, recovery)/etc/init.rc

6. recovery_kernel, recovery 模式的kernel, 同標准內核

587 recovery_kernel := $(INSTALLED_KERNEL_TARGET) # same as a non-recovery system

7.INSTALLED_2NDBOOTLOADER_TARGET,我們不用。

8. recovery_build_prop, recovery 模式的build.prop, 同標准模式。589 recovery_build_prop := $(INSTALLED_BUILD_PROP_TARGET)

9. recovery_resource_deps, recovery 模式使用的res, 位於:recovery/custom/{proct_name}/res, 以及設備自定義部分(我們沒用到)

591 recovery_resources_common := $(call include-path-for, recovery)/custom/$(TARGET_PRODUCT)/res592 recovery_resources_private := $(strip $(wildcard $(TARGET_DEVICE_DIR)/recovery/res))593 recovery_resource_deps := $(shell find $(recovery_resources_common) 594 $(recovery_resources_private) -type f) 10. RECOVERY_INSTALL_OTA_KEYS, ota 密鑰:

618 # Generate a file containing the keys that will be read by the619 # recovery binary.620 RECOVERY_INSTALL_OTA_KEYS := /621 $(call intermediates-dir-for,PACKAGING,ota_keys)/keysL638-L655 准備內容
638 @echo ----- Making recovery image ------639 rm -rf $(TARGET_RECOVERY_OUT)640 mkdir -p $(TARGET_RECOVERY_OUT)641 mkdir -p $(TARGET_RECOVERY_ROOT_OUT)642 mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/etc643 mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/tmp

准備recovery目錄:out/target/proct/{proct_name}/recovery 及其子目錄:

./root

./root/etc

./root/tmp644 echo Copying baseline ramdisk...645 cp -R $(TARGET_ROOT_OUT) $(TARGET_RECOVERY_OUT)646 echo Modifying ramdisk contents...647 rm -rf $(TARGET_RECOVERY_ROOT_OUT)/res

從標准根文件系統拷貝所有文件, 刪除其res 目錄。

648 cp -f $(recovery_initrc) $(TARGET_RECOVERY_ROOT_OUT)/649 cp -f $(recovery_binary) $(TARGET_RECOVERY_ROOT_OUT)/sbin/ 拷貝recovery 模式的核心文件 init.rc 及 recovery 650 cp -rf $(recovery_resources_common) $(TARGET_RECOVERY_ROOT_OUT)/651 $(foreach item,$(recovery_resources_private), /652 cp -rf $(item) $(TARGET_RECOVERY_ROOT_OUT)/)653 cp $(RECOVERY_INSTALL_OTA_KEYS) $(TARGET_RECOVERY_ROOT_OUT)/res/keys 拷貝資源文件及密鑰文件。 654 cat $(INSTALLED_DEFAULT_PROP_TARGET) $(recovery_build_prop) /655 > $(TARGET_RECOVERY_ROOT_OUT)/default.prop 生成屬性文件 default.prop, 它包含了標准根文件系統的default.prop (out/target/proct/{proct_name}/root/default.prop)以及system分區的build.prop (out/target/proct/{proct_name}/system/build.prop) L656-L661 最終生成recovery.img
656 $(MKBOOTFS) $(TARGET_RECOVERY_ROOT_OUT) | $(MINIGZIP) > $(recovery_ramdisk) 壓縮recovery根文件系統 657 build/quacomm/mkimage $(PRODUCT_OUT)/ramdisk-recovery.img RECOVERY > $(PRODUCT_OUT)/ramdisk_recovery.img 加一個標識頭(RECOVERY) 658 mv $(PRODUCT_OUT)/ramdisk_recovery.img $(PRODUCT_OUT)/ramdisk-recovery.img659 $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) --output $@660 @echo ----- Made recovery image -------- $@661 $(hide) $(call assert-max-image-size,$@,$(BOARD_RECOVERYIMAGE_PARTITION_SIZE),raw)

和內核一起,生成recovery.img附:Recovery 根文件系統目錄結構


$ tree

.

├── advanced_meta_init.rc

├── data

├── default.prop

├── dev

├── etc

├── init

├── init.factory.rc

├── init.goldfish.rc

├── init.quacomm.rc

├── init.rc

├── meta_init.rc

├── proc

├── res

│ ├── images

│ │ ├── icon_error.png

│ │ ├── icon_installing.png

│ │ ├── indeterminate1.png

│ │ ├── indeterminate2.png

│ │ ├── indeterminate3.png

│ │ ├── indeterminate4.png

│ │ ├── indeterminate5.png

│ │ ├── indeterminate6.png

│ │ ├── progress_empty.png

│ │ └── progress_fill.png

│ └── keys

├── sbin

│ ├── adbd

│ ├── advanced_meta_init

│ ├── meta_init

│ ├── meta_tst

│ └── recovery

├── sys

├── system

└── tmp

安卓怎麼使用修改過的源碼編譯程序

1、Android的文件系統結構是怎樣的,我們安裝的程序放在那裡?
編譯Android源碼之後,在out/target/proct/generic一些文件:
ramdisk.img、system.img、userdata.img、 system、 data、root
其中, system.img是由 system打包壓縮得到的, userdata.img是由 data打包壓縮得到的。

ramdisk.img是模擬器的文件系統,把ramdisk.img解壓出來可知道,ramdisk.img里的文件跟root文件夾的文件基本一樣。模擬器裝載ramdisk.img並解壓到內存,接著分別把system.img和userdata.img掛載到 ramdisk下的system和data目錄。我們編譯出來的應用程序就是放在system/app下的。用戶安裝的程序則是放在data/app下。

2、Android SDK和android源碼能為我們提供什麼工具?
AndroidSDK提供有很多工具,如adb,ddms,emulator,aapt等,並提供kernel-qemu、ramdisk.img、system.img、userdata.img。因此,只要有android SDK,我們就可以在模擬器上把android跑起來。
Android源碼可以編譯出android SDK、adb等工具、android文件系統,以及ADT插件,也就是說,我們可以從android源碼編譯出所有android相關的東西。

3、 把Android源 碼」make」之後會生成許多工具和android文件系統(system.img等),我們又可以使用「makesdk」來生成android SDK,android
SDK也包括有工具和android文件系統(system.img等),而原來安裝的時候我們也安裝了androidSDK,那麼我們在開發時應該使用那些工具和android文件系統呢?

❼ 自己可以編譯安卓源碼嗎

用最新的Ubuntu 16.04,請首先確保自己已經安裝了Git.沒安裝的同學可以通過以下命令進行安裝:

sudo apt-get install git git config –global user.email 「[email protected]」 git config –global user.name 「test」

其中[email protected]為你自己的郵箱.

簡要說明

android源碼編譯的四個流程:1.源碼下載;2.構建編譯環境;3.編譯源碼;4運行.下文也將按照該流程講述.

源碼下載

由於某牆的原因,這里我們採用國內的鏡像源進行下載.
目前,可用的鏡像源一般是科大和清華的,具體使用差不多,這里我選擇清華大學鏡像進行說明.(參考:科大源,清華源)

repo工具下載及安裝

通過執行以下命令實現repo工具的下載和安裝

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

補充說明
這里,我來簡單的介紹下repo工具,我們知道AOSP項目由不同的子項目組成,為了方便進行管理,Google採用Git對AOSP項目進行多倉庫管理.在聊repo工具之前,我先帶你來聊聊多倉庫項目:

我們有個非常龐大的項目Pre,該項目由很多個子項目R1,R2,...Rn等組成,為了方便管理和協同開發,我們為每個子項目創立自己的倉庫,整個項目的結構如下:


這里寫圖片描述

執行完該命令後,再使用make命令繼續編譯.某些情況下,當你執行jack-admin kill-server時可能提示你命令不存在,此時去你去out/host/linux-x86/bin/目錄下會發現不存在jack-admin文件.如果我是你,我就會重新repo sync下,然後從頭來過.

錯誤三:使用emulator時,虛擬機停在黑屏界面,點擊無任何響應.此時,可能是kerner內核問題,解決方法如下:
執行如下命令:

  • ./out/host/linux-x86/bin/emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7

  • 通過使用kernel-qemu-armv7內核 解決模擬器等待黑屏問題.而-partition-size 1024 則是解決警告: system partion siez adjusted to match image file (163 MB >66 MB)

    如果你一開始編譯的版本是aosp_arm-eng,使用上述命令仍然不能解決等待黑屏問題時,不妨編譯aosp_arm64-eng試試.

    結束吧

    到現在為止,你已經了解了整個android編譯的流程.除此之外,我也簡單的說明android源碼的多倉庫管理機制.下面,不妨自己動手嘗試一下.

    閱讀全文

    與安卓系統源碼編譯清除相關的資料

    熱點內容
    路由器多種加密方法 瀏覽:604
    程序員阻止電腦自動彈出定位 瀏覽:166
    如何做伺服器服務商 瀏覽:759
    su剖切命令 瀏覽:726
    devc編譯背景 瀏覽:209
    學習單片機的意義 瀏覽:49
    音頻演算法AEC 瀏覽:911
    加密貨幣容易被盜 瀏覽:82
    蘋果平板如何開啟隱私單個app 瀏覽:704
    空調壓縮機一開就停止 瀏覽:528
    如何下載虎牙app 瀏覽:847
    日語年號的演算法 瀏覽:955
    dev裡面的編譯日誌咋調出來 瀏覽:298
    php函數引用返回 瀏覽:816
    文件夾和文件夾的創建 瀏覽:259
    香港加密貨幣牌照 瀏覽:838
    程序員鼓勵自己的代碼 瀏覽:393
    計算機網路原理pdf 瀏覽:752
    吃雞國際體驗服為什麼伺服器繁忙 瀏覽:94
    php中sleep 瀏覽:491