用最新的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內核問題,解決方法如下:
執行如下命令:
通過使用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源碼的多倉庫管理機制.下面,不妨自己動手嘗試一下.
㈡ android的文件系統怎麼生成
Android源碼編譯後得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系統,system.img包括了主要的包、庫等文件,userdata.img包括了一些用戶數據,emulator載入這3個映像文件後,會把 system和 userdata分別載入到 ramdisk文件系統中的system和 userdata目錄下。因此,我們可以把ramdisk.img里的所有文件復制出來,system.img和userdata.img分別解壓到 ramdisk文件系統中的system和 userdata目錄下。
2、分離Android文件系統出來
system.img,ramdisk.img,userdata.img映像文件是採用cpio打包、gzip壓縮的,可以通過file命令驗證:
file ramdisk.img
輸出:
ramdisk.img: gzip compressed data, from Unix,
last modified: Wed Mar 18 17:16:10 2009
Android源碼編譯後除了生成system.img,userdata.img之外還生成system和 userdata文件夾,因此不需要解壓它們。Android源碼編譯後還生成root文件夾,其實root下的文件與 ramdisk.img 里的文件是一樣的,不過這里還是介紹怎樣把 ramdisk.img解壓出來:
將ramdisk.img復制一份到任何其他目錄下,將其
㈢ 怎麼把安卓軟體源代碼導出來
apk文件復制到SD卡。
命令序列如下:
文件夾到Android的SDK / tools目錄
輸入adb的外殼
進入蘇
輸入cd數據
輸入CD的應用程序
然後,你可以看到所有你安裝apk文件。輸入相應的apk位CP / SD卡/
的apk文件,因此它會被復制了一個空格。
直接進入apk文件擴展名rar格式,你可以看到目錄熟悉的結構,
xml文件後打開是二進制的,不能觀看。
然後他們使用AXMLPrinter2工具android4me。 (你自己網路搜索)
輸入以下命令來解析XML文件出來
此命令是在命令行java的罐子AXMLPrinter2.jar showtimes_list.xml
鑒於此showtimes_list.xml 該showtimes_list.xml生成xml文件,輸入以下命令:
Java的罐子AXMLPrinter2.jar showtimes_list.xml> h.xml
持續到這一點,只看到xml文件的內容,其中工程在java源文件還是看不到,看到classes.dex文件目錄結構,我們需要DEX文件轉換成jar文件。
這里使用的另一種工具dex2jar。 (自搜索下載)解壓後顯示在Windows下
目錄如下:
在命令行中,輸入這個目錄:
在Windows下,輸入以下命令: dex2jar.bat C:\ classes.dex
在C盤運行完成後會多一個classes.dex.dex2jar.jar文件,這就是我們所需要的jar文件。
使用JD-GUI,的jar文件的java代碼的逆向工程。 (請搜索下載)
它進入Windows,Linux和最大三個版本,這里我下載的Windows版本。
解壓,雙擊運行exe文件後,選擇相應的jar文件的Java文件的文件classes.dex.dex2jar.jar顯示反向工程了!
是否可以解決您的問題?
㈣ Android源碼開發記錄-自定義系統服務和jar包生成
創建文件 IMyApiService
文件路徑 frameworks/base/core/java/android/os/
定義了一個計算和的方法。
在frameworks/base/Android.mk
LOCAL_SRC_FILES最後加入
創建文件 MyApiService.java
文件路徑 frameworks/base/core/java/com/android/server/
實現aidl的介面,計算參數和。
(1)Context添加服務名
文件路徑 frameworks/base/core/java/android/content/Context.java
添加
(2)添加啟動服務
文件路徑 frameworks/base/services/java/com/android/server/SystemServer.java
在startOtherServices方法中添加
創建 MyApiManager.java文件
文件路徑 frameworks/base/core/java/android/app/
文件路徑 frameworks/base/core/java/android/app/ContextImpl
添加registerService
記住make update-api
編譯打包完成後,燒寫新的固件。
jar主要為了在android studio編譯環境中MyApiManager報錯導致編譯不通過問題。
也可以導入frameworks jar包或使用反射。
在源碼目錄packages/app下新建MyJar文件夾
並新建目錄com/myapi/(包名)
在目錄com/myapi/新建文件MyApi.java
具體Android.mk語法這里不做解釋,可以自行查閱
在MyApi目錄下直接運行mm編譯命令(記得先source build/envsetup.sh)
待編譯完成後,jar生成目錄
out/target/common/obj/JAVA_LIBRARIES/Myapi_intermediates/javalib.jar
可更改為其他名稱。
㈤ 如何使用Android Studio開發/調試Android源碼
開發調試環境: Ubuntu 14.10,openJdk 1.7,Android Studio 1.0.2,android-5.0.1_r1源碼
由於AS是基於IntelliJ IDEA開發的,所以本文也適用於IntelliJ IDEA
一、修改Android Studio(以下簡稱AS)的內存配置
因為在導入源碼時需要消耗大量內存,所以先修改IDEA_HOME/bin/studio64.vmoptions(x86的機器修改studio.vmoptions)中-Xms和-Xmx的值。文檔中使用的是748m,可自行修改。
二、配置AS的JDK、SDK
在IDE中添加一個沒有classpath的JDK,這樣可以確保使用源碼里的庫文件
在代碼中加斷點,然後選擇'Run'->''或者直接點擊下圖所示的圖標
在彈出的選擇進程(Choose Process)對話框中,勾選顯示所有進程,選擇要DEBUG的代碼所在的進程,點擊OK即可.
六、其它
代碼中很多地方提示CallrequiresAPILevelx.... 出現這個問題是因為AS將我們的工程當做安卓應用程序工程了,且源碼中沒有指定minSdkVersion.
我們只需在源碼根目錄加一個聲明minSdkVersion的AndroidManifest.xml文件即可(分享了一個AndroidManifest.xml)。
也可以考慮使用build.gradle來解決該問題。
㈥ 怎麼在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!!!
㈦ 安卓怎麼使用修改過的源碼編譯程序
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文件系統呢?
㈧ 如何生成安卓源碼的compile_command.json
1、cmake工程生成compile_commands.json文件比較簡單,定義CMAKE_EXPORT_COMPILE_COMMANDS即可。
2、用makefile來編,沒有現成的選項生成compile_commands.json文件。可以使用ctags,gtags等,但跳轉不是很准確。可以通過Bear來生成,而且不需要改動代碼。具體Bear的安裝按照官方文檔來。安裝之後,執行以下命令即可生成:compile_commands.json文件能夠有效提高一些工具(比如說ccls1,vscode2)的代碼跳轉、補全等功能。
㈨ 安卓操作系統源代碼
修改系統文件的源代碼。。。LZ你想太多了,源代碼都是封裝起來的,看不到的。不用編譯器進行反匯編是無法看到的。
㈩ 如何用Android 源碼生成APK簽名文件
我們很多應用需要用到系統簽名,可以通過生成系統簽名文件,在生成apk時使用這個簽名,然後可以安裝到機器中,不需要放在源碼里編譯,重新刷系統。
先附上 50和 20機器人通用的debugkey(圖已經省略)
在Linux環境中,以Android源碼目錄為根目錄。
其中的platform.pk8是製作系統簽名需要的文件。
1、在這個目錄下,執行
生成臨時文件platform.pem
2、接著執行以下命令,將在目錄下生成platform.p12文件,它本質上應該就是一個數字證書
3、然後再執行以下命令出現以下信息,表示成功生成platform.jks
這個名字可以改成debug.keystore. 它的後綴本身是沒有關系,eclipse和AS都識別 platform.jks
4、然後在打包 apk 的時候選擇platform.jks文件,就可以直接用adb命令安裝apk到機器中了。
xxxx表示需要安裝的apk路徑
5、簽名的 Key store password和Key password都是android