zoukankan      html  css  js  c++  java
  • android:m/mm/mmm

    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 

     
    1. 在c源文件中,需要include头文件、定义宏
       #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 {
        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源文件中,调用输入log的函数
        LOGD("Hello LIB!\n");//将会输出“TestLib” “Hello LIB!”
    3.在mk文件中,需要包含响应的库
       LOCAL_C_INCLUDES :=  $(JNI_H_INCLUDE)    //包含相应的头文件
       LOCAL_LDLIBS :=  -llog                                       //包含打印log需要的库文件
       LOCAL_PRELINK_MODULE := false
  • 相关阅读:
    subprocess(子进程模块)
    logging日志模块,hashlib hash算法相关的库,
    json pickle xml shelve configparser
    os与操作系统进行交互,sys解释器相关,random随机数,shutil解压和压缩
    目录规范+时间模块
    vue的组件
    drf 分页
    包和模块
    docker镜像&nginx配置
    匿名函数 递归 二分法 面向过程编程
  • 原文地址:https://www.cnblogs.com/sardine/p/2100054.html
Copyright © 2011-2022 走看看