導航:首頁 > 程序命令 > mmm命令

mmm命令

發布時間:2022-11-26 13:31:08

㈠ 如何單獨編譯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源碼需要多大的空間

預留100G或以上空間用於存放源碼及編譯產出,本人編譯的KitKat 源碼(帶.repo目錄)+編譯產出在80G左右

㈢ 同款源碼app安裝不了

同款源碼app安裝不了容易覆蓋,解決方法:
1、到需要編譯的apk源碼路徑下打開android.mk文件。
2、在其中加入一行LOCAL_DEX_PREOPT:=false(android4.0.3後默認產生odex文件,這里設置為不產生),保存。
3、再次通過mmm命令編譯後產生的apk文件(只有apk文件)。
4、通過adbpush指令將apk覆蓋到系統的app目錄下後重啟。

㈣ 大牛們是怎麼閱讀 Android 系統源碼的

如果只是想看看一些常用類的實現, 在Android包管理器里把源碼下載下來, 隨便一個IDE配好Source Code的path看就行.
但如果想深入的了解Android系統, 那麼可以看下我的一些簡單的總結.

知識

java
Java是AOSP的主要語言之一. 沒得說, 必需熟練掌握.
熟練的Android App開發
linux
Android基於Linux的, 並且AOSP的推薦編譯環境是Ubuntu 12.04. 所以熟練的使用並了解Linux這個系統是必不可少的. 如果你想了解偏底層的代碼, 那麼必需了解基本的Linux環境下的程序開發. 如果再深入到驅動層, 那麼Kernel相關的知識也要具備.
Make
AOSP使用Make系統進行編譯. 了解基本的Makefile編寫會讓你更清晰了解AOSP這個龐大的項目是如何構建起來的.
Git
AOSP使用git+repo進行源碼管理. 這應該是程序員必備技能吧.
C++
Android系統的一些性能敏感模塊及第三方庫是用C++實現的, 比如: Input系統, Chromium項目(WebView的底層實現).

硬體

流暢的國際網路
AOSP代碼下載需要你擁有一個流暢的國際網路. 如果在下載代碼這一步就失去耐心的話, 那你肯定沒有耐心去看那亂糟糟的AOSP代碼. 另外, 好程序員應該都會需要一個流暢的Google.
一台運行Ubuntu 12.04的PC.
如果只是閱讀源碼而不做太多修改的話, 其實不需要太高的配置.
一台Nexus設備
AOSP項目默認只支持Nexus系列設備. 沒有也沒關系, 你依然可以讀代碼. 但如果你想在大牛之路走的更遠, 還是改改代碼, 然後刷機調試看看吧.
高品質USB線
要刷機時線壞了, 沒有更窩心的事兒了.
軟體

Ubuntu 12.04
官方推薦, 沒得選.
Oracle Java 1.6
注意不要用OpenJDK. 這是個坑, 官方文檔雖然有寫, 但還是單獨提一下.
安裝:
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
sudo apt-get install oracle-java6-set-default

Eclipse
估計會有不少人吐槽, 為什麼要用這個老古董. 其實原因很簡單, 合適. 剛開始搞AOSP時, 為了找到效率最優的工具, 我嘗試過Eclipse, IntelliJ IDEA, Vim+Ctags, Sublime Text+Ctags. 最終結果還是Eclipse. 主要優點有:
有語法分析 (快速准確的類, 方法跳轉).
支持C++ (IntelliJ的C++支持做的太慢了).
嵌入了DDMS, View Hierarchy等調試工具.
為了提高效率, 花5分鍾背下常用快捷鍵非常非常值得.
調整好你的classpath, 不要導入無用的代碼. 因為AOSP項目代碼實在是太多了. 當你還不需要看C++代碼時, 不要為項目添加C++支持, 建索引過程會讓你崩潰.
Intellij IDEA
開發App必備. 當你要調試系統的某個功能是, 常常需要迅速寫出一個調試用App, 這個時候老舊的Eclipse就不好用了. Itellij IDEA的xml自動補全非常給力.
巨人的肩膀

