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中的证书详细信

  • 相关阅读:
    UVa 10118 记忆化搜索 Free Candies
    CodeForces 568B DP Symmetric and Transitive
    UVa 11695 树的直径 Flight Planning
    UVa 10934 DP Dropping water balloons
    CodeForces 543D 树形DP Road Improvement
    CodeForces 570E DP Pig and Palindromes
    HDU 5396 区间DP 数学 Expression
    HDU 5402 模拟 构造 Travelling Salesman Problem
    HDU 5399 数学 Too Simple
    CodeForces 567F DP Mausoleum
  • 原文地址:https://www.cnblogs.com/vendanner/p/5068835.html
Copyright © 2011-2022 走看看