日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

android:m/mm/mmm

 JUST SO LAZY 2012-04-05

android:m/mm/mmm

1、   修改APK應(yīng)用:在packages中的應(yīng)用如果修改后都可以單獨編譯。先執(zhí)行 
$. build/envsetup.sh #初始化
$mmm packages/providers/ContactsProvider/
##用mm/mmm來編譯生成的.apk并不會打包到system.img中,需要我們手動通過make snod把system文件夾打包為system.img
##可以使用make snod將模塊打包到system.img中,也可以使用 adb install *.apk安裝
注:通過mmm packages/providers/ContactsProvider/ 編譯后的apk在 out/target/product/generic/system/app 
這時候通過 adb install out/target/product/generic/system/app/xxx.apk 安裝你剛修改過的apk就可以在模擬器上看到你修改的效果了。

adb push方式進去:

adb shell mount -o rw,remount -t ext3 /dev/block/mmcblk0p2 /system   掛載并獲取寫入權(quán)限
adb push xxx.apk /system/app



 修改framework:如果在Contacts.java中修改了,必須重新編譯下framework。先執(zhí)行 
$ . build/envsetup.sh #初始化
#網(wǎng)上有的說要執(zhí)行 make update-api,實際上直接make PRODUCT-sdk-sdk就可以將修改后的framework編譯到sdk中。 #編譯framework后,那些修改了的應(yīng)用可以不用再單獨編譯了。4~6分鐘
$ make PRODUCT-sdk-sdk #重新生成SDK 10~20分鐘

2.三個m的含義

以下是在help中看到的信息

- 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.

m,顯然是make

mm ,在編譯單一模塊的時候可以在當前目錄下使用

mmm 可以在android目錄下使用

  

3、不是android的一個,但是經(jīng)常用。make 2&>txt

將make的信息輸出到txt中,如果make > txt則無法輸入

Linux Shell 環(huán)境中支持輸入輸出重定向,用符號"<"和">"來表示。0、1和2分別表示標準輸入、標準輸出和標準錯誤信息輸出,可以用來指定需要重定向的標準輸入或輸出

make &>test

表示標準和錯誤全部輸出

4、make -n &>txt

make -n 是現(xiàn)實編譯命令,但是不去執(zhí)行,非常有用

5.顯示詳細的編譯過程信息(ndk)

在definitions.mk中有定義。

ifeq ($(V),1)
hide = $(empty)
else
hide = @
endif

要想把所有的編譯命令輸出來,只需要先export V=1就可以了。

輸出NDK詳細log

$NDK/ndk-build V=1 2>&1 | tee log.txt

Android NDK 打印log 

 
1. 在c源文件中,需要include頭文件、定義宏
   #define LOG_TAG "TestLib" //自定義的變量,相當于logcat函數(shù)中的tag
   #undef LOG
   #include <android/log.h>   //#include <utils/Log.h>//在源碼環(huán)境中,頭文件的路徑不同
   #define LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)  
   可以定義多種log級別,在log.h中可以看到:
typedef enum android_LogPriority {
    ANDROID_LOG_UNKNOWN = 0,
    ANDROID_LOG_DEFAULT,    /* only for SetMinPriority() */
    ANDROID_LOG_VERBOSE,
    ANDROID_LOG_DEBUG,
    ANDROID_LOG_INFO,
    ANDROID_LOG_WARN,
    ANDROID_LOG_ERROR,
    ANDROID_LOG_FATAL,
    ANDROID_LOG_SILENT,     /* only for SetMinPriority(); must be last */
} android_LogPriority;
2. 在c源文件中,調(diào)用輸入log的函數(shù)
    LOGD("Hello LIB!\n");//將會輸出“TestLib” “Hello LIB!”
3.在mk文件中,需要包含響應(yīng)的庫
   LOCAL_C_INCLUDES :=  $(JNI_H_INCLUDE)    //包含相應(yīng)的頭文件
   LOCAL_LDLIBS :=  -llog                                       //包含打印log需要的庫文件
   LOCAL_PRELINK_MODULE := false

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多