zoukankan      html  css  js  c++  java
  • android Tips

    本文搜集网上知识,记录android学习中的一些知识点

      logcat:

    // java层的logcat我们不谈,看native层:/system/core/include/log/log.h以ALOGV()为例,
    /*
    50 * Normally we strip ALOGV (VERBOSE messages) from release builds.
    51 * You can modify this (for example with "#define LOG_NDEBUG 0"
    52 * at the top of your source file) to change that behavior.
    53 */
    #ifndef LOG_NDEBUG
    #ifdef NDEBUG
    #define LOG_NDEBUG 1
    #else
    #define LOG_NDEBUG 0
    #endif
    #endif
    
    #ifndef ALOGV
    #if LOG_NDEBUG
    #define ALOGV(...)   ((void)0)
    #else
    #define ALOGV(...) ((void)ALOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__))
    #endif
    #endif
    // 需设置#define LOG_NDEBUG 0才能输出系统的ALOGV()信息
    #define ALOG(priority, tag, ...) 
        LOG_PRI(ANDROID_##priority, tag, __VA_ARGS__)
    #endif
    /*
     * Log macro that allows you to specify a number for the priority.
     */
    #ifndef LOG_PRI
    #define LOG_PRI(priority, tag, ...) 
        android_printLog(priority, tag, __VA_ARGS__)
    #endif
    // 你可以看看从ALOGV一直到__android_log_print,
    // 而__android_log_print就关联的日志的写文件操作,这里我们先不提
    #define android_printLog(prio, tag, fmt...) 
        __android_log_print(prio, tag, fmt)
        
    // 接下来我们看看系统中的logcat文件 
    $ adb shell dmesg > dmesg.txt   linux内核启动log,init进程log
    $ adb logcat -d -v time -b "main"   >  main.txt  Zygote进程log
    $ adb logcat -d -v time -b "system" >  system.txt SystemServer进程的log
    $ adb logcat -d -v time -b "events" >   events .txt 
    // 详情看 Android内核开发:学会分析系统启动log http://ticktick.blog.51cto.com/823160/1662911
    View Code
    // isLoggable(String tag, int level)可以控制log的输出,只有当tag-level大于level才返回true
    // if (BuildConfig.DEBUG && Log.isLoggable("MainActivity", Log.VERBOSE)) {
    //   Log.v("MainActivity", message);
    // }
    // 上面代码只有isLoggable返回true才会执行括号中的Log.v来输出log
    // ok,那tag-level上面时候定义的呢:
        adb shell setprop log.tag.<YOUR_LOG_TAG> <LEVEL>
        <LEVEL>:VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT
    View Code

      编译错误提示设置:

    修改源码目录下的 build/core/config.mk
    如下:
    - TARGET_ERROR_FLAGS := -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point
    
    + #TARGET_ERROR_FLAGS := -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point
    + TARGET_ERROR_FLAGS :=
    
    如果是单个模块中的错误就找到报错模块下的Android.mk,把编译标志 Werror去掉就可以。方便起见,我是直接把所有的makefile中的Werror全部去掉了,当然要做好备份。
    
    在Android.mk中添加标志禁用指定的Werror类型也可以:
    LOCAL_CFLAGS += -Wno-error=format-security
    http://blog.csdn.net/javensun/article/details/7448250
    View Code

       Android证书验证机制:

    // apk的META-INF文件夹包含三个文件:
    // 1、MANIFEST.MF
    // 遍历APK包中除了META-INF 文件夹以外的所有文件,利用SHA1算法生成这些文件的消息摘要,然后转化为对应的base64编码。
    // MANIFEST.MF存储的是文件的摘要值,保证完整性,防止文件被篡改。weixin的MANIFEST.MF:
    // Manifest-Version: 1.0
    // Created-By: 1.7.0_45 (Oracle Corporation)
    
    // Name: r/t/a3k.xml
    // SHA1-Digest: c6GfCzDzRo75w7HwMzjcPXGi++I=
    
    // Name: r/v/a1m.png
    // SHA1-Digest: Ao27xq4nYyBR5Z0yG07pN0MtlKI=
    // ……
    // 2、.SF
    // xx.SF文件(xx为使用者证书的自定义别名,默认为CERT,即CERT.SF),保存的是MANIFEST.MF的摘要值, 以及MANIFEST.MF中每一个摘要项的摘要值,
    // 然后转化成对应的base64编码。虽然该文件的后缀名.sf(SignatureFile)看起来是签名文件,但是并没有私钥参与运算,也不保存任何签名内容。
    // weixin的COM_TENC.SF:
    // Signature-Version: 1.0
    // SHA1-Digest-Manifest-Main-Attributes: sY6+RQ4DWdnxCfSpiwTT6GRIwA0=
    // Created-By: 1.7.0_45 (Oracle Corporation)
    // SHA1-Digest-Manifest: GduDrpyEw/pgWazHpioH6+7MyKo=
    // 
    // Name: r/t/a3k.xml
    // SHA1-Digest: b6IQQJD88w4yCVk0QHuy2cySHTE=
    
    // Name: r/v/a1m.png
    // SHA1-Digest: HqlAkc/TpMyeU/jhapu/Pxg1QLQ=
    // ……
    // 3、.RSA / .DSA
    // .RSA / .DSA文件(后缀不同采用的签名算法不同,.RSA使用的是RSA算法, .DSA使用的是数字签名算法DSA,目前APK主要使用的是这两种算法),
    // 保存的是第二项.SF文件的数字签名,同时还会包括签名采用的数字证书(公钥)。特别说明,当使用多重证书签名时,
    // 每一个.sf文件必须有一个.RSA/.DSA文件与之对应,也就是说使用证书CERT1签名时有CERT1.SF和CERT1.RSA,
    // 同时采用证书CERT2签名时又会生成CERT2.SF和CERT2.RSA。
    // 小结:MF文件是对apk文件的hash(sha1是hash算法),SF文件是对MF的每项内容进行hash,RSA文件包含证书和私钥对SF内容加密后的结果2项内容
    //        故MF和SF只能对apk完整性进行校验,而RSA是对app数字签名进行校验
    //        (用自定义的私钥重打包也可以通过android的数字签名校验,但可以在app是识别数字是否已被篡改——这是防止apk破解的方法)
    // 参考资料:http://bbs.pediy.com/showthread.php?t=195148
    //  FakeId是android签名校验的漏洞,可以我的android cve中找到,里面收集了网上的分析文章和poc
    View Code

    CERT.RSA中的证书详细信

  • 相关阅读:
    Java调用R环境配置问题:Cannot find JRI native library!
    在odoo 10.0配置文件中修改ip地址
    WordPress国外开源主题Enigma h1、h2、h3……标题不显示的解决办法
    ubuntu下编译为知笔记
    ubuntu linux 使用什么下载工具
    通过修改qt设置,解决LINK : fatal error LNK1104: 无法打开文件“kernel32.lib”
    [DONE]ReferenceError: WebSocket is not defined pomelo
    [DONE]pomelo npm-install 出现 AttributeError: 'module' object has no attribute 'script_main'
    finished running <my app>” on the targeted device
    c++中64位int与字符串的转换
  • 原文地址:https://www.cnblogs.com/vendanner/p/5068835.html
Copyright © 2011-2022 走看看