1、 修改APK應用:在packages中的應用如果修改后都可以單獨編譯。先執行
$. 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 掛載並獲取寫入權限
adb push xxx.apk /system/app
修改framework:如果在Contacts.java中修改了,必須重新編譯下framework。先執行
$ . build/envsetup.sh #初始化
#網上有的說要執行 make update-api,實際上直接make PRODUCT-sdk-sdk就可以將修改后的framework編譯到sdk中。 #編譯framework后,那些修改了的應用可以不用再單獨編譯了。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的一個,但是經常用。make 2&>txt
將make的信息輸出到txt中,如果make > txt則無法輸入
Linux Shell 環境中支持輸入輸出重定向,用符號"<"和">"來表示。0、1和2分別表示標准輸入、標准輸出和標准錯誤信息輸出,可以用來指定需要重定向的標准輸入或輸出
make &>test
表示標准和錯誤全部輸出
4、make -n &>txt
make -n 是現實編譯命令,但是不去執行,非常有用
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
#define LOG_TAG "TestLib" //自定義的變量,相當於logcat函數中的tag
#undef LOG
#include <android/log.h> //#include <utils/Log.h>//在源碼環境中,頭文件的路徑不同
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
可以定義多種log級別,在log.h中可以看到:
typedef enum android_LogPriority {2. 在c源文件中,調用輸入log的函數
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;
LOGD("Hello LIB!\n");//將會輸出“TestLib” “Hello LIB!”
3.在mk文件中,需要包含響應的庫
LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) //包含相應的頭文件
LOCAL_LDLIBS := -llog //包含打印log需要的庫文件
LOCAL_PRELINK_MODULE := false