AOSP項目官方: https://source.android.com/source/index.html
這個一定要先讀. 項目介紹, 代碼下載, 環境搭建, 刷機方法, Eclipse配置都在這里. 這是一切的基礎.
Android官方Training: https://developer.android.com/training/index.html
這個其實是給App開發者看的. 但是裡面也有不少關於系統機制的介紹, 值得細讀.
老羅的Android之旅: http://blog.csdn.net/luoshengyang
此老羅非彼老羅. 羅升陽老師的博客非常有營養, 基本可以作為指引你開始閱讀AOSP源碼的教程. 你可以按照博客的時間順序一篇篇挑需要的看.但這個系列的博客有些問題:
早期的博客是基於舊版本的Android;
大量的代碼流程追蹤. 讀文章時你一定要清楚你在看的東西在整個系統處於什麼樣的位置.
Innost的專欄: http://blog.csdn.net/innost
鄧凡平老師也是為Android大牛, 博客同樣很有營養. 但是不像羅升陽老師的那麼系統. 更多的是一些技術點的深入探討.
Android Issues: http://code.google.com/p/android/issues/list
Android官方Issue列表. 我在開發過程中發現過一些奇怪的bug, 最後發現這里基本都有記錄. 當然你可以提一些新的, 有沒有人改就是另外一回事了.
Google: https://www.google.com
一定要能流暢的使用這個工具. 大量的相關知識是沒有人系統的總結的, 你需要自己搞定.
其它

代碼組織
AOSP的編譯單元不是和git項目一一對應的, 而是和Android.mk文件一一對應的. 善用mmm命令進行模塊編譯將節省你大量的時間.
Binder
這是Android最基礎的進程間通訊. 在Application和System services之間大量使用. 你不僅要知道AIDL如何使用, 也要知道如何手寫Binder介面. 這對你理解Android的Application和System services如何交互有非常重要的作用. Binder如何實現的倒不必著急看.
HAL
除非你對硬體特別感興趣或者想去方案公司上班, 否則別花太多時間在這一層.
CyanogenMod
這是一個基於AOSP的第三方Rom. 從這個項目的wiki里你能學到很多AOSP官方沒有告訴你的東西. 比如如何支持Nexus以外的設備.
DIA
這是一個Linux下畫UML的工具, 能夠幫你梳理看過的代碼.
XDA
http://www.xda-developers.com/
這里有最新資訊和最有趣的論壇.

㈤ CAD高手進

外部塊定義的命令是:
AAAAA. Wblock

下列CAD軟體中,不具有參數化造型功能的軟體是:
GGGGG. AutoCAD

DXF格式為:
HHHHH. 圖形交換格式

用PLINE命令繪制的連續線與用LINE命令繪制的連續線的不同點在於:
QQQQQ. PLINE命令繪制的連續線是一個整體,而RRRRR. LINE不SSSSS. 是

下列什麼命令會出現提示「Base Point」?
CCCCCC. SCALE
如果下拉菜單選擇項後帶三個黑點,則表示:
GGGGGG. 這一選擇項會引出一個對話框或者一個AutoLISP程序

什麼命令具有與SAVE相似的功能?
LLLLLL. WBLOCK

設置正交方式的功能鍵是:
QQQQQQ. F8
用PEDIT對多義線進行編輯時,若讓多義線擬合成樣條曲線,需用PEDIT命令中的選項是:
RRRRRR. S
用ARRAY命令時,如需使陣列後的圖形向右上角排列則
VVVVVV. 行間距為正,WWWwww. 列間距為正

假如在AutoCAD系統屏幕上已繪制了一個圖形,現將它作為實體來處理,應使用什麼命令?

FFFFFFF. BLOCK

在AutoCAD中功能鍵F7表示

JJJJJJJ. 網點開關

多線的元素最多可達
MMMMMMM. 16
(註:此題本人不確定)

如果UCS原點在WCS的坐標是(100,100),那麼UCS中的(3,9)在WCS的坐標為:
QQQQQQQ. (103,RRRRRRR. 109)

