1. 程式人生 > >如何單獨編譯Android原始碼中的模組

如何單獨編譯Android原始碼中的模組

      第一次下載好Android原始碼工程後,我們通常是在Android原始碼工程目錄下執行make命令,經過漫長的等待之後,就可以得到Android系統映象system.img了。以後如果我們修改了Android原始碼中的某個模組或者在Android原始碼工程新增一個自己的模組,是不是還是執行make命令呢?答案是否定的,Google為我們準備了另外的命令來支援編譯單獨的模組,以及重新打包system.img的命令。在繼續學習Android原始碼之前,就讓我們先來看看這個命令吧。

《Android系統原始碼情景分析》一書正在進擊的程式設計師網(http://0xcc0xcd.com)中連載,點選進入!

      一. 首先在Android原始碼目錄下的build目錄下,有個指令碼檔案envsetup.sh,執行這個指令碼檔案後,就可以獲得一些有用的工具:

      [email protected]:~/Android$ .  ./build/envsetup.sh

注意,這是一個source命令,執行之後,就會有一些額外的命令可以使用:

      - croot: Changes directory to the top of the tree.

      - m: Makes from the top of the tree.      - mm: Builds all of the modules in the current directory.
      - mmm: Builds all of the modules in the supplied directories.      - cgrep: Greps on all local C/C++ files.      - jgrep: Greps on all local Java files.      - resgrep: Greps on all local res/*.xml files.      - godir: Go to the directory containing a file.      這些命令的具體用法,可以在命令的後面加-help來檢視,這裡我們只關注mmm命令,也就是可以用它來編譯指定目錄的所有模組,通常這個目錄只包含一個模組。      二. 使用mmm命令來編譯指定的模組,例如Email應用程式:      
[email protected]
:~/Android$ mmm packages/apps/Email/
編譯完成之後,就可以在out/target/product/generic/system/app目錄下看到Email.apk檔案了。Android系統自帶的App都放在這具目錄下。另外,Android系統的一些可執行檔案,例如C編譯的可執行檔案,放在out/target/product/generic/system/bin目錄下,動態連結庫檔案放在out/target/product/generic/system/lib目錄下,out/target/product/generic/system/lib/hw目錄存放的是硬體抽象層(HAL)介面檔案,後面的文章裡面,我們會陸續提及到,敬請關注。      三. 編譯好模組後,還要重新打包一下system.img檔案,這樣我們把system.img執行在模擬器上時,就可以看到我們的程式了。      [email protected]:~/Android$ make snod      [email protected]:~/Android$ emulator這樣一切就搞定了。

相關推薦

如何單獨編譯Android原始碼模組

      第一次下載好Android原始碼工程後,我們通常是在Android原始碼工程目錄下執行make命令,經過漫長的等待之後,就可以得到Android系統映象system.img了。以後如果我們修改了Android原始碼中的某個模組或者在Android原始碼工程新增一個

單獨編譯Android原始碼模組

第一次下載好Android原始碼工程後,我們通常是在Android原始碼工程目錄下執行make命令,經過漫長的等待之後,就可以得到Android系統映象system.img了。以後如果我們修改了Android原始碼中的某個模組或者在Android原始碼工程新增一個自己的模組

單獨編譯Android原始碼的某個模組

       眾所周知,編譯一個韌體要花很久時間。有時只改系統的某個模組的某個功能,如修改系統Setting原始碼的一些地方,這時就沒有必要再整個系統編譯一遍,這時就需要用到模組編譯(前提是系統已經編譯過一遍)。       下面以編譯A20平臺原始碼中的一個apk為例。

編譯Android原始碼過程遇到的錯誤

編譯環境:(1)ubuntu15.04(2)jdk1.6 JDK環境設定:     export JAVA_HOME=/home/zr/jdk1.6.0_45        export JRE_HOME=${JAVA_HOME}/jre       export CL

Android原始碼增加模組

Android build system就是編譯系統的意思  在我們需要向自己編譯的原始碼中增加模組的時候,需要一些規則,當然這個規則都是類似的。 Android.mk檔案解析  讓我們來看一個 Android.mk 檔案的樣子  Java程式碼 LOCAL_PATH := $(call my-dir)i

Android原始碼如何吧so庫打包編譯進入apk, 整合第三方庫(jar和so庫)

整合第三方so和jar包 include $(CLEAR_VARS) #jar包編譯            LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=securitysdk:libs/hello.jar #64和32系統選擇不同的庫 if

Android原始碼編譯aidl

為什麼要這麼做? 1、因為專案中一些功能需要呼叫系統原始碼中的一些介面,上層無法訪問。所以想一些需要呼叫系統介面的方法用原始碼編譯,然後使用aidl暴露出介面,供上層呼叫。 準備工作: 1、應用端

編譯Android原始碼過程出現的錯誤

錯誤1:Can't locate Switch.pm in @INC (you may need to install the Switch module) (@INC contains: /etc/perl /usr/local/lib/perl/5.18.2 /usr/

Tensorflow lite android原始碼 編譯整合

之前一直是在使用的是tensorflow mobile,來作為模型的執行環境。但是,tensoflow mobile的libtensorflow_inference.so有19MB,load到記憶體裡以後,會佔用較多的記憶體。。。測試看下來,大概佔用20M,加上模型佔用記憶體

Android原始碼引用@hide類出現引用異常的問題error: cannot find symbol

    自己開發的APP在Android中使用一些系統隱藏的類         編譯的時候報錯,出現如下異常 error: cannot find symbol import android.net.EthernetM

MacOS X 編譯Android原始碼

MacOS X 編譯Android原始碼 本篇文章已授權微信公眾號 guolin_blog (郭霖)獨家釋出 由於在工作中遇到了很多關於android內部實現的問題,雖然後面都解決了,有些是看了原始碼實現,有些原始碼看不了只能去google,百度。這就導致了對於很多的問題其實是知其然不知其

android原始碼採用Unix Domain Socket跨程序通訊

      今天看android原始碼Zygote程序啟動流程,無意間發現使用了一種檔案描述符作為跨程序通訊的地址,於是仔細研究了一下:  從字面來理解是傳統的Socket使用,但個人覺得不應該是,特地找資料學習了一下,下面的介紹比較詳細到位。又進一步瞭解一下,使用的其實是

AndroidStudio編譯Taglib原始碼遇到的一些問題

系統Ubuntu18.04 AndroidStudio版本3.2.1 NDK:android-ndk-r10e,未使用最新的ndk,貌似最新的有些問題 Taglib是最新的taglib-1.11.1 第一次在AndroidStuido中編譯第三方庫,遇到的主要問題如下

Android 原始碼 寫後臺應用

在Android 開機啟動的時候會有一些後臺程序跑起來,當然我麼也可以定製 在vendor 的目錄中放置 一個Android.mk檔案還有一個server.cpp,標頭檔案配置 makefile配置 # LOCAL_PATH變數。它用於在開發樹中查詢原始檔 my

Android 原始碼的設計模式

面向物件的六大原則 單一職責原則   所謂職責是指類變化的原因。如果一個類有多於一個的動機被改變,那麼這個類就具有多於一個的職責。而單一職責原則就是指一個類或者模組應該有且只有一個改變的原因。通俗的說,即一個類只負責一項職責,將一組相關性很高的函式、資料封裝到一個類中。

android原始碼的設計模式

建造者模式 建造者模式最明顯的標誌就是Build類,而在Android中最常用的就是Dialog的構建,Notification的構建也是標準的建造者模式。 建造者模式很好理解,如果一個類的構造需要很多引數,而且這些引數並不都是必須的,那麼這種情況下就比較適合Builder。 比如構建一

android 原始碼預置帶.so檔案的APK

有原始碼有.so預置apk: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(call all-java-files

Android系統移植與平臺開發(五)- 編譯Android原始碼

2.3編譯Android原始碼 Android原始碼體積非常龐大,由Dalvik虛擬機器、Linux核心、編譯系統、框架程式碼、Android定製C庫、測試套件、系統應用程式等部分組成,在編譯Android原始碼之前,必須要先掌握Android原始碼的組成。 2.3.1An

編譯android原始碼7---android 原始碼目錄結構

Android  |-- Makefile (全域性的Makefile) |-- bionic                        (Android 標準C執行支援庫) |-- bootable                (Android核心載入器

Mac編譯android原始碼的坑

Mac編譯android原始碼 因為專案需要在程式碼線上編譯app,想在mac上直接編譯,省時省力。不過,配置環境過程中遇到不少坑,現在逐一記錄下來。 主要有以下幾點: andr