在AutoCAD中,每一個圖形實體都有哪些圖形屬性?

CCCCCCCC. 層,DDDDDDDD. 顏色,EEEEEEEE. 線型

精確繪圖的主要特點
IIIIIIII. 精確的幾何關系

用LINE命令畫直線,其起點坐標為(10,10),終點坐標為(5,10),則對第二點坐標值的輸入以下哪幾種方式是對的

B. @5<180

D. @-5,0

能實現圖形與文本狀態交換的命令或功能鍵是:

G. F2

可用於保存當前編輯內容的命令是:
M. SAVE
(註:你再查一下QSAVE)

可能出現「Base point or Displacement「的提示的命令有:
N. MOVE
O. COPY

㈥ Android系統編譯指令make 、mmm、mm優缺點比較

Android 系統提供了三種指令用於編譯,他們分別為make、mmm、mm,這三個指令編譯的優缺點如下:

例如:make MediaProvider z這種模式對應於單個模塊的編譯。它的優點是:會把該模塊依賴的其他模塊一起跟著編譯。例如:make libmedia 就會把libmedia依賴庫全部編譯好。當然缺點也會很明顯,那就是它會搜索整個源碼來定位MediaProvider 模塊所使用的Android.mk文件。並且還要判斷該模塊依賴的其他模塊是否有修改。所以編譯時間比較長。

注意:一般的編譯方式都會採用增量編譯,即只編譯發生變化的目標文件,但有時則需要重新編譯所有目標文件,那麼就可以使用make 命令行的-B選項。例如:mm -B 模塊名,或者mm -B、mmm -B。在mm 和 mmm內部也是調用make命令的,而make的-B選項將強制編譯所有的目標文件。

㈦ 如何單獨編譯Android源代碼中的模塊

第一次下載好Android源代碼工程後,我們通常是在Android源代碼工程目錄下執行make命令,經過漫長的等待之後,就可以得到Android系統鏡像system.img了。以後如果我們修改了Android源代碼中的某個模塊或者在Android源代碼工程新增一個自己的模塊,是不是還是執行make命令呢?答案是否定的,Google為我們准備了另外的命令來支持編譯單獨的模塊,以及重新打包system.img的命令。在繼續學習Android源代碼之前,就讓我們先來看看這個命令吧。
一.首先在Android源代碼目錄下的build目錄下,有個腳本文件envsetup.sh,執行這個腳本文件後,就可以獲得一些有用的工具:
[email protected]:~/Android$../build/envsetup.sh
注意,這是一個source命令,執行之後,就會有一些額外的命令可以使用:
-croot:.
-m:Makesfromthetopofthetree.
-mm:.
-mmm:.
-cgrep:GrepsonalllocalC/C++files.
-jgrep:GrepsonalllocalJavafiles.
-resgrep:Grepsonalllocalres/*.xmlfiles.
-godir:.
這些命令的具體用法,可以在命令的後面加-help來查看,這里我們只關注mmm命令,也就是可以用它來編譯指定目錄的所有模塊,通常這個目錄只包含一個模塊。
二.使用mmm命令來編譯指定的模塊,例如Email應用程序:
[email protected]:~/Android$mmmpackages/apps/Email/
編譯完成之後,就可以在out/target/proct/generic/system/app目錄下看到Email.apk文件了。Android系統自帶的App都放在這具目錄下。另外,Android系統的一些可執行文件,例如C編譯的可執行文件,放在out/target/proct/generic/system/bin目錄下,動態鏈接庫文件放在out/target/proct/generic/system/lib目錄下,out/target/proct/generic/system/lib/hw目錄存放的是硬體抽象層(HAL)介面文件。
三.編譯好模塊後,還要重新打包一下system.img文件,這樣我們把system.img運行在模擬器上時,就可以看到我們的程序了。
[email protected]:~/Android$makesnod
四.參照Ubuntu上下載、編譯和安裝Android最新源代碼一文介紹的方法運行模擬器:
[email protected]:~/Android$emulator
這樣一切就搞定了。

㈧ 如何在android.mk中添加so庫只復制,不編譯

用Eclipse編譯工程,若工程下有libs目錄,會自動將裡面的*.so庫編譯到apk包中。我現在需要用到*.so庫和Android.mk文件編譯工程,但用Eclipse編譯時,Android.mk不起作用。

Android.mk好像只有在通過源代碼編譯工程時才起作用(我目前只發現這個辦法),即在Linux環境下的Android源代碼目錄中,通過make或mmm命令編譯。但通過mmm編譯的工程,不會把工程下libs目前中的*.so庫添加進apk包里,是不是要在Android.mk文件中添加一些申明什麼的?

還有,想知道Android源代碼中,重啟手機的相關代碼在哪個部分。

㈨ 如何開始的valgrind一個Android應用程序

如果要定製一個Android系統,你想用你自己的Launcher(Home)作主界面來替換Android自帶的Home,而且不希望用戶安裝的Launcher來替換掉你的Launcher,應該如何來實現呢?
我們可以通過修改Framework層來實現這樣的功能。

1) 首先了解一下Android的啟動過程。
Android系統的啟動先從Zygote開始啟動,然後......(中間的過程就不說了).....一直到了SystemServer(framework)這個地方,看到這段代碼:

/**
* This method is called from Zygote to initialize the system. This willcause the native
* services (SurfaceFlinger, AudioFlinger, etc..) to be started. Afterthat it will call back
* up into init2() to start the Android services.
*/
native public static void init1(String[] args);

public static void main(String[] args) {
if (SamplingProfilerIntegration.isEnabled()) {
SamplingProfilerIntegration.start();
timer = new Timer();
timer.schele(new TimerTask() {
@Override
public void run() {
SamplingProfilerIntegration.writeSnapshot("system_server");
}
}, SNAPSHOT_INTERVAL, SNAPSHOT_INTERVAL);
}

// The system server has to run all of the time, so it needs to be
// as efficient as possible with its memory usage.
VMRuntime.getRuntime().setTargetHeapUtilization(0.8f);

System.loadLibrary("android_servers");
init1(args);
}

public static final void init2() {
Log.i(TAG, "Entered the Android system server!");
Thread thr = new ServerThread();
thr.setName("android.server.ServerThread");
thr.start();
}
}

從SystemServer的main函數開始啟動各種服務:
首先啟動init1,然後啟動init2.從上面的注釋可以看到:init1這個方法時被Zygote調用來初始化系統的,init1會啟動native的服務如SurfaceFlinger,AudioFlinger等等,這些工作做完以後會回調init2來啟動Android的service。

這里我們主要來關注init2的過程。init2中啟動ServerThread線程,ServerThread中啟動了一系列的服務,比如這些:

ActivityManagerService
EntropyService
PowerManagerService
TelephonyRegistry
PackageManagerService
AccountManagerService
BatteryService
HardwareService
Watchdog
SensorService
BluetoothService
StatusBarService
ClipboardService
InputMethodManagerService
NetStatService
ConnectivityService
AccessibilityManagerService
NotificationManagerService
MountService
DeviceStorageMonitorService
LocationManagerService
SearchManagerService
FallbackCheckinService
WallpaperManagerService
AudioService
BackupManagerService
AppWidgetService

這些大大小小的服務起來以後,開始
((ActivityManagerService)ActivityManagerNative.getDefault()).systemReady()
在systemReady後開始開始啟動Launcher。在尋找Launcher的時候是根據HOME的filter(在Manifest中定義的<categoryandroid:name="android.intent.category.HOME" />)來過濾。
然後根據filter出來的HOME來啟動,如果只有一個HOME,則啟動這個HOME,如果用戶自己裝了HOME,那就會彈出來一個列表供用戶選擇。

現在希望從這里彈出自己定製的Launcher,同時也不希望彈出選擇HOME的界面,不希望用戶修改的home,比如我們的home上放了好多廣告,以及強制安裝的程序,不希望用戶把它幹掉。

可以通過這樣來實現:

2) 定義一個私有的filter選項,然後用這個選項來過濾HOME.
一般情況下我們使用Manifest中定義的<categoryandroid:name="android.intent.category.HOME"來過濾的,現在增加一個私有的HOME_FIRST過濾。

在Intent.java(frameworks/base/core/java/android/content/Intent.java)中添加兩行代碼

//lixinso:添加CATEGORY_FS_HOME
@SdkConstant(SdkConstantType.INTENT_CATEGORY)
public static final String CATEGORY_FS_HOME= "android.intent.category.FS_HOME";

3)修改和CATEGORY_HOME相關的所有的地方,都改成CATEGORY_FS_HOME,主要是framework中的這幾個地方:使用grep命令查找要修改的地方:

grep CATEGORY_HOME -l * -R

將上述文件中和CATEGORY_HOME相關的所有的地方,都改成CATEGORY_FS_HOME。
4) 寫一個自己的Launcher.
可以參考android sample中的Launcher,或者android源代碼中的 /packages/apps/Launcher 來寫。
在Launcher中標記其是不是Launcher的最關鍵的代碼時Manifest中的filter:android:name="android.intent.category.HOME"
現在我們定義了自己的filter,那麼,我們在我們自己寫的Launcher中將Manifest改為:
<application android:process="android.process.acore3"android:icon="@drawable/icon"android:label="@string/app_name">
<activity android:name=".FirstAppActivity"
android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN" />
<categoryandroid:name="android.intent.category. FS_HOME" />
<categoryandroid:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY"/>
</intent-filter>
</activity>
</application>

然後將編譯好的apk放到方式fs100_root/system/app目錄下。

5)將Android自帶的Launcher刪除掉
包括源代碼(packages/apps/Launcher)和apk(/out/target/proct/generic/system/app/Launcher.apk)。

6) 重新編譯Android
做完這些工作,就可以重新編譯Android了,我們可以編譯修改過的幾個相關的包,可以用mmm命令來編譯部分的改動。這里需要這樣編譯:

$ source build/envsetup.sh
$ lunch
$ mmm frameworks/base
$ mmm frameworks/base/services/java
$ mmm frameworks/policies/base/mid
$ mmm frameworks/policies/base/phone

重新啟動開發板,從開發板上就可以看到啟動的Launcher是我們自己的Launcher,不會出現默認的Launcher了,也不會出現選擇界面。

9)我們再驗證一下,如果用戶裝上了一個其他的Launcher(Home)會怎麼樣。
從網上找一個一般的Launcher或者自己寫一個一般的Launcher裝上去,重新啟動,不會出現選擇界面。
按HOME鍵也不會出來兩個HOME來選擇。

㈩ android.mk使用方法和mm,mmm命令怎麼使用

應用程序源碼的根目錄下面,這只有在linux下用MMM交叉編譯鏈編譯的時候才用的到,eclipse下是不會生成的。

閱讀全文

與mmm命令相關的資料

熱點內容
循環編譯指令 瀏覽:503
可變數組java 瀏覽:61
cad中y命令無法使用 瀏覽:724
如何查看linux編碼格式 瀏覽:531
輕音樂app怎麼下載不承是那裡過 瀏覽:830
電腦上解壓7z軟體免費版 瀏覽:624
如何在安卓手機上登錄蘋果的號 瀏覽:294
雲棲大會和程序員關系 瀏覽:670
伺服器託管使用cdn有什麼好處 瀏覽:145
app看視頻怎麼很卡 瀏覽:421
python輸出語句加引號 瀏覽:103
怎麼弄有密碼的便簽安卓 瀏覽:336
程序員都愛玩的足球 瀏覽:565
程序員摸魚怎麼處理 瀏覽:685
pdf裝備 瀏覽:281
鄉鎮程序員 瀏覽:848
php運行環境一鍵安裝包 瀏覽:884
python編寫排序函數 瀏覽:876
51單片機定時器中斷程序 瀏覽:561
win7iisphp安裝 瀏覽